Juhtkäsud

Juhtkäsud määravad programmi täitmise korra (erinevate programmiosade täitmise, vahelejätmise, korduvtäitmise jne).

Üldiselt on kolme liiki juhtlaused:

·         Tingimusteta hüped

·         Tingimuslaused

·         Kordused

Tingimusteta hüpete abil on võimalik „hüpata” koodis ringi ja muuta nii kirjutatud koodi täitmise järjekorda. Selliste juhtkäskude kasutamine raskendab oluliselt koodist arusaamist ja seetõttu soovitatakse sellisest konstruktsioonist hoiduda. Mitmed tänapäevased keeled ei luba tingimusteta hüpete kasutamist (sh EPL).

Tingimustega juhtlausete korral kasutatakse tingimuse realiseerimiseks kasutatakse võrdlusoperaatoreid:

==          võrdus, tulemus on tõene, kui võrreldavad väärtused on võrdsed

!=           mittevõrdsus, tulemus on tõene, kui võrreldavad väärtused ei ole võrdsed

>             suurem kui, tulemus on tõene kui operaatorist vasakul olev väärtus on suurem kui paremal olev väärtus

<             väiksem kui, tulemus on tõene kui operaatorist vasakul olev väärtus on väiksem kui paremal olev väärtus

>=          suurem või võrdne, tulemus on tõene kui operaatorist vasakul olev väärtus on suurem kui paremal olev väärtus ning ka siis, kui vastavad väärused on võrdsed

<=          väiksem või võrdne, tulemus on tõene kui operaatorist vasakul olev väärtus on väiksem kui paremal olev väärtus ning ka siis, kui vastavad väärused on võrdsed

Tingimusi on võimalik omavahel kombineerida kasutades järgmisi loogikatehteid

&&         ja, tingimus on tõene kui mõlemad tingimused on tõesed

||           või, tingimus on tõene, kui üks tingimustest on tõene

Nii võiks näiteks tingimuse

                a>=b

kirja panna ka kui

(a>b) || (a=b)

 

Tuntum juhtkäsk on kindlasti if:  if lause võimaldab täita erinevat koodi sõltuvalt  tingimuse tulemusest:

if(tingimus)

                kood mis täidetakse, kui tingimuse tulemus on tõene

else

                kood mis täidetakse, kui tingimus ei ole tõene

 

Else osa võib ka puududa.

If käsu näide:

if(a>3)

   b=5;                                   Kui a on suurem kolmest, siis b võrdustakse viiega.

 

If käsu näide:

if(a>3)

   b=5;

else

  c=6;

Kui a on suurem kolmest, siis b võrdustakse viiega ja kui a ei ole suurem kolmest, siis c omistatakse väärtus kuus.

 

If käsu keerulisemad versioonid on case ja switch, need juhtkäsud võimaldavad rohkemaid jagunemisi vastavalt tingimustele, kui kuna EPL keel neid ei sisalda, siis niikohal me neid ei käsitle.

 

Kordused võimaldavad mingisugust koodi osa vastavalt etteantud tingimusele korduvalt täita. Kordused jagunevad: eelkontrolliga ja järelkontrolliga ning määratud pikkusega ja määramata pikkusega kordusteks.

 

While kordus on eelkontrolliga kordus, see tähendab, et korduse jätkamiseks vajalikku tingimust kontrollitakse enne korduse täitmist.

while(tingimus)

  kood, mida täidetakse kuni tingimus on tõene

Näiteks:

int a=0;

int b=0;

while(a<10)

{

  a++;

  b+=a;

}

Kordust täidetakse kuni a on väiksem kümnest, kusjuures iga korduse täitmise jooksul liidetakse muutuja a väärtus muutuja b väärtusele juurde, järelikult b=1+2+3+4+5+6+7+8+9+10=55.

 

Do – while kordus on järelkontrolliga kordus, kordus, see tähendab, et korduse jätkamiseks vajalikku tingimust kontrollitakse pärast korduse täitmist.

do

  kood, mida täidetakse kuni tingimus on tõene

while(tingimus)

Näiteks:

int a=0;

int b=0;

do

{

  a++;

  b+=a;

}

while(a<10)

Kordust täidetakse kuni a on väiksem kümnest, kusjuures iga korduse täitmise jooksul liidetakse muutuja a väärtus muutuja b väärtusele juurde, järelikult b=1+2+3+4+5+6+7+8+9+10=55.

 

Nüüd võis jääda mulje, et ei ole vahet, kas kasutada eel- või järelkontrolliga kordust, tegelikult on aga nende vahe selles, et järelkontrolliga korduse sees olevat koodi täidetakse, vähemalt ühe korra, kuid võib juhtuda, et eelkontrolliga kordust ei täideta ühtegi korda.

Näiteks:

int a=10;

int b=0;

while(a<10)

{

  a++;

  b+=a;

}

Tulemuseks on, et a=10 ja b=0, sest korduse sees olevat tegevust ei täidetud ühtegi korda, tingimus oli kohe alguses väär ja tingimust kontrolliti enne korduse sees oleva tegevuse tegemist.

int a=10;

int b=0;

do

{

  a++;

  b+=a;

}

while(a<10)

Tulemuseks on, et a=11 ja b=11, sest korduse sees olevat tegevust tehti üks kord, tingimust kontrolliti alles pärast seda.

 

For kordus on aga eelkontrolliga ning määratud pikkusega kordus.

for(muutuja, tingimus, muutuja muutmise kord)

  kood, mida täidetakse, kuni tingimus on tõene

For kordus erineb eelpool käsitletud kordustest eelkõige selle poolest, et korduse jätkamise tingimusega seotud muutuja väärtuse muutmine kirjeldatakse korduse sees.

Näiteks:

int b;

for(int a=0;i<10;i++)

  b+=a;

 

Tulemus on sarnane do kordusele, muutuja a väärtus pannakse alguses võrduma nulliga, seejärel kontrollitakse korduse täitmise tingimust ja kui see on tõene, siis liidetakse muutujale b muutuja a väärtus, seejärel muudetakse muutuja a väärtust vastavalt etteantud reeglile (antud juhul a++, ehk suurendatakse a väärtust ühe võrra), kontrollitakse jätkamise tingimust, ning kui see on tõene, siis tehakse uuesti korduse sees olev tegevus jne. Tulemuseks on, et a=10 ja b=0+1+2+3+4+5+6+7+8+9=45.