motorbike Opublikowano 11 Września 2011 Zgłoś Opublikowano 11 Września 2011 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 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
kfgz Opublikowano 11 Września 2011 Zgłoś Opublikowano 11 Września 2011 (edytowane) 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 11 Września 2011 przez kfgz Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
motorbike Opublikowano 11 Września 2011 Zgłoś Opublikowano 11 Września 2011 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 ? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
kfgz Opublikowano 11 Września 2011 Zgłoś Opublikowano 11 Września 2011 (edytowane) 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 11 Września 2011 przez kfgz Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
KoVol Opublikowano 11 Września 2011 Zgłoś Opublikowano 11 Września 2011 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. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...