Instrukcje ITERACYJNE
Instrukcja iteracyjna FOR
Instrukcja "dla" - wykorzystywana zwykle w celu wykonania pewnej grupy instrukcji w przypadku, gdy liczba powtórzeń jest znana w danym miejscu programu. Instrukcja "dla" może mieć jedną z dwóch postaci:
FOR zs := wp TO wk DO Instrukcja
FOR zs := wp DOWNTO wk DO Instrukcja
Zmienna zs (nazywana zmienną sterującą), musi być identyfikatorem zmiennej typu porządkowego i powinna być lokalna w bloku zawierającym daną instrukcję "dla", tzn. w czasie wykonywania Instrukcji wartość zmiennej sterującej nie może być zmieniana. Wartość wp (wartość początkowa) i wk (wartość końcowa) musi być zgodna w sensie przypisania z typem zmiennej sterującej. Instrukcja po słowie DO może być instrukcją prostą lub strukturalną. Instrukcja podana po DO nie zostanie wykonana ani razu, gdy
- wartość wp jest większa od wartości wk (w TO)
- wartość wp jest mniejsza od wartości wk (w DownTo).
W przypadku próby zmiany wartości zmiennej sterującej w instrukcji wchodzącej w skład instrukcji "dla" wystąpi błąd.
Realizacja pętli FOR:


Łatwo można zauważyć, że poprzednie programy wykonują wielokrotnie te same czynności. INSTRUKCJE ITERACYJNE służą do ograniczenia cykli programowych, tj. wielokrotnego wykonywania pewnych sekwencji instrukcji.
W języku Turbo Pascal występują trzy instrukcje iteracyjne.
instrukcja "dla" FOR,
instrukcja "dopóki" WHILE,
instrukcja "powtarzaj" REPEAT.
Instrukcję iteracyjną "dla" FOR stosuje się w programie w przypadku, gdy liczba powtórzeń jest znana w danym miejscu programu. Instrukcja for może mieć jedną z dwóch postaci:
gdy wartość początkowa się zwiększa
FOR wartość := wartość_pocz TOwartość_końcowa DO instrukcja
gdy wartość początkowa się zmniejsza
FOR wartość := wartość_pocz DOWNTO wartość_końcowa DO instrukcja
Program z zastosowaniem pętli FOR "dla" wyświetlający całą tabliczkę mnożenia z jednym pustym wierszem po każdym słupku.
Program Pet_For;
uses Crt;
var mnoznik:byte;
mnozna:byte;
Begin
ClrScr;
For mnoznik:=1 to 10 do
begin
For mnozna:=1 to 10 do
WriteLn(mnozna,'*',mnoznik,'=',mnozna*mnoznik);
WriteLn;
readkey;
end;
End.
Program z zastosowaniem instrukcji iteracyjnej FOR oczekujący 10 razy na naciśnięcie klawisza a następnie za każdym razem wyświetlający komunikat o treści n-tym razem wcisnąłeś klawisz "a" o kodzie ASCII 65.
Program Pentla_for_ASCII;
uses Crt;
var a:byte;
Klawisz:Char;
Begin
ClrScr;
For a:=1 to 10 do
begin
Klawisz:=readkey;
WriteLn(a,'-razem wcisnąłeś'',klawisz,''o kodzie ASCII=' ,ORD(klawisz));
end;
Readkey;
End.
Kolejną instrukcją iteracyjną jest instrukcja "dopóki" WHILE . Instrukcja ta służy do sprawdzenia warunku iteracji na początku i ma postać:
WHILE wyrażenie DO instrukcja
Wyrażenie jest najczęściej wyrażeniem porównania, powinno w wyniku dawać wartość logiczną TRUE lub FALSE, a instrukcja po słowie DO może być dowolną instrukcją prostą lub strukturalną. Instrukcja ta wykonywana jest tak długo dopóki wartością wyrażenia jest TRUE.
Program wyświetlający jeden słupek tabliczki mnożenia z zastosowaniem instrukcji iteracyjnej WHILE - "dopóki".
Program Pet_While;
uses Crt;
var mnoznik:byte;
const mnozna:byte=5;
Begin
ClrScr;
mnoznik:=1;
While mnoznik<=10 do
begin
WriteLn(mnozna,'*',mnoznik,'=',mnozna*mnoznik);
Inc(mnoznik);
end;
ReadLn;
readkey;
End.
Program z zastosowaniem pętli WHILE wyświetlający całą tabliczkę mnożenia z jednym pustym wierszem po każdym słupku.
Program Pet_While; uses Crt;
var mnoznik:byte;
const mnozna:byte=5;
Begin
ClrScr;
mnoznik:=1;
While mnoznik <=10 do
begin
mnozna:=1;
While mnozna<=10 do
begin
WriteLn(mnozna,'*',mnoznik,'=',mnozna*mnoznik);
Inc(mnozna);
end;
WriteLn;
Inc(mnoznik);
ReadKey;
end;
ReadLn;
End.
REPEAT
instrukcja
instrukcja
UNTIL - warunek logiczny
Program z zastosowaniem pętli REPEAT "powtarzaj", wyświetlający jeden słupek tabliczki mnożenia
Program Pet_Repeat
uses Crt;
var mnoznik:byte;
Begin
ClrScr;
mnoznik:=1;
Repeat
WriteLn(mnozna,'*',mnoznik,'=',mnozna*mnoznik);
mnoznik:=mnoznik+1;
Until mnoznik>10;
ReadLn;
readkey;
End.
W Turbo Pascalu istnieją dwie instrukcje warunkowe:
instrukcja "jeśli" IF - mająca dwie możliwe postacie,
instrukcja wyboru CASE.
Instrukcja IF "jeśli" uzależnia wykonanie innych instrukcji od spełnienia określonego warunku. Ogólna postać tej instrukcji jest następująca:
IF wyrażenie THEN instrukcja
lub
IF wyrażenia THEN instrukcja
ELSE w przeciwnym wypadku instrukcja
Warunkiem wyrażenia jest wartość logiczna TRUE lub FALSE.
W programowaniu często mamy do czynienia z sytuacją, gdy wykonanie różnych poleceń jest uzależnione od wartości zmiennej. Możemy wtedy zastosować instrukcję wyboru, której postać jest następująca:
CASE wyrażenie OF
sekwencja instrukcji wyboru
END
lub
CASE wyrażenie OF
sekwencja instrukcji wyboru
ELSE w przeciwnym wypadku instrukcji
END
Program gra, testujący znajomość tabliczki mnożenia. Program wykonuje 5-cio krotne losowanie mnożnej i mnożnika i oczekuje na wprowadzenie wyniku. Gdy wynik jest niepoprawny, program informuje o błędzie i powtórnie wyświetla to samo działanie. W przypadku poprawnej odpowiedzi program podaje czas w sekundach z dokładnością do 0,01 s i wyświetla następne pytanie. Po zakończeniu testu program wyświetla średni czas odpowiedzi.
Program Test_mnozenia;
uses Crt, Dos;
var godz1, godz2,min1,min2,sek1,sek2,ssek1,ssek2:word;
var licz1,licz2,wynik,n,t,a1,a2,a3,a4,a5:integer;
var g1,g2,m1,m2,s1,s2,ss1,ss2,suma:integer;
Tabczas:Array[1..5] of byte;
var w1,w2,w:word;
Begin
ClrScr;
TextColor(14);
Suma:=0;
WriteLn(' JEST TO PROGRAM SPRAWDZAJĄCY');
WriteLn(' TWÓJ REFLEKS W TABLICZCE MNOŻENIA');
Randomize;
For n:=1 to 5 do
begin
licz1:=Random(10)+1;
licz2:=Random(10)+1;
Repeat
GetTime(godz1,min1,sek1,ssek1
TextColor(10);
WriteLn;
Write(licz1,'*',licz2,'=');
ReadLn(wynik);
IF licz1*licz2=wynik THEN
begin
TextColor(2);
WriteLn('BARDZO DOBRZE');
GetTime(godz2,min2,sek2,ssek2);
end
ELSE
begin
TextColor(124);
WriteLn('ŹLE! SPRÓBUJ JESZCZE RAZ');
end;
Until licz1*licz2=wynik;
g1:=godz1*3600*100; g2:=godz2*3600*100;
m1:=min1*60*100; m2:=min2*60*100;
s1:=sek1*100; s2:=sek2*100;
ss1:=ssek1*1; ss2:=ssek2*1;
w1:=g1+m1+s1+ss1; w2:=g2+m2+s2+ss2;
w:=w2-w1;
WriteLn('Czas namysłu wynosił ',w/100:6:2);
suma:=suma+w;
end;
TextColor(14);
WriteLn;
WriteLn('ŚREDNIA WYNOSI = ',suma/5/199:6:2);
ReadLn;
ReadKey;
End.