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.

  1. Täidetakse iteratsioonimuutuja(te) algväärtustamisavaldis(ed), mis tavaliselt on i=0; ;
  2. Kuni tingimus on tõene (mitte arv 0), täidetakse segmenti sisu;, mis tavaliselt on i<mitu;.
  3. 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.