Programmeerimiskeel C/Keelestruktuurid
Korduvad tegevused (tsükkel, silmus)Redigeeri
Korduseid 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ükkelRedigeeri
Ü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ükkelRedigeeri
Ü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ükkelRedigeeri
Ü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
LisaksRedigeeri
break;Redigeeri
Koodisegment break; võimaldab kordusest väljuda olles tsükli sees.
continue;Redigeeri
Koodisegment continue; võimaldab vool jätkata koheselt tsükli algusest.
Erand pre - suurendamisel/vähendamiselRedigeeri
Pre - 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 operaatorRedigeeri
Tü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 analoogiaRedigeeri
While 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;
ValikudRedigeeri
Ühene ja kahene valikRedigeeri
Kui 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)Redigeeri
Tegemist 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;
MitmikvalikRedigeeri
SwitchRedigeeri
Valikuid 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 ifRedigeeri
Kuigi 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 koodisegmentiRedigeeri
Tegemist 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.
LisaksRedigeeri
- 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.