Programmeerimiskeel C/Keelestruktuurid
Korduvad tegevused (tsükkel, silmus)
muudaKorduseid täidetakse, kuni kordustingimus on tõene. Kordusest saab väljuda segmendiga break;. Programmeerimiskeeles C on 3 tsükli laadi. Sümboolselt i on iteratsiooni märk ja kasutatakse korduses tavaliselt muutujana. Tavaline väljumistingimus on i<mitu.
for tsükkel
muudaÜldkuju:
for(i_alg; tingimus; i_muutus_igal_läbikäikul){sisu;}
Korduste arv on eelnevalt teada. Kasutusele on võetud tsüklimuutujaga kordus.
- Täidetakse iteratsioonimuutuja(te) algväärtustamisavaldis(ed), mis tavaliselt on i=0; ;
- Kuni tingimus on tõene (mitte arv 0), täidetakse segmenti sisu;, mis tavaliselt on i<mitu;.
- Pärast iga tsükli läbikäimist täidetakse avaldis(ed) i_muutus_igal_läbikäikul, mis tavaliselt on i++;.
while tsükkel
muudaÜldkuju:
while(tingimus){sisu;}
Korduste arv selgub programmi töö käigus. Eelkontrolliga kordus.
Segmenti sisu; täidetakse kuni tingimus on tõene, kui üldse.
do while tsükkel
muudaÜldkuju:
do{sisu;}while(tingimus);
Korduste arv selgub programmi töö käigus. Järelkontrolliga kordus. Segmenti sisu; täidetakse vähemalt üks kord.
Segmenti sisu; täidetakse kuni tingimus on tõene
Lisaks
muudabreak;
muudaKoodisegment break; võimaldab kordusest väljuda olles tsükli sees.
continue;
muudaKoodisegment continue; võimaldab vool jätkata koheselt tsükli algusest.
Erand pre - suurendamisel/vähendamisel
muudaPre - suurendamisel/vähendamisel täidetakse avaldis(ed) i_muutus_igal_läbikäikul enne tsükli algust, mis näeks tavaliselt välja ++i.
Tühi operaator
muudaTühi operaator tähendab, et sisu osa puudub, ning tegevus toimub tingimuses. Seda saab rakendada mõne triviaalse juhtumi lahendamisel, nt: sõne/stringi pikkuse leidmisel.
DO-LOOP analoogia
muudaWhile kordust kasutatakse ka, kui BASIC'ust tuntud DO-LOOP'ina, selle normaalkuju näeks välja:
while(1){sisu_mis_sisaldab_väljumist;}
Väljumiseks kasutatakse koodisegmenti break;
Valikud
muudaÜhene ja kahene valik
muudaKui tingimus on tõene (pole arv 0), täidetakse tegevus1, kui mitte täidetakse tegevus2. Pöördtingimuse tühjaks jätmine on sama, mis selle ära jätmine.
if(tingimus){tegevus1;}
if(tingimus){tegevus1;}else{tegevus2;}
Väärtustav kahene valiktingimus a la (iif)
muudaTegemist on valikuga, mis väärtustab tingimuse alusel. Normaalkuju oleks
muutuja=(tingimus)?(kui_tõene):(kui_väär);
Lisaks: Seda kasutatakse mõne triviaalse juhu lahendamisel, näiteks maksimumi ja miinimumi leidmisel:
MAX = (a > b) ? a : b;
MIN = (a < b) ? a : b;
Mitmikvalik
muudaSwitch
muudaValikuid käiakse läbi kuni sobivas valikus jõutakse käsuni break;, kui ükski valik ei sobinud, täidetakse valik default.
Näiteks tavaliselt näeb mitmik tingimus välja:
switch(tingimus){
case valik_1: tegevus1; break;
case valik_2: tegevus2; break;
case valik_3: tegevus3; break;
default: tegevus4 break;
}
Meelespea:
- Kui sobivas valikus täidetakse tegevus(ed), ning puudub segment break; jätkatakse sobivate valikute läbikäimist.
- Default valik pole kohustuslik
- Tingimused ja valikud peaksid olema täisarvu tüüpi
- Tähemärgid on ka täisarvutüüpi! Neid tuleks korduses märkida nt: case('M'):, meeles tuleb pidada, et apostroof(') ei ole jutumärk(") ja suurtel ja väikestel tähtedel tehakse vahet.
Mitmik if
muudaKuigi parema loetavuse annab arvatavasti switch, on ka if'lausetega võimaliks simureeri switchi. Nüüd ei pea me break'i kasutama, ning see võimalab näiteks breaki kasutada kordusest väljumisel.
if(k==0){
}else if(k==1){
//sisu
}else if(k==2){
//sisu
}else if((k<6 && k>3)|| k==666 || k--==34){
//sisu
}else if(k==2){
//sisu
}else{
//sisu
}
Selle võimaluse suurimad plussid muutuvad irooniliselt tema miinusteks, kuid leidub olukordi kus tõepoolest ehk oleks ratsionaalne seda varianti kasutada.
Meelespea:
- koodisegmendiga break; saab kasutada, näiteks väljumiseks tsüklist
- iga else if võib sisaldada täiesti uut tingimust
- tingimused võivad olla ka keerulised algoritmid
- tingimused ei pea olema sama muutujaga
- tingimused võivad muuta läbikäimisel väärtusi
- NT: näites tähendakse see, kui k=3, siis esimese tingimusel k==2 olek vastus väär, kuid k--=34 vähendab k väärtust ja teisel tingimusel k==2 olek vastus tõene! (See teeb koodi raskest loetavaks)
- Viimane }else{ tingimus täidetakse, kui eelnevalt olid kõik võimalused väärad, põhimõtteliselt on sama mis default swich'i puhul
Voo järje oma suva järgi muutmine kasutades goto koodisegmenti
muudaTegemist on väga lihtsa ja traditsioonilise voo jaotus mehhanismiga, mida välditakse, kuna ta võib muuta koodi lugemise ülikeeruliseks. Goto ütleb millise goto lipiku juurest jätkata.
Üldkuju:
goto lipik_1;
//sisu;
lipik_1:
//sisu;
Kui seda ülde reaalselt kasutatakse, siis olles tingimuses, mis märgib viga ja juhendab voo vigade tingimusplokki.
Lisaks
muuda- Kui korduse või tingimuse sisu on 1 koodisegmendine, pole vaja teda ümbritseda "{" ja "}" märkidega.
- C++'is on võimalik deklareerida muutuja skoop ka korduse siseselt! See aga tähendab, et korduse standardmuutuja i deklareerimine ülefunktsioonilise skoopiga on halb komme.