Pętle, pętle wielokrotne
W Pascalu mamy kilka rodzajów pętli. Zacznijmy alfabetycznie.
Pętla FOR
Są dwie odmiany pętla idąca w górę i w dół.
Składnie odpowiednio wyglądają:
FOR licznik:=wartosc1 TO wartosc2 DO instrukcje;
{ dla wartosc1 < wartosc2, pętla rosnąca }
FOR licznik:=wartosc1 DOWNTO wartosc2 DO instrukcje;
{ dla wartosc1 > wartosc2, pętla malejąca }
Uwagi: licznik jest typu całkowitego, zmienna licznik zmienia się o 1, nie można wykonywać skoków.
I przykład:
program trojkat;
var a,b: integer;
begin
for b:= 1 to 5
do
begin {zaczyna rysowac trojkat}
write('*':15-b);
for a:=1 to 2*b-2
do
write('*');
writeln;
end;
readln; {czeka na nacisniecie klawisza enter, pozniej konczy program}
end.
Pętla REPEAT UNTIL
Pętla jest tak długo wykonywana dopóki warunek wyjścia nie jest prawdziwy.
REPEAT
wypisz(tekst,ile);
UNTILL keypressed;
Jeśli ktoś naciśnie klawisz, warunek będzie prawdziwy i iteracja zostanie przerwana.
Pętla WHILE
While różni się tylko tym od Repeat, że fałsz jest warunkiem wyjścia z pętli. Składnia wygląda tak:
WHILE warunek DO instrukcje;
Przykłady użycia while:
PROGRAM Suma;
CONST N = 1000 ;
VAR K,SUM,X : Integer ;
BEGIN
Writeln('Wykonanie programu kończy się po wprowadzeniu');
Writeln('1000 liczb. To nie jest zabawa ani gra.') ;
K := 1 ;
SUM := 0 ;
WHILE K <= N
DO BEGIN {Początek treści pętli}
Write('Wprowadź liczbę typu Integer:') ;
Read(X) ;
Writeln ;
SUM := SUM + X ;
Writeln('Suma częściowa;',SUM:6) ;
K := K + 1
END ; {Koniec treści pętli}
Writeln ;
Writeln('Suma N=',N,' liczb wynosi:',SUM:6);
END.
Pętle wielokrotne (zagnieżdżone)
Pierwszy programik spowoduje wyświetlenie trzykrotnie ciągu liter od 'a' do 'z', każdy ciąg w nowej linii.
uses crt;
var k: integer;
litera: char;
begin
clrscr;
for k := 1 to 3 do { petla zewnetrzna }
begin
for litera := 'a' to 'z' { petla wewnetrzna }
do write(litera:2);
writeln;
end;
readln;
end.
Przykład pętli wielokrotnej umieściłem także przy okazji omawiania pętli FOR - program rysujący piramidę (trójkąt).