LEKCJA 6 - P╩TLE "REPEAT" I "WHILE"

poprzedniej lekcji nauczy│e╢ siΩ │▒czyµ rekordy z tablicami w bardziej zaawansowane struktury. Pozna│e╢ tak┐e mechanizm pΩtli "for", kt≤ry u│atwia pisanie pogramu, w kt≤rym wype│nia siΩ tablice. Dzisiaj poznasz jeszcze dwa rodzaje pΩtli, kt≤re oferuje pascal. PocieszΩ Ciebie, ┐e zrozumienie tematu bΩdzie prostsze ni┐ poprzednio.

Og≤lnie rzecz bior▒c, pΩtle pozwalaj▒ tak d│ugo wykonywaµ jakie╢ czynno╢ci, jak d│ugo jest spe│niony jaki╢ warunek - warunek wykonywania pΩtli. PΩtle "while" i "repeat" w przeciwie±stwie do pΩtli "for" nie posiadaj▒ zmiennej steruj▒cej. Ilo╢µ wykonanych pΩtli nie jest zliczana automatycznie. Je╢li jest to potrzebne, u┐ytkownik musi sam o to zadbaµ.

PΩtla "while" ma nastΩpuj▒c▒ konstrukcjΩ: "while (warunek) do (akcja)". Warunek to najczΩ╢ciej jakie╢ wyra┐enie logiczne, czyli zwracaj▒ce jedn▒ z dw≤ch warto╢ci: prawda lub fa│sz. Mo┐na tu wstawiaµ np. por≤wnania. Akcja to po prostu jakaµ pojedyncza instrukcja. Oczywi╢cie w jej miejsce mo┐na wstawiµ instrukcjΩ grupuj▒c▒, tak jak to pokaza│em w poprzedniej lekcji. PΩtla jest wykonywana tak d│ugo, jak jest spe│niony warunek wykonywania pΩtli. Oto przyk│ad:

program p1;
var
wyn: integer;
begin
writeln('Witam. Jestem programem sprawdzaj▒cym Twoj▒ znajomo╢µ tabliczki mno┐enia.');
writeln('Ile to jest 12*12?');
readln(wyn);
while (wyn<>144) do begin
writeln('¼le! Spr≤buj znowu:');
readln(wyn);
end;
writeln('Zgad│e╢! GratulujΩ!');
end.

Program pyta, ile to jest 12*12 tak d│ugo, a┐ odpowie siΩ poprawnie. Dok│adniej - pΩtla jest wykonywana tak d│ugo, jak podawany przez u┐ytkownika wynik jest r≤┐ny od 144. Warunek trwania pΩtli jest podany w nawiasie. Nie jest to wymagane, ale zwiΩksza czytelno╢µ programu. W przysz│o╢ci mo┐e byµ to konieczne (przy formu│owaniu bardziej z│o┐onych warunk≤w). W warunku wystΩpuje znak "<>". Jest to w pascalu znak r≤┐no╢ci. Mamy te┐ do dyspozycji kilka innych operator≤w relacji: "<" - znak mniejszo╢ci, ">" - znak wiΩkszo╢ci, ">=" - wiΩkszy lub r≤wny i "<=" - mniejszy lub r≤wny oraz "=" - znak r≤wno╢ci.

PΩtla "repeat" r≤┐ni siΩ od pΩtli "while" tym, ┐e jest wykonywana tak d│ugo, jak nie jest spe│niony warunek zako±czenia pΩtli. Ko±czy siΩ ona, gdy warunek zostanie spe│niony. Jest wiΩc w sumie odwrotna do pΩtli "while". Ma ona te┐ nieco inn▒ konstrukcjΩ:

repeat
instrukcje;
...
until (warunek);
Warunek zako±czenia pΩtli (a nie jej wykonywania!) jest podany na ko±cy po s│owie "until". Wykonywane s▒ w tej pΩtli wszystkie instrukcje miΩdzy s│owami "repeat" i "until". Taka konstrukcja pΩtli powoduje, ┐e nawet gdy chcemy, aby w pΩtli wykonywa│o siΩ kilka instrukcji, to nie musimy u┐ywaµ instrukcji grupuj▒cej (czyli "begin...end").

Warunki w pΩtli "while" sprawdza siΩ na jej pocz▒tku, a w pΩtli "repeat" na ko±cu. W zwi▒zku z tym je╢li warunek wykonania pΩtli "while" nie jest ju┐ na wej╢ciu spe│niony, to nie wykona siΩ ona ani razu. Natomiast je╢li warunek zako±czenia pΩtli "repeat" jest od samego pocz▒tku spe│niony, to i tak taka pΩtla wykona siΩ przynajmniej raz. Nasz poprzedni program trzeba by tak zmodyfikowaµ, aby u┐ywa│ on pΩtli "repeat...until":

program p2;
var
wyn: integer;
begin
writeln('Witam! SprawdzΩ Twoj▒ znajomo╢µ tabliczki mno┐enia!');
writeln('Podaj ile to jest 12*12:');
repeat
readln(wyn);
until (wyn=144);
writeln('Gratulacje! Uda│o siΩ!');
end.

W pascalu mamy te┐ kilka sp≤jnik≤w logicznych. Najwa┐niejsze z nich to: sp≤jnik "i" reprezentowany s│owem "and" oraz sp≤jnik "lub" reprezentowany s│owem "or". DziΩki nim w pΩtlach mo┐emy po│▒czyµ kilka warunk≤w logicznych. Mo┐na na przyk│ad stworzyµ warunek: "((a>10) and (a<100))". Kolejne warunki mo┐na formu│owaµ dok│adniej u┐ywaj▒c nawias≤w. Przyk│adowy warunek jest spe│niony, gdy a jest wiΩksze od 10 i jest jednocze╢nie mniejsze od 100. Sprawdzanie nale┐enia liczby do przedzia│u to tylko przyk│adowe wykorzystanie sp≤jnik≤w logicznych.

Mam nadziejΩ, ┐e zrozumia│e╢ dzisiejsz▒ lekcjΩ. Nie by│a ona trudna. Musisz jedynie dobrze nauczyµ siΩ nowych pΩtli i tworzenia warunk≤w logicznych. BΩdzie Ci to potrzebne do zrozumienia nastΩpnej lekcji.

ZapamiΩtaj:

  1. pΩtla "while" jest wykonywana tak d│ugo, jak jest spe│niony warunek jej wykonania
  2. pΩtla "repeat" jest wykonywana tak d│ugo, jak nie jest spe│niony warunek jej zako±czenia
  3. najwa┐niejsze sp≤jniki logiczne to "and" i "or"
  4. powy┐sze sp≤jniki maj▒ te┐ inne znaczenie; aby unikn▒µ rozczarowa± u┐ywaj przy formu│owaniu warunk≤w nawias≤w!


Baner reklamowy: