Ciklas WHILE Spausdinti
( 12 Votes )

Parašė Vidmantas Šarkys   

Tai gana paprastas ciklo tipas. Jo paskirtis atlikinėti veiksmą tol, kol ciklo kintamasis įgis tam tikrą reikšmę. Suprasti šio ciklo veikimą tikrai nėra sudėtinga, tad detaliai jo nenagrinėsime. Apžvelkime kelis pavyzdžius, kuriuose naudojamas ciklas WHILE.

program keliamlaipsniu;
var n, i: integer;
x, k : real;
begin
WriteLn('Iveskite skaičių ir jo laipsnį : ');
Readln(x, n);
i := 1 ;
k := x ;
While i  n do
begin
x := x * k;
i := i + 1;
end;
WriteLn(x:5:0);
ReadLn;
end.

FPS skaičių galime pakelti kvadratu naudodami sqr(..) , tačiau komandos, pakeliančios skaičių kitu laipsniu - nėra. Todėl tenka verstis be jos naudojant paprastą daugybą. Šiame pavyzdyje daroma būtent tai. Pagrindiniame bloke, prieš skaičiavimo vykdymą priskiriame dvi reikšmes. Ciklo kintamajam "i" priskirta 1. Jei šio priskyrimo nebūtų, kintamojo reikšmė automatiškai taptų 0, tad ciklas veiktų vienu kartu ilgiau. Įvedėme kintamąjį "k" ir priskyrėme jam keliamojo skaičiaus reikšmę. Skaičiaus laipsnis parodo, kiek kartų tą skaičių dauginsime iš jo paties. Jeigu keltume 2 laipsniu 5, tai iš pradžių vyktų 2*2, vėliau 4*2, po to 8*2 ... . Skaičius "k" minėtuose veiksmuose atitiktų "2" reikšmę. Iš jos dauginamas vis didėjantis skaičius.

program skaitmenys;
var x, k, nr : integer;
begin
WriteLn('Įveskite skaičių: ');
ReadLn(x);
While x  0 do
begin
x := x div 10;
nr := nr + 1;
end;
WriteLn(nr);
Readln;
end.

Ši programa skirta suskaičiuoti, kiek skaitmenų yra skaičiuje. Tai padaryti galime pasinaudoję length(..) komanda, tačiau šiek apsunkinkime sau užduoti ir išsiverskime be jos. Iš karto pastebime, kad šį kartą nenaudosime ciklo kintamojo - to tiesiog nereikia. Jo vietoje atsidūrė pats įvestasis skaičius. Div atsimename dar iš sveikųjų skaičių dalybos. Šį kartą jį naudosime vykdomajame sakinyje pradinį skaičių vis mažinti 10 vienetų - t.y. "atkirpti" galinį skaitmenį. Jeigu įvestasis skaičius yra, pvz. 156, kintamasis x sakinyje "x := 156 div 10" įgis reikšmę 15, kadangi 10 skaičiuje 156 be liekanos "tilptų" 15 kartų. Po kiekvieno tokio "apkarpymo" vis didiname kintamojo "nr" dydį, kol skaičius virsta 0 ir ciklas nustoja vykti.

Ciklas WHILE lengviau suprantamas ir "laisvesnis" už FOR tuo, kad nereikia pradinės ciklo kintamojo reikšmės. Tačiau negalima užmiršti, jog sąlygoje aprašytas kintamasis vykdomuose sakiniuose turi keisti savo reikšmę, kitaip ciklas taps begaliniu.