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:
{CPP_CONSOLE}
int i = 1;
while (i <= 10)
{
cout << i << ' ';
i++;
}
cin.get();
{/CPP_CONSOLE}
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):
{CPP_CONSOLE}
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();
{/CPP_CONSOLE}
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.
{CPP_CONSOLE}
int i;
for (i = 0; i < 20; i++)
{
if (i * i > 130)
break;
}
// i == 12
cout << i;
{/CPP_CONSOLE}
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).
{CPP_CONSOLE}
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;
{/CPP_CONSOLE}
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++