|
|
Príkazy a VýrazyObsah tém.Výrazový príkaz
int vstup=0; // načítaný kód ASCII zodpovedajúci klávese
int typKodu=0; // označenie kódu jednoduchý=0 alebo dvojkód=1
...
if ( !( vstup=getch() ) ) // výraz číta klávesu a súčasne test na 0
{ vstup=getch() ; // ak bola 0 ide o dvojkód a načítame aj druhý kód
typKodu=1;
}
else
{ typKodu=0;
}
...
Zdrojový text programu obsahuje dve základné formy inštrukcií príkazy v C-čku môžeme rozdeliť do týchto skupín: výrazový príkaz, zložený príkaz, príkaz vetvenia, príkaz cyklu, príkaz skoku. Príkaz oddeľujeme . Výrazový príkazVýrazový príkaz sa skladá z výrazu a bodkočiarky. Namiesto výrazu je možné dosadiť konštantu, reťazec, identifikátor. To sú takzvané primárne výrazy ( lexikálne jednotky ). Ale môžu to byť aj volania funkcie a operácie. Voláme ich zložené výrazy.
Príkazy vetveniaPríkaz vetvenia vykonáva určité príkazy, ak je výraz pravdivý, teda má nenulovú hodnotu. Ak je výraz nepravdivý máme dve možnosti buď pokračujeme v programe, potom kľúčové slovo pre tento príkaz je if. Alebo sa vykonávajú príkazy pre nepravdivý výraz, potom kľúčové slovo pre takýto príkaz je if else. Ak sa rozhodujeme medzi viacerými možnosťami potom používame príkaz switch ( prepínač ). Niekedy je možné nahradiť tento príkaz vnoreným if else. Príkaz if - neúplný podmienený príkaz. syntax: if( podmienka ) príkaz; Príkaz sa vykoná ak má výraz nenulovú hodnotu, teda podmienka je splnená. Ak je príkazov viac musia byť ohraničené zloženými zátvorkami { }.
syntax: if( podmienka )
{
príkaz 1;
:
príkaz n;
}
Príkazy (príkaz 1 až príkaz n) sa vykonajú ak je splnená podmienka Príklad č.8: Program čaká na stlačenie 1 znaku, ktorý testuje. Ak to bude ´A´ alebo ´a´ vypíše na obrazovku "Ja som FANTOMAS" ak nie, program sa ukončí. Príkaz if else - úplný podmienený príkaz. Tento príkaz umožňuje rozhodnúť sa medzi
dvoma možnosťami. Najskôr sa vyhodnotí výraz v zátvorkách a ak je
pravdivý, vykoná sa príkaz1. Ak je výraz nepravdivý vykoná
sa príkaz2. syntax: if ( podmienka ) príkaz1; else príkaz2; alebo syntax: if ( podmienka )
{
príkaz 1;
:
príkaz n;
}
else
{
príkaz1;
:
príkaz m;
}
Príklad č.9: Program, ktorý čaká na stlačenie 1 znaku. Ak sa stlačí číslica program vypíše na obrazovku: "Stlačil si číslicu ?", ak nie vypíše: Nestlačil si číslicu". Príkaz zložený z viacerých príkazov if else Pri vetvení je možné príkazy if else do seba vnárať. Pri vzájomnom vnáraní sa časť else automatický priradí najbližšiemu predchádzajúcemu if.
syntax: if(výraz1) príkaz1; else if(výraz2) príkaz2; else if(výraz3); príkaz3; else ... príkaz; Jedná sa o viaccestné rozhodovanie (prepínač). Výrazy sa vyhodnocujú v uvedenom poradí, pokiaľ sa nenarazí na pravdivý výraz. Potom sa vykoná k nemu prislúchajúci príkaz. Príkaz za posledným else sa vykoná ak žiaden z predchádzajúcich výrazov nebol pravdivý. Môže to byť napríklad chybové hlásenie. Príklad č.10: Program, ktorý vypíše či zadané číslo je rovné 0, kladné alebo záporné. Príklad č.11: Program vypočíta obvod resp. obsah kruhu. Vstupom je polomer kruhu. Príklad č.12: Program, ktorý konvertuje malé písmená na veľké. Príklad č.13: Program, ktorý vypočíta korene kvadratickej rovnice Úlohy:
Príkaz Switch - prepínač Tento príkaz sa používa na podobný účel ako príkaz zložený z viacerých if else. Avšak umožňuje vetvenie na základe jednej podmienky syntax: switch(podmienka)
{
case hodmota1:príkaz1; break;
case hodnota2:príkaz2; break;
case hodnota3:príkaz3; break;
...
default:príkazn;
}
Príkaz switch vyhodnotí znakový vyraz v zátvorkách a jeho hodnotu porovná postupne s hodnotami uvedenými za kľúčovými slovami case. Pri zhode sa vykoná príkaz uvedený pri danej alternatíve Ak by na konci nebol príkaz break, pokračovalo by sa vo vykonávaní ostatných možností až do konca príkazu switch. Možnosť default zahrňuje všetky ostatné hodnoty výrazu uvedeného ako argument kľúčového slova switch. Nie je povinná no kvôli prehľadnosti sa odporúča. Vlastnosti:
Príklad č.14: Program, ktorý vypočíta paralelný alebo sériový odpor na základe možnosti rozhodnúť sa. Treba si všimnúť si, že v tomto príklade musíme
použiť premennú z, ktorá bude slúžiť na ukladanie znaku. Dátový typ
premennej musí byť int. Čo znamená, že na načítanie 1 znaku použijeme
funkciu getch(). Potom sa hodnota premennej v príkaze switch
porovná s možnosťami v case ak sa nájde zhoda vykoná sa príkaz v
príslušnej vetve. Príkaz break na konci vetvy zabezpečí aby sa ďalšie
porovnávanie "preskočilo" a tým sa príkaz switch ukončí. Príklad č.15: Program, ktorý testuje načítaný znak zo vstupu. Ak to bude ´a´ alebo ´A´ vypíše slovo: "ANO" ak to bude ´n´ alebo ´N´ vypíše slovo "NIE" inak vypíše: "Nezadal si ani jeden z týchto znakov". Všimnite si že malé písmená sú obslúžené príkazom uvedeným pri veľkých písmenách nakoľko na danom riadku nie je príkaz break.
Príklad č.16: Horoskop - program , ktorý ak zadáme deň a
mesiac narodenia a vypíše znamenie. ?????? Úlohy na zopakovanie
Príkazy cyklu - iteračné príkazy Príkazy cyklu slúžia na opakovanie určitej časti programu za splnenia podmienky. Príkazy, ktoré sa majú v cykle opakovať nazývame telo cyklu. Poznáme cykly Každý z cyklov sa vykonáva dovtedy, pokiaľ je
hodnota výrazu nenulová. V cykle while sa vyhodnocuje výraz ešte
pred vstupom do tela cyklu. To znamená, že príkazy v tele cyklu sa vykonajú
iba ak bude mať výraz nenulovú hodnotu. syntax: while(podmienka)
príkaz;
alebo
syntax: while(podmienka)
{
príkaz1;
...
príkazn;
}
Príklad č.17: Program, ktorý po stlačení klávesy vypiše na obrazovku: "Zuzka". Tento proces sa opakuje dovtedy pokiaľ nestlačíme kláves ´k´ potom program skončí. Na začiatku hodnotu premennej a nastavíme
na 0, týmto sme si že premenná a neobsahuje ASCII KOD žiadneho znaku. Príklad č.18: Program, ktorý sčítava celé čísla zadávané zo vstupu. Zadávanie sa ukončí číslom 0 a vytlačí sa súčet čísel. V tomto programe sme si zadefinovali dve premenné. Premennú a potrebujeme na ukladanie aktuálne načítaného čísla. Pomocou premennej sucet budeme sčítavať jednotlivé čísla, pričom prvý súčet bude rovný 0 + zadané číslo. Celý proces je založený na postupnom pripočítavaní zadaného čísla k súčtu z predošlého kroku. Ak zadáme 0 cyklus sa ukončí a program pokračuje príkazom printf, ktorý vytlačí hodnotu uloženú v premennej sucet. Úloha: Pokúste sa tento program upraviť tak aby sa tlačili jednotlivé medzi súčty. Príkaz do while je podobný príkazu while s tým
rozdielom, že teraz sa podmienka vyhodnocuje až po prvom vykonaní tela
cyklu. Príkazy v tele cyklu sa budú vykonávať dovtedy, pokiaľ je podmienka
splnená. Pri tomto type príkazu určite cyklus prebehne
aspoň raz. Najskôr sa vykonajú príkazy resp. príkaz v
tele cyklu a potom sa vyhodnotí výraz. Ak je výraz pravdivý t.j. má nenulovú
hodnotu, telo cyklu sa opäť vykoná. Ak je pravdivý, cyklus sa skončí. Príklad č.19: Pokúsime sa príklad č.18 prerobiť použitím príkazov do while Príklad č.20: Program načíta číslo a vypíše ho v desiatkovej,
osmičkovej a šestnáctkovej sústave. Zadávanie ďalšieho čísla ukončíme 0. Ak chceme používať cyklus while ako cyklus so známym počtom opakovaní, musíme
si vytvoriť premennú, ktorú budeme používať ako počítadlo. Túto premennú budeme
po každom prejdení cyklom zvyšovať resp. znižovať o jednotku a v podmienke cyklu
budeme testovať jej veľkosť. Cyklus for je cyklus so známym počtom
opakovaní. Cyklus so známym počtom opakovaní je taký cyklus, pri ktorom
vieme koľko krát sa majú príkazy v tele cyklu opakovať. syntax: for(výraz1;výraz2;výraz3)
príkaz;
alebo
syntax: for(výraz1;výraz2;výraz3)
{
príkaz1;
...
príkazn;
}
výraz1: inicializácia
riadiacej premennej cyklu (nastavenie počiatočnej hodnoty premennej
napr.(i=0 alebo j=10)) napr.:
Pred vstupom do cyklu sa
premenná i nastaví
na hodnotu i=0 (vyraz1). Príkazy v tele cyklu sa opakovane vykonávajú
pokiaľ je splnená podmienka i<10 ( výraz2 má nenulovú hodnotu). Príkaz for môžeme použiť aj pre vytvorenie nekonečného cyklu. To dosiahneme vynechaním vyrazu2 v hlavičke.
for (výraz1; ; výraz3) { }
V tom prípade treba do tela cyklu dať príkaz, ktorý zabezpečí ukončenie cyklu ako break alebo return. Ak nepotrebujeme v hlavičke žiaden výraz, dvojicu ;; musíme ponechať. Príklad č.21: Program, ktorý vypíše 20 - krát slovo "SKOLA" v očíslovanom poradí.
Vzťah medzi while a for Ak chceme používať cyklus while ako cyklus so známym počtom opakovaní, musíme si vytvoriť premennú, ktorú budeme používať ako počítadlo. Túto premennú budeme po každom prejdení cyklom zvyšovať resp. znižovať o jednotku a v podmienke cyklu budeme testovať jej veľkosť. for(výraz1;výraz2;výraz3) výraz1
{ príkaz1; while(výraz2)
: {
príkazn; príkaz1;
} :
príkazn;
výraz3;
}
Príklad č.22: Program, ktorý vypíše 20 - krát slovo "SKOLA" v očíslovanom poradí. Príklad napísaný pomocou cyklu while.
Príklad č.23: Program, ktorý n - krát vytlačí slovo načítané zo vstupu v očíslovanom poradí.
Príklad č.24: Príklad, ktorý vypíše na obrazovku všetky malé písmena od ´a´ po ´z´ Príklad č.25: Naprogramujme hru "Myslím si číslo".
Počítač si bude myslieť číslo v rozsahu 0 až 100 a našou úlohou je nájsť
to číslo. Úlohy na zopakovanie
break continue
while (vyraz1)
{
prikaz1;
if (vyraz2)
continue;
prikaz3;
prikaz4;
}
Telo cyklu sa bude vykonávať, kým bude vyraz1 pravdivý. To znamená, že sa vykoná príkaz a test vyrazu2. Ak bude vyraz2 pravdivý, vykoná sa príkaz continue, čo spôsobí preskočenie všetkých ostatných príkazov v tele cyklu. Pokačovať sa bud znovu vyhodnotením vyrazu1..Príkaz continue nie je možné použiť v rozhodujúcej konštrukcii switch. goto Použitie príkazu goto je podobné ako použitie
príkazu break. Je užitočný hlavne v situáciách ak potrebujeme vo vnorených
cykloch predčasne vyskočiť nielen z najvnútornejšieho, ale z celej konštrukcie.
Ak však môžete, radšej na tento príkaz navždy
ZABUDNITE!!! Dnešný trend programovania používa iné programové konštrukcie
(while, do while, switch, ...)
for (...)
{ for (...)
{
...
if (...)
goto next;
}
}
...
next: ...
V tomto prípade, ak bude splnená podmienka v príkaze if, preruší sa vykonávanie cyklov a bude sa pokračovať príkazom nasledujúcim za návestím next.
|
||