While
Mõisted
TSÜKKEL on struktuur, mille abil saab mingi osa programmi või algoritmi lauseid korduma panna.[1] Sageli on vaja täita mingeid käske korduvalt: trükkida mitu korda sama sõna, teha sama tehet, joonistada ühesuguseid kujundeid jne. Ühest küljest oleks liiga töömahukas kopeerida sama koodi kümneid, tuhandeid või miljoneid kordi, teisest küljest ei pruugi me alati programmi kirjutades veel teadagi, mitu korda mingit operatsiooni on vaja teha. Kas programmi kasutaja soovib joonistada 10 või 1000 kolmnurka? [2]
Korduvate operatsioonide puhul kasutatakse programmeerimises tsükleid. Sõltuvalt programmeerimiskeelest antakse programmeerija käsutusse erinevat tüüpi tsükleid. Näiteks Pascalis on võimalik kasutada kolme erinevat tsüklit: [3]
- WHILE-tsükkel e. tsükkel, mis kordab valitud käske seni, kuni määratud tingimus (tsüklitingimus) on tõene (ka eelkontrolliga tsükkel).
- FOR-tsükkel e. tsükkel, mis kordab valitud käske kindel arv kordi (ka määratud tsükkel).
- REPEAT-tsükkel e. tsükkel , mis täidab kõigepealt tsükli sisu ja seejärel kontrollb tingimuse täidetust (järelkontrolliga tsükkel).
WHILE TSÜKKEL on eelkontrolliga tsükkel, kus kontrollitakse enne käskude täitma asumist mingi tingimuse tõesust. Kuni tingimus on tõene (tsüklitingimuses kasutatav tsüklimuutuja vastab tingimusele), täidetakse tsüklis olevaid käske, kui aga mitte, väljutakse tsüklist e. minnakse järgmisele reale pärast tsüklit sisaldavat plokki. Loogikatingimus on tsükli alustamise tingimus. Kui see tingimus osutub tõeseks, siis täidetakse tegevused tsükli sees. Ehk teisisõnu tsüklit täidetakse siis, kui tingimus on tõene. Sellise tsükli olemasolu on igas programmeerimiskeeles hädavajalik. While tsükkel on olemas enamikes programmeerimiskeeltes [4]
While-tsükli üldine kuju: [5]
while <avaldis>: <käsk_1> <käsk_2>
Kasutamine
While-tsüklit on mõistlik kasutada siis, kui pole teada, palju kordi on vaja koodiridu korrata, kuni kasutaja sisestab nõuetele vastavad andmed (alles siis minnakse edasi ja töödeldakse neid) või kuni kasutaja soovib lõpetetada programmi töö. Tsükli täitmise igal sammul peaks tsüklimuutuja väärtust muutma, vastasel korral on tsükli tingimus pidevalt tõene ja tsükkel jääb lõpmatult tööle. [6]
Tsükli täitmine: [7]
- Arvutatakse loogikatingimuse väärtus
- Kui väärtus on ÕIGE, täidetakse tsükli sees olevad laused ja täitmine antakse tsükli algusesse uueks loogikatingimuse väärtuse leidmiseks.
- Kui väärtus on VALE, lõppeb tsükli täitmine ja programmi jätkatakse käsuga peale tsüklit.
Lause keha täidetakse vaid siis kui päises antud tingimus kehtib. Kui kehas olevad laused on täidetud, siis minnakse uuesti päises näidatud tingimust kontrollima – kui tingimus kehtib ikka veel, siis täidetakse kehas olevad laused uuesti jne. [8] Selleks, et taoline tsükkel ei jääks lõputult tööle, peab tsükli kehas olema mingi lause, mis mõjutab tingimuse kehtivust – järgnevas näites on selleks lause, mis muudab muutuja i väärtust 1 võrra suuremaks. Muutujaid, mille väärtust suurendatakse igal tsükli sammul, nimetatakse loenduriteks ja nende nimeks pannakse tavaliselt i. Selliseid tsükleid, kus korduste arv on tsükli alustamise hetkel teada, nimetatakse määratud tsükliteks.[9]
- Järgnevas näites võrdsustatakse muutuja i väärtus ühega ning väljastatakse i väärtusi ja suurendatakse i väärtust ühe võrra seni, kuni i väärtus pole enam väiksem kui 5. Seega muutub i väärtus ühest neljani ning ekraanile trükitakse neli rida. [10]
i = 1 while i < 5: print("i väärtus on " + str(i)) i = i + 1
- Järgnevas näites kontrollib kood muutuja väärtust ja kui see on väiksem-võrdne kui 10, siis väljastatakse muutuja väärtus ja suurendatakse seda ühe võrra. Tehakse uus kontroll ja seda tsüklit korratakse kuni muutuja väärtus on suurem kui 10 ja tsükkel lõpetatakse. [11]
class while_tsykkel{ public static void main(String args[]){ int nr = 1; while(nr <= 10){ System.out.println(nr); nr++; } } }
Ekraanile trükitakse kümme rida.
1 2 3 4 5 6 7 8 9 10
Näited kasutamise kohta
Kokkuvõte
Kasutatud kirjandus
http://www.cs.tlu.ee/~inga/Prog_materjalid/Syntaks2.pdf
Koostas
Heiko Niidas AK-31, 2014