Skocz do zawartości
motorbike

Problem z poleceniem ELSE w Turbo Pascal

Rekomendowane odpowiedzi

Witam

 

Napisałem coś takiego:

 

<link>

 

I problem polega na tym, że nawet gdy zostanie spełniony pierwszy warunek, to i tak zostaje wyświetlone, to co jest po poleceniu ELSE...

Chciałbym, aby polecenie ELSE zadziałało, tylko wtedy, gdy zaden z warunków nie zostanie spełniony. Wiecie co w powyższym kodzie jest nie tak ?

 

 

 

Z góry dzięki

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

USES CRT;VARliczba:longint;BEGINclrscr;writeln('Wprowadź jakąś liczbę od 1 do 5');read(liczba);IF liczba=1 THEN writeln('Brawo! Podałeś liczbę 1')ELSE IF liczba=2 THEN writeln('Brawo! Podałeś liczbę 2')ELSE IF liczba=3 THEN writeln('Brawo! Podałeś liczbę 3')ELSE writeln('Na pewno nie podałeś liczby 1, 2 lub 3');readln;END.
Edytowane przez kfgz

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

USES CRT;VARliczba:longint;BEGINclrscr;writeln('Wprowadź jakąś liczbę od 1 do 5');read(liczba);IF liczba=1 THEN writeln('Brawo! Podałeś liczbę 1')ELSE IF liczba=2 THEN writeln('Brawo! Podałeś liczbę 2')ELSE IF liczba=3 THEN writeln('Brawo! Podałeś liczbę 3')ELSE writeln('Na pewno nie podałeś liczby 1, 2 lub 3');readln;END.

Ej a może mi ktoś wytłumaczyć, jak w tym przypadku działa polecenie ELSE i ta cala instrukcja warunkowa ?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Musisz odrobinkę pomyśleć o założeniach logicznych ;) Twój oryginalny kod nie był zbyt logiczny, ponieważ sprawdzałeś każdą liczbę oddzielnie (2x IF + IF i ELSE) a powinieneś to zrobić w jednym bloku (mój kod) - IF + 3x ELSE, które to tworzą jeden ciągły blok instrukcji warunkowych. Te warunki się wykluczają (mój kod) a w Twoim kodzie nie. Ot, cała tajemnica ;)

Edytowane przez kfgz

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

IF liczba=1 THEN writeln('Brawo! Podałeś liczbę 1');

IF liczba=2 THEN writeln('Brawo! Podałeś liczbę 2');

IF liczba=3 THEN writeln('Brawo! Podałeś liczbę 3')

ELSE writeln('Na pewno nie podałeś liczby 1, 2 lub 3');

Tłumaczenie pascal na nasze:

IF -> jeżeli , THEN -> wtedy, ELSE-> w przeciwnym wypadku.

 

Aby wytłumaczyć zasadę działania twojego programu weźmy pod uwagę ten kod (bardzo podobny do twojego) oraz sytuację że został zorganizowany konkurs w którym losuje się 1 z 5 liczb:

IF liczba=1 THEN writeln('wygrywasz 1kg cukru');

IF liczba=2 THEN writeln('wygrywasz 2kg cukru');

IF liczba=3 THEN writeln('wygrywasz nagrodę główną 60kg cukru.')

ELSE writeln('otrzymujesz nagrodę pocieszenia');

- Jeżeli wylosujesz liczbę 1 wygrasz wtedy 1kg cukru. IF liczba=1 THEN writeln('wygrywasz 1kg cukru');

- Jeżeli wylosujesz liczbę 2 wygrasz wtedy 2kg cukru. IF liczba=2 THEN writeln('wygrywasz 2kg cukru');

- Jeżeli wylosujesz liczbę 3 wygrasz wtedy nagrodę główną 60kg cukru, IF liczba=3 THEN writeln('wygrywasz nagrodę główną 60kg cukru.')

- w przeciwnym przypadku gdy nie wylosujesz liczby 3 dostajesz nagrodę pocieszenia. ELSE writeln('otrzymujesz nagrodę pocieszenia');

 

Teraz wylosowałeś liczbę 1, czyli zgodnie z powyższą listą wygrywasz 1kg cukru oraz otrzymujesz nagrodę pocieszenia ponieważ nie trafiłeś nagrody głównej. Gdy wylosujesz liczbę 2 zdobywasz 2kg cukru oraz nagrodę pocieszenia. Gdy wylosujesz liczbę 5 to otrzymujesz tylko nagrodę pocieszenia. Dopiero gdy trafisz 3 to wygrasz główną nagrodę, przez co nie otrzymasz nagrody pocieszenia. Tak mniej więcej przedstawia się zasada działania powyższego algorytmu.

 

Wszystko co jest po ELSE wykonywane jest tylko wtedy gdy warunek który stoi przy najbliższym IF nie zostanie spełniony.

------------------------------------------------------------------------------------------

IF liczba=1 THEN writeln('Brawo! Podałeś liczbę 1');

ELSE IF liczba=2 THEN writeln('Brawo! Podałeś liczbę 2');

ELSE IF liczba=3 THEN writeln('Brawo! Podałeś liczbę 3')

ELSE writeln('Na pewno nie podałeś liczby 1, 2 lub 3');

Można to przetłumaczyć tak:

]IF liczba=1 THEN writeln('Brawo! Podałeś liczbę 1') -> Jeżeli liczba jest równa 1 wtedy wyświetl "Brawo! Podałeś liczbę 1",

ELSE IF liczba=2 THEN writeln('Brawo! Podałeś liczbę 2')-> w przeciwnym wypadku sprawdź czy liczba jest równa 2, jeżeli tak wyświetl napis "Brawo! Podałeś liczbę 2",

ELSE IF liczba=3 THEN writeln('Brawo! Podałeś liczbę 3')-> w przeciwnym wypadku (gdy liczba nie będzie równa 2) sprawdź czy liczba jest równa 3, jeżeli tak wyświetl napis "Brawo! Podałeś liczbę 3",

ELSE writeln('Na pewno nie podałeś liczby 1, 2 lub 3'); -> Gdy żaden z wcześniejszych warunków nie zostanie spełniony wyświetl napis "Na pewno nie podałeś liczby 1, 2 lub 3".

 

W tym przypadku zamiast IF THEN ELSE możesz użyć także CASE OF ELSE, przez co program stanie się bardziej czytelny.

Wówczas twój algorytm wyglądał by tak

CASE liczba OF

1 : writeln('Brawo! Podałeś liczbę 1');

2 : writeln('Brawo! Podałeś liczbę 2');

3 : writeln('Brawo! Podałeś liczbę 3');

ELSE writeln('Na pewno nie podałeś liczby 1, 2 lub 3');

 

Cały kod wyglądał by wtedy tak:

 

USES CRT;

 

VAR

liczba:longint;

 

BEGIN

clrscr;

writeln('Wprowadź jakąś liczbę od 1 do 5');

read(liczba);

CASE liczba OF

1 : writeln('Brawo! Podałeś liczbę 1');

2 : writeln('Brawo! Podałeś liczbę 2');

3 : writeln('Brawo! Podałeś liczbę 3');

ELSE writeln('Na pewno nie podałeś liczby 1, 2 lub 3');

readln;

END.

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...