Programmeerimiskeel C/Keelestruktuurid
Sisukord |
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.