Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

7. diel - Cykly v C ++ (while, do while)

V minulej lekcii, Cykly v C ++ (for) , sme začali s cyklami. V dnešnom C ++ tutoriálu v nich budeme pokračovať, ukážeme si while a do while.

While cyklus

Cyklus while funguje inak ako cyklus for, jednoducho opakuje príkazy v bloku tak dlho, kým platí podmienka. Syntax cyklu je nasledovné:

while (podmienka)
{
    // príkazy
}

Ak vás napadá, že možno cez while cyklus urobiť aj for cyklus, máte pravdu :) for je vlastne špeciálny prípad while. Cyklus while sa ale používa na trochu iné veci, často máme v jeho podmienke napr. Funkciu vracajúci logickú hodnotu true / false. Pôvodný príklad z for cyklu by sme urobili pomocou while nasledovne:

int i = 1;
while (i <= 10)
{
    cout << i << ' ';
    i++;
}
cin.get();

To ale nie je ideálne použitie while cyklu.

Vezmeme si našu kalkulačku z minulých lekcií a opäť ju trochu vylepšíme, konkrétne o možnosť zadať viac príkladov. Program teda hneď neskončí, ale spýta sa užívateľa, či si praje spočítať ďalší príklad. Pripomeňme si pôvodnú verziu kódu (je to tá verzia sa switch, ale pokojne použite aj tú bez neho, záleží na vás):

cout << "Vitajte v kalkulačke" << endl;
cout << "Zadajte prvni cislo:" << endl;
float a;
cin >> a;
cout << "Zadajte druhe cislo:" << endl;
float b;
cin >> b;
cout << "Zvoľte si operáciu:" << endl;
cout << "1 - sčítanie" << endl;
cout << "2 - odčítanie" << endl;
cout << "3 - násobenie" << endl;
cout << "4 - delenie" << endl;
int volba;
cin >> volba;
float vysledek = 0.0f;
switch (volba)
{
    case 1:
        vysledek = a + b;
        break;
    case 2:
        vysledek = a - b;
        break;
    case 3:
        vysledek = a * b;
        break;
    case 4:
        vysledek = a / b;
        break;
}
if ((volba > 0) && (volba < 5))
    cout << "Vysledok:" << vysledek << endl;
else
    cout << "Neplatný voľba" << endl;
cout << "Dekuji za použitia kalkulačky, aplikáciu ukončíme ľubovoľného klávesu." << endl;
cin.get(); cin.get();

Teraz vložíme takmer celý kód do while cyklu. Našou podmienkou bude, že používateľ zadá " áno ", Budeme teda kontrolovať obsah premennej pokracovat. Spočiatku bude táto premenná nastavená na " áno ", Aby sa program vôbec spustil, potom do nej necháme načítať voľbu užívateľa:

cout << "Vitajte v kalkulačke" << endl;
string pokracovat = "áno";
while (pokracovat == "áno")
{
    cout << "Zadajte prvni cislo:" << endl;
    float a;
    cin >> a;
    cout << "Zadajte druhe cislo:" << endl;
    float b;
    cin >> b;
    cout << "Zvoľte si operáciu:" << endl;
    cout << "1 - sčítanie" << endl;
    cout << "2 - odčítanie" << endl;
    cout << "3 - násobenie" << endl;
    cout << "4 - delenie" << endl;
    int volba;
    cin >> volba;
    float vysledek = 0;
    switch(volba)
    {
        case 1:
            vysledek = a + b;
            break;
        case 2:
            vysledek = a - b;
            break;
        case 3:
            vysledek = a * b;
            break;
        case 4:
            vysledek = a / b;
            break;
    }
    if ((volba > 0) && (volba < 5))
        cout << "Vysledok: " << vysledek << endl;
    else
        cout << "Neplatný voľba" << endl;
    cout << "Prajete si zadať dalsi priklad? [áno/nie]" << endl;
    cin >> pokracovat;
}
cout << "Dekuji za použitia kalkulačky, aplikáciu ukončíme ľubovoľného klávesu." << endl;
cin.get(); cin.get();

výsledok:

Konzolová aplikácia
Vitajte v kalkulačke
Zadajte prvni cislo:
128
Zadajte druhe cislo:
16
Zvoľte si operáciu:
1 - sčítanie
2 - odčítanie
3 - násobenie
4 - delenie
4
Vysledok: 8
Prajete si zadať dalsi priklad? [áno/nie]
áno
Zadajte prvni cislo:
12
Zadajte druhe cislo:

Naši aplikáciu možno teraz používať viackrát a je už takmer hotová.

Do-while cyklus

Cyklus do - while je veľmi podobný ako while, ale je tu jeden rozdiel - príkaz (alebo blok príkazov) sa vykoná vždy aspoň raz, podmienka sa kontroluje až potom.

Syntax cyklu je nasledovné:

do
{
    // príkazy
} while ( /* podmienka */ );

Všimnite si bodkočiarky za okrúhlymi zátvorkami, u do - while musí byť.

Cyklu do - while možno využiť napr. U čítanie vstupe z konzoly. Predstavte si, že chceme, aby používateľ zadal číslo väčšie ako 2. Ale čo keď zadá iné? Nie je úplne ideálne ukončiť program po prvom zlom zadaní. Lepšie bude pýtať sa ho tak dlho, až odpovie správne. Pomocou while by to vyzeralo asi takto:

int a;
cin >> a;
while (a <= 2)
{
    cin >> a;
}

A teraz s do - while:

int a;
do
{
    cin >> a;
} while (a <= 2);

Pozn. Ako ošetriť aj prípady, keď používateľ vôbec nezadá číslo, si povieme ďalej v kurze.

Tu to ešte nie je taký rozdiel, ale ak by sme mali miesto cin >> a; nejaký dlhší kód, u while by sme ho museli celý napísať dvakrát.

Možno vás napadlo, že aj s while by išla vymyslieť kratšie verzia:

int a = 1;
while (a <= 2)
{
    cin >> a;
}

Nie vždy ale bude podmienka tak jednoduchá, aby bolo možné podobné riešenie.

Break a continue

Posledné, čo si k cyklom ukážeme, budú príkazy break a continue.

Príkaz break slúži na okamžité ukončenie aktuálneho cyklu.

int i;
for (i = 0; i < 20; i++)
{
    if (i * i > 130)
        break;
}
// i == 12
cout << i;

Príkaz break sme už videli u switch a má úplne rovnaký význam - opustí cyklus. Slovo break nevyskočí z vnorených cyklov - vždy sa vzťahuje len na 1 najbližší cyklus.

Na druhú stranu, continue ukončí len aktuálne priebeh cyklom, za ktorým sa môžu ďalej spustiť ďalšie priebehy (iterácie).

int i, a;
for (i = 2, a = 1; i < 10; i++)
{
    if (i % 3 == 0)
        continue;
    a *= i;
}
// a bude ve výsledku 2240 což je 1 * 2 * 4 * 5 * 7 * 8;
cout << a;

Program vyššie zisťuje, či je i deliteľné tromi, zvyšok vnútra cyklu sa preskočí, takže už ním nenásobíme.

To by už k cyklom stačilo.

V budúcej lekcii, Riešené úlohy k 6.-7. lekciu C ++ , si ukážeme, ako pracovať s poľami.

Už toho vieme celkom dosť, začína to byť zábava, že? :)

V nasledujúcom cvičení, Riešené úlohy k 6.-7. lekciu C ++, si precvičíme nadobudnuté skúsenosti z predchádzajúcich lekcií.


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 127x (7.06 kB)
Aplikácia je vrátane zdrojových kódov v jazyku C++

 

Predchádzajúci článok
Cykly v C ++ (for)
Všetky články v sekcii
Základné konštrukcie jazyka C ++
Preskočiť článok
(neodporúčame)
Riešené úlohy k 6.-7. lekciu C ++
Článok pre vás napísal Zdeněk Pavlátka
Avatar
Užívateľské hodnotenie:
2 hlasov
Autor se věnuje spoustě zajímavých věcí ze světa informatiky a grafiky
Aktivity