7. díl - Cykly v C++ (while, do while)

C++ Základní konstrukce C++ Cykly v C++ (while, do while)

Minule jsme začali cykly . Dnes v nich budeme pokračovat, ukážeme si while a do while.

while cyklus

while cyklus funguje jinak než for, jednoduše opakuje příkazy v bloku, dokud platí podmínka. Syntaxe cyklu je následující:

while(podminka)
{
    // příkazy
}

Pokud vás napadá, že lze přes while cyklus udělat i for cyklus, máte pravdu :) for je vlastně speciální případ while cyklu. While se ale používá na trochu jiné věci, často máme v jeho podmínce např. funkci vracející logickou hodnotu true/false. Původní příklad z for cyklu bychom udělali následovně pomocí while:

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

To ale není ideální použití while cyklu.

Vezmeme si naši kalkulačku z minulých lekcí a opět ji trochu vylepšíme, konkrétně o možnost zadat více příkladů. Program tedy hned neskončí, ale zeptá se uživatele, zda si přeje spočítat další příklad. Připomeňme si původní verzi kódu (je to ta verze se switchem, ale klidně použijte i tu bez něj, záleží na vás):

setlocale(LC_ALL,"");
cout << "Vítejte v kalkulačce" << endl;
cout << "Zadejte první číslo:" << endl;
float a;
cin >> a;
cout << "Zadejte druhé číslo:" << endl;
float b;
cin >> b;
cout << "Zvolte si operaci:" << endl;
cout << "1 - sčítání" << endl;
cout << "2 - odčítání" << endl;
cout << "3 - násobení" << endl;
cout << "4 - dělení" << 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 << "Výsledek:" << vysledek << endl;
else
    cout << "Neplatná volba" << endl;
cout << "Děkuji za použití kalkulačky, aplikaci ukončíte libovolnou klávesou." << endl;
cin.get();cin.get();

Nyní vložíme téměř celý kód do while cyklu. Naší podmínkou bude, že uživatel zadá "ano", budeme tedy kontrolovat obsah proměnné pokracovat. Zpočátku bude tato proměnná nastavena na "ano", aby se program vůbec spustil, poté do ní necháme načíst volbu uživatele:

cout << "Vítejte v kalkulačce" << endl;
string pokracovat = "ano";
while (pokracovat == "ano") {
        cout << "Zadejte první číslo:" << endl;
        float a;
        cin >> a;
        cout << "Zadejte druhé číslo:" << endl;
        float b;
        cin >> b;
        cout << "Zvolte si operaci:" << endl;
        cout << "1 - sčítání" << endl;
        cout << "2 - odčítání" << endl;
        cout << "3 - násobení" << endl;
        cout << "4 - dělení" << 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 << "Výsledek: " << vysledek << endl;
        else
                cout << "Neplatná volba" << endl;
        cout << "Přejete si zadat další příklad? [ano/ne]" << endl;
        cin >> pokracovat;
}
cout << "Děkuji za použití kalkulačky, aplikaci ukončíte libovolnou klávesou." << endl;
cin.get();cin.get();

Výsledek:

Jednoduchá kalkulačka v C++ s možností opakovat výpočet pomocí while cyklu

Naši aplikaci lze nyní používat vícekrát a je již téměř hotová.

do while cyklus

Do while je velmi podobný jako while, ale je tu jeden rozdíl - příkaz (nebo blok příkazů) se provede vždy alespoň jednou, podmínka se kontroluje až poté.

Syntaxe cyklu je následující:

do {
        // příkazy
} while ( /* podmínka */ );

Všimněte si středníku za kulatými závorkami, u do while musí být.

Do while se dá použít např. u čtení vstupu z konzole. Představte si, že chceme, aby uživatel zadal číslo větší než 2. Ale co když zadá jiné? Není úplně ideální ukončit program po prvním špatném zadání. Lepší bude ptát se ho tak dlouho až odpoví správně. Pomocí while by to vypadalo asi takto:

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

A teď s do while:

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

Pozn. Jak vyřešit případy, kdy uživatel vůbec nezadá číslo, si řekneme příště.

Tady to ještě není takový rozdíl, ale pokud bychom měli místo cin >> a; nějaký delší kód, u while bychom ho museli celý napsat dvakrát.

Možná vás napadlo, jak to napsat zkráceně i u while:

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

Ne vždy ale bude podmínka tak jednoduchá, aby bylo možné tohle použít.

break, continue

Poslední, co si k cyklům ukážeme, budou příkazy break a continue.

Příkaz break slouží k okamžitému ukončení aktuálního cyklu.

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

Příkaz break jsme již viděli u switche a má naprosto stejný význam - opustí switch. Navíc nelze break aplikovat na vnořené cykly - vždy se vztahuje pouze na nejbližší cyklus.

Na druhou stranu continue ukončí jen aktuální průběh cyklem.

int i, a;
for (i = 2, a = 1; i < 10; i++) {
    if (i % 3 == 0)
        continue;
    a *= i;
}
// a == 2240 == 1 * 2 * 4 * 5 * 7 * 8;

Pokud je i dělitelné třemi, zbytek vnitřku cyklu se přeskočí, takže už jím nenásobíme.

To už by k cyklům stačilo.

Příště si ukážeme, jak zabezpečit všechny vstupy od uživatele.

Již toho umíme docela dost, začíná to být zábava, že? :)


 

Stáhnout

Staženo 20x (7.06 kB)
Aplikace je včetně zdrojových kódů v jazyce C++

 

  Aktivity (3)

Článek pro vás napsal Zdeněk Pavlátka
Avatar
Autor se věnuje spoustě zajímavých věcí :)

Jak se ti líbí článek?
Celkem (3 hlasů) :
4.666674.666674.666674.666674.66667


 


Miniatura
Předchozí článek
Cykly v C++ (for)
Miniatura
Všechny články v sekci
Základy C++
Miniatura
Následující článek
Cvičení k 6.-7. lekci C++

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!