Programmeerimiskeel C/Keelestruktuurid
Korduvad tegevused (tsükkel, silmus)
[muuda]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ü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
[muuda]break;
[muuda]Koodisegment break; võimaldab kordusest väljuda olles tsükli sees.
continue;
[muuda]Koodisegment continue; võimaldab vool jätkata koheselt tsükli algusest.
Erand pre - suurendamisel/vähendamisel
[muuda]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 operaator
[muuda]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 analoogia
[muuda]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;
Valikud
[muuda]Ühene ja kahene valik
[muuda]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)
[muuda]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;
Mitmikvalik
[muuda]Switch
[muuda]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 if
[muuda]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 koodisegmenti
[muuda]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.
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.