free pascal

klaudekk
Użytkownik
Użytkownik
Posty: 277
Rejestracja: 30 paź 2010, o 15:06
Płeć: Kobieta
Podziękował: 22 razy
Pomógł: 8 razy

free pascal

Post autor: klaudekk »

Musze oparcowac program zgadujacy wiek w moim wykonaniu wyglada on tak:

Kod: Zaznacz cały

program wiek;
uses crt;
var a:integer; 
o:char; 
Begin
a:=40;
writeln('Spróbuje zgadnąć Twój wiek.')
repeat
writeln('Hmmm niech pomyślę... Ile Ty mozesz miec lat...??? Może',a,'?');
writeln(' Zgadłem? Jesli nie to za duzo czy za mało lat wskazałem?? [z/d/m]');
repeat
readln (o);
Until (o='z') or (o='d') or (o='m');
If (o='d') then a:=(a-1)
If (o='m') then a := (a+1) else writeln('Wiedziałem od samego początku tylko tak się bawiłem :)')
end.

Co jest nie tak??
Ostatnio zmieniony 21 kwie 2011, o 16:54 przez Afish, łącznie zmieniany 1 raz.
Powód: Temat umieszczony w złym dziale.
Flaj
Użytkownik
Użytkownik
Posty: 12
Rejestracja: 17 kwie 2011, o 23:35
Płeć: Mężczyzna
Lokalizacja: Słupsk
Pomógł: 2 razy

free pascal

Post autor: Flaj »

Nie zamknęłaś drugiej pętli repeat.
klaudekk
Użytkownik
Użytkownik
Posty: 277
Rejestracja: 30 paź 2010, o 15:06
Płeć: Kobieta
Podziękował: 22 razy
Pomógł: 8 razy

free pascal

Post autor: klaudekk »

A mozesz powiedziec jak to zrobic w którym miejscu?
Flaj
Użytkownik
Użytkownik
Posty: 12
Rejestracja: 17 kwie 2011, o 23:35
Płeć: Mężczyzna
Lokalizacja: Słupsk
Pomógł: 2 razy

free pascal

Post autor: Flaj »

Kod: Zaznacz cały

program wiek;
uses crt;
var a:integer; o:char; zgadlem:=boolean;
Begin
zgadlem:=false;
a:=40;
writeln('Spróbuje zgadnąć Twój wiek.');
repeat
writeln('Hmmm niech pomyślę... Ile Ty mozesz miec lat...??? Może',a,'?');
writeln(' Zgadłem? Jesli nie to za duzo czy za mało lat wskazałem?? [z/d/m]');
readln (o);
if o='d' then a:=a-1;
if o='m' then a := a+1;
if o='z' then zgadlem:=true;
until zgadlem=true;
writeln('Wiedziałem od samego początku, że masz ',a,' lat. Tylko tak się bawiłem :)');
end.
Pamiętaj o średnikach na końcu poleceń.
klaudekk
Użytkownik
Użytkownik
Posty: 277
Rejestracja: 30 paź 2010, o 15:06
Płeć: Kobieta
Podziękował: 22 razy
Pomógł: 8 razy

free pascal

Post autor: klaudekk »

Juz rozumiem swoj błąd, bardzo dziękuje -- 21 kwi 2011, o 17:38 --Mam jeszcze jedno pytanko, nie dotyczace akurat tego programu, co może być nie tak jesli program dziala tak jak powinien, liczy to co powinien tylko w pewnym momencie cały czas wypisuje prawidłowa odpowiedz, tak w nieskończoność?
Flaj
Użytkownik
Użytkownik
Posty: 12
Rejestracja: 17 kwie 2011, o 23:35
Płeć: Mężczyzna
Lokalizacja: Słupsk
Pomógł: 2 razy

free pascal

Post autor: Flaj »

Być może używasz pętli repeat i jakiegoś warunku, który jest zawsze spełniony, przez co program nie może zakończyć działania.
klaudekk
Użytkownik
Użytkownik
Posty: 277
Rejestracja: 30 paź 2010, o 15:06
Płeć: Kobieta
Podziękował: 22 razy
Pomógł: 8 razy

free pascal

Post autor: klaudekk »

Uzywam pętli While jest jeden warunek i trzy wyjścia z niego, bo jest to podzielności przez trzy i ile reszty zostaje. I dobra odpowiedz wyświetla sie tak jak wspomniałam bez końca
Flaj
Użytkownik
Użytkownik
Posty: 12
Rejestracja: 17 kwie 2011, o 23:35
Płeć: Mężczyzna
Lokalizacja: Słupsk
Pomógł: 2 razy

free pascal

Post autor: Flaj »

Pokaż kod i zadanie, z pewnością jakiś warunek jest spełniany bez końca
klaudekk
Użytkownik
Użytkownik
Posty: 277
Rejestracja: 30 paź 2010, o 15:06
Płeć: Kobieta
Podziękował: 22 razy
Pomógł: 8 razy

free pascal

Post autor: klaudekk »

Mam zadanie w którym mam wyznaczyc srednią ciągu o n wyrazach.

Kod: Zaznacz cały

program nazwa;
uses crt;
var a,i,n,ile,s,suma:integer;

begin
ile:=0;
s:=0;
suma:=0;
writeln('Podaj ilość wyrazów ciągu');
readln(n);
 for i:=1 to n do
writeln('Podaj wyraz ciagu');
readln(a);
if i<=n then
begin
ile:=ile+1;

suma:=suma+a;
end;
s:=suma/ile;
writeln('srednia wynosi=',s,'.');
readln();
end.



Co jest źle?? Bardzo prosze o pomoc.

-- 23 kwi 2011, o 15:35 --

Juz błąd znalazłam
Flaj
Użytkownik
Użytkownik
Posty: 12
Rejestracja: 17 kwie 2011, o 23:35
Płeć: Mężczyzna
Lokalizacja: Słupsk
Pomógł: 2 razy

free pascal

Post autor: Flaj »

Linijka 11 - masz blok instrukcji, więc w po pętli for musisz napisać

Kod: Zaznacz cały

do begin
zamiast samego:
Zwróć uwagę, że w pętli określasz ilość zapytań o wyraz ciągu:

Kod: Zaznacz cały

for i:=1 to n
więc nie musisz w jej wnętrzu wykonywać sprawdzenia:

Kod: Zaznacz cały

if i<=n
Krócej, lepiej:

Kod: Zaznacz cały

for i:=1 to n do begin
writeln('Podaj wyraz ciagu');
readln(a);
ile:=ile+1;
suma:=suma+a;
end;
Zwróć jeszcze uwagę na deklarację zmiennych. Twoja zmienna pod literką s kryje w sobie średnią. Średnia rzadko jest liczbą całkowitą, dlatego powinnaś ją zadeklarować jako liczbę rzeczywistą.

Kod: Zaznacz cały

s:real;
Natomiast w wyniku możesz ją ładnie skrócić do wyświetlenia dwóch miejsc po przecinku:

Kod: Zaznacz cały

writeln('srednia wynosi=', s:5:2);
Pozdrawiam
ODPOWIEDZ