Kordused ehk tsüklid

Variandid:

fikseeritud kordus (FOR-tüüp)
eelkontrolliga kordus (WHILE-tüüp) 
järelkontrolliga (UNTIL-tüüp);

a) fikseeritud korduste arvuga - kasutatakse, kui on teada, mitu korda me mingit tegevust peame sooritama. Kasutatakse n.ö. juhtmuutujat, mis iga kordusega saab uue väärtuse (tüüpiliselt suureneb 1 võrra).
Enamikus keeltes vastab sellisele kordusele FOR-lause.

üldkuju:

for < muutuja > : = < algväärtus > to < lõppväärtus >
< tegevus või tegevusteplokk BEGINi ja END vahel >

b) eelkontrolliga kordus - kasutatakse teadmata korduste arvu puhul, kordusplokki täidetakse seni, kuni toodud tingimus on täidetud. 
Enamikus keeltes WHILE- või DO WHILE-lause.

üldkuju:

while < tingimus > do
begin
< korratavad tegevused >;
end;

NB! Ka siin toimivad BEGIN ja END n.ö. programmisulgudena.

c) järelkontrolliga kordus - sarnaneb eelmisega, kuid tingimuse täidetust kontrollitakse kordusploki lõpus ja kordusplokki täidetakse igal juhul vähemalt üks kord (WHILE puhul võib tingimus osutuda kohe mittetäidetuks ning seega ignoreeritakse kogu lauset). 

Pascalis REPEAT.... UNTIL, teistes keeltes ka DO ... UNTIL jms.

üldkuju:

repeat
< korratavad tegevused >
until < tingimus >;

Programminäide 4. (FOR-tsükkel)

program Fibonacci;
(* Programm leiab Fibonacci arvud - arvujada, kus iga järgmine liige on *)
(* kahe eelmise liikme summa. Jada pikkuse määrab kasutaja - muutuja N. *)
(* N: 0,1,1,2,3,5,8,13,21,34 .... *)
var 

i, N, F_arv, esimene, teine : integer;
begin
write('Mitu Fibonacci arvu soovid leida? ');
readln(N);
esimene := 0; (* esimesed kaks arvu on teada - 0 ja 1 *)
teine := 1;
for i := 1 to N do (* i on abimuutuja, mis loendab kordusi *)
begin (* i muutub 1-st kuni 'N' väärtuseni *)
F_arv := esimene + teine;
write(F_arv, ', ');
esimene := teine; (* senine teine saab esimeseks... *)
teine := F_arv; (* ja senine F_arv teiseks liikmeks *)
end;
writeln;
writeln('Ongi kõik!');
end.

Programminäide 5. FOR-lausega

 

Program Jada_Suurim_Liige;
Const SuurimN = 100;  (* defineerime maksimaalse jada pikkuse *)
Var
Jada : array [1..SuurimN] of Integer;  (* arvude massiiv *)
N, (* jada tegelik pikkus *)
Max, (* suurim väärtus *)
i : Integer; (* tsükliloendur *)
Begin
Writeln('Programm otsib arvujada suurimat väärtust.')
Write('Sisestage jada pikkus : '); Read(N);
For i := 1 to N do (* palume sisestada N arvu *)
begin
Write('Palun sisesta jada ',i,'. elemendi väärtus : '); (* kompleksne kommentaar vahepealse muutuja i väärtuse kuvamisega *)
Read(Jada[i]);
end;
Write('Tänan! Otsin suurima väärtusega liiget ...');
Max := Jada[1]; (* alustamiseks võtame suurimaks väärtuseks esimese elemendi väärtuse *)
For i := 2 to N do (* kontrollime kõiki jada elemente *)
if Jada[i] > Max then (* kontrollime, kas jada elemendi väärtus on muutujast Max suurem *)
Max := Jada[i]; (* ja kui on, siis omistame selle väärtuse muutujale Max *)
Writeln;
Writeln('Jada suurim element on ', Max);
End.

Programminäide 6. WHILE-tsükkel.

program Ruutjuur;
(* Programm küsib kasutaja käest arvu ja väljastab selle ruutjuure. *)
(* Töötatakse seni, kuni kasutaja sisestab arvuks nulli. Kasutatakse *)
(* WHILE-kordust (eelkontrolliga). *)
var 

arv, juur : real;
begin
arv := 1;
writeln('Töö lõpetamiseks sisesta 0.');
while arv <> 0 do (* korda senikaua, kui arv ei ole 0 *)
begin
write('Sisesta arv: ');
readln(arv);  (* loetakse klaviatuurilt sisestatud arv *)
juur := sqrt(arv); (* arvutatakse ruutjuur ja omistatakse väärtus muutujale juur *)
writeln(arv:7:2, ' ruutjuur on ' , juur);
end; (* WHILE-tsükli lõpp *)
writeln('Ongi kõik!');
end.

Programminäide 7. REPEAT-tsükkel.

program Ruutjuur2;
(* Programm küsib kasutaja käest arvu ja väljastab selle ruutjuure. *)
(* Töötatakse seni, kuni kasutaja sisestab arvuks nulli. Kasutatakse *)
(* REPEAT-kordust (järelkontrolliga). *)
var 

arv, juur : real;
begin
arv := 1;
writeln('Töö lõpetamiseks sisesta 0.');
repeat (* korda.... *)
write('Sisesta arv: ');
readln(arv);  (* loetakse klaviatuurilt sisestatud arv *)
juur := sqrt(arv);  (* arvutatakse ruutjuur ja omistatakse väärtus muutujale juur *)
writeln(arv:7:2, ' ruutjuur on ' , juur);
until arv=0; (* ... kuni arv on 0. Tsükli lõpp *)
writeln('Ongi kõik.');
end.

PROOVIGE ISE:

1. Kirjutage programm ühe F1 auto ringiaegade ja jooksva võistlusaja kuvamiseks. Võistlemiseks suvalisel ringrajal, peab kasutaja sisestama ringide arvu. Ringiaeg arvutada juhuarvude generaatoriga (funktsioon random(X), kus X on ringiaja ülempiir). Ringiaja arvutamiseks võib ka teatud kindlale osale liita muutuva osa juhuarvude generaatoriga.

2. Laiendada ülesande 1 võimalusi mitme võistleja aegade kuvamiseks. Siin võiks kasutada tabelipead võistlejate nimedega. Järjestada võistlejad üldisesse kohtade järjekorda

3. Laiendada ülesannnet 2 nii, et läbitud ringide arv oleks juhuarv üldisest ringide arvust. Järjestada võistlejad läbitud ringide kahanevasse järjekorda. 


Kodutööde ja arvestusülesannete väljatrükkidel peab olema kommentaaripäis programmi tegevuse eesmärgi ning autori nime ja rühmaga.

N: program Silinder:
(* programm leiab silindri pindala ja ruumala *)
(* Autor: Aadu Kadakas AV-11 *)