Ciklas FOR Spausdinti
( 11 Votes )

Parašė Vidmantas Šarkys   

Šis ciklas yra bene mėgstamiausias FPS vartotojų. Kaip jau paminėjome pagrindiniame straipsnyje - jis vienintelis automatiškai didina kintamojo reikšmę. Tai sutrumpina ciklo aprašymą bent viena eilute. Ciklas išskirtinis ir tuo, jog reikalauja pradinės ciklo kintamojo ( tarkime - "i" ) reikšmės. Apžvelkime programą, kurioje naudojamas šis ciklas.

program ciklas1;
var i , x : integer;
Begin
WriteLn('Įveskite sveikąjį skaičių, didesnį už 0');
ReadLn(x);
For i := 1 to x do
Write('! ');
ReadLn;
end.

Pirmiausiai įvedamas sveikasis skaičius. Kokio dydžio tas skaičius, tiek šauktukų yra parašoma ekrane. Nesunku visą tai pastebėti paties ciklo sąlygoje - sakinys, kurio paskirtis rašyti šauktuko simbolį, vykdomas nuo 1 iki x reikšmės. Užtenka vien logikos, kad suprasti, jog x turi būti ne mažesnis už 1. Kitu atveju programa nevyks. Pradžioje ciklo kintamajam priskiriama reikšmė turi būti mažesnė už "galinę reikšmę". Jeigu kintamojo x reikšmė bus lygi 1, ciklas vyks, bet tik vieną kartą.

Praktiškai nėra tokių atvejų, kuomet pradinė ciklo reikšmė privalo būti didesnė už galinę ( galime nesunkiai padaryti ciklą taip, kad ši problema mums netrukdytų). Tačiau jeigu mums būtinai reikia ciklo su minėta sąlyga, įmanoma jį sukurti ir būtent taip.

...
For i := 10 downto 1 do
(sakinys);
...

Akivaizdu, kuo šis FOR ciklas skiriasi nuo klasikinio varianto. Iš pradžių ciklo kintamajam priskiriama reikšmė. Vietoj įprasto žodelio "to", naudojame "downto", kuris žymi mažėjimą. Galiausiai nurodome "galinę" kintamojo reikšmę, kuri privalo būti mažesnė už pradinę. Šiame cikle sakinys bus atliekamas 10 kartų, po kiekvieno atlikimo kintamojo "i" reikšmė sumažės vienetu.

Išnagrinėkime programą, skirtą suskaičiuoti įvestų skaičių sumą.

program suma;
var suma, x, i, n : integer;
Begin
suma := 0;
WriteLn('Įveskite, kiek iš viso bus skaičių: ');
ReadLn(n);
For i := 1 to n do
begin
WriteLn('Įveskite ', i,'-ąjį skaičių: ');
ReadLn(x);
suma := suma + x;
end;
WriteLn('Įvestųjų skaičių suma yra ', suma);
ReadLn;
end.

Programos vykdymo pradžioje kintamajam, vėliau vaizduosiančiam skaičių sumą, priskyrėme reikšmę 0. Tai nebuvo būtina, kadangi tokia reikšmė sveikojo tipo kintamajam priskiriama automatiškai. Tačiau kai kuriose programose tai daryti bus būtina, o, tapogi, toks priskyrimas suteikia šiek tiek aiškumo.

Nežinome, kiek vartotojas norės įvesti skaičių, tad pirmiausiai turime to jo paklausti, t.y. paprašome jo įvesti reikšmę, kuri bus lygi skaičių kiekiui. Kintamojo reikšmę automatiškai nusiunčiame į ciklą ir pradedame jo vykdymą. Kaskart ciklui vykdant sakinių bloką, keičiasi "i" reikšmė. Tuo pasinaudodami, parašome ekrane, kelintas iš visų skaičių turėtų būti įvedamas. Nuskaitome skaičių, kintamąjį "suma" padidiname įvestuoju skaičiumi. Kai ciklas baigiamas, galime parašyti galutinę skaičių sumą, įvykdydami šios programos veikimo tikslą.

Sukurkime dar vieną programą. Jos paskirtis bus suskaičiuoti skaičiaus faktorialą ( faktorialas - tai sandauga visų naturaliųjų skaičių, einančių prieš minimą skaičių. Skaičiaus 4 faktorialas bus lygus 1*2*3*4 = 24).

 
program faktorialas;
var ats: real;
x, i: integer;
begin
ats:=1;
Writeln('Įveskite skaičių, kurio faktorialą norite sužinoti');
ReadLn(x);
If x = 0 then ats:=1
else
begin
for i :=1 to x do
ats:=ats * i;
end;
Writeln('Faktorialas = ', ats: 10: 0);
ReadLn;
end.

Nenagrinėsime programos detaliai, kadangi jos paskirtis ir sandara yra aiški. Verta prisiminti, jog skaičiaus 0 faktorialas lygus 1. Tai aprašėme sąlyginiame sakinyje. Jeigu įvestasis skaičius yra lygus 0, mes nesivargindami atsakymui priskiriame tinkamą reikšmę. Kitu atveju vykdomas faktorialo skaičiavimas. Programos pradžioje kintamajam priskirti konkrečią reikšmę, kitaip nei anksčiau nagrinėtame pavyzdyje, yra būtina. Ciklo sakinyje kintamajam "ats" teks būti dauginamam su ciklo kintamuoju. Net mažai matematikoje besigaudantis žmogus žino - bet kokį skaičių dauginant iš 0, atsakymą gauname 0! Tačiau faktorialas lygus 0 nebus niekados, tad leisti, kad atsakymas įgautų tokią reikšmę - negalime. Vėliau vyksta elementari daugyba iš vis didėjančios ciklo kintamojo reikšmės. Galiausiai parašome atsakymą.