Programavimas PASCAL'iu
Pamokų ciklas
Programos struktūra
Skaitymo ir spausdinimo sakiniai
Priskyrimo sakinys
Sąlyginis sakinys
Ciklas WHILE
Ciklas FOR
 Praktika
                 1užduotis »
 
 
 
 
 
 
 Teoriniai testai
Bus vėliau
 
Ciklas WHILE

Programose būna veiksmų, kuriuos reikia kartoti. Dažniausiai veiksmai yra tie patys, tik juos kartoti reikia vis su kitais duomenimis.

Kartojimo veiksmai užrašomi ciklais. Paskalis turi trijų rūšių ciklus. Jų antraštės prasideda baziniais žodžiais while, for ir repeat. Šiame kurse bus kalbama apie ciklus while ir for. Ciklas while dar gali būti vadinamas nežinomo kartojimų skaičiaus ciklu.

Ciklo while struktūra:

while sąlyga (loginis reiškinys) do //ciklo antraštė
Sakinys ; // šis sakinys vykdomas tol kol tenkinama sąlyga arba yra teisingas loginis reiškinys.

Jei kartoti reikia kelis veiksmus, tuomet sakiniai aprašantys tuos veiksmus išskiriami žodeliais begin ir end:
while sąlyga (loginis reiškinys) do //ciklo antraštė
...begin
... Sakinys ;
....Sakinys ;
....Sakinys ;
...end;

1 pavyzdys. Programa pirmajam reikšmingam (t.y., nelygiam nuliui) skaičiaus skaitmeniui rasti.

program pirmasis;
  var sk: integer;
begin
  read(sk);
  while sk > 9 do
    sk := sk div 10;
  writeln(sk)
end.

Šis uždavinys toks akivaizdus žmogui, kad jo netgi nelaikome uždaviniu – iš karto matome, koks pirmasis skaičiaus skaitmuo. Tuo tarpu kompiuteryje skaičius būna užrašytas dvejetainiais skaitmenimis ir kompiuteris dešimtainių skaičiaus skaitmenų „nemato“, lygiai taip, kaip mes nematome dvejetainių jo skaitmenų. Ir dar svarbiau – užduotis kompiuteriui gali būti išreiškiama tik tomis operacijomis, kurios yra programavimo kalboje. O Paskalis turi tik aritmetines skaičių operacijas.

Paseksime, kaip šis ciklas atliekamas su įvairiais pradiniais duomenimis.

Pradinis duomuo: 625.

                                          sk                      Sąlyga
read(sk)                               625
sk > 9                                                             true
sk := sk div 10                       62
sk > 9                                                              true
sk := sk div 10                         6
sk > 9                                                              false
writeln(sk)

Ciklas buvo atliktas du kartus.

Jeigu pradinis duomuo būtų dviženklis skaičius, ciklas būtų atliktas vieną kartą. Jeigu pradinis duomuo būtų vienženklis skaičius, ciklas nebūtų atliktas nė vieno karto – rezultatas būtų lygus pradiniam duomeniui.

Prieš kiekvieną sakinio kartojimą, perskaičiuojama loginio reiškinio reikšmė ir pagal ją nustatoma, ar dar reikia kartoti sakinį, ar jau užbaigti ciklą. Jeigu sąlyga netenkinama (reiškinio reikšmė false) tikrinant ją pirmą kartą, tai po žodžio do einantis sakinys neatliekamas nė karto. Taigi galima tvirtinti, kad ciklas while gali būti atliekamas 0, 1, 2 ir daugiau kartų.

Ciklas valdo vieno sakinio kartojimą. Jeigu reikia kartoti kelis sakinius, tai tie sakiniai sujungiami į vieną sudėtinį sakinį.

2 pavyzdys. Programa skaičiaus skaitmenų sumai rasti.

program SkSuma;
  var sk, suma: integer;
begin
  suma := 0;
  read(sk);
  while sk > 0 do
    begin
      suma := suma + sk mod 10;
      sk := sk div 10
    end;
  writeln(suma)


 
© 2007 Saulius Brazauskas. Jonavos Senamiesčio gimnazija.