Zarábaj až 6 000 € mesačne! Akreditované rekvalifikačné kurzy od 0 €. 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:

Klikni pre editáciu
  • int i = 1;
    while (i <= 10)
    {
        cout << i << ' ';
        i++;
    }
    cin.get();
    
    • Skontroluj, či výstupy programu zodpovedajú predlohe. S inými textami testy neprejdú.

    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):

    Klikni pre editáciu
    • 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();
      
      • Skontroluj, či výstupy programu zodpovedajú predlohe. S inými textami testy neprejdú.

      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.

      Klikni pre editáciu
      • int i;
        for (i = 0; i < 20; i++)
        {
            if (i * i > 130)
                break;
        }
        // i == 12
        cout << i;
        
        • Skontroluj, či výstupy programu zodpovedajú predlohe. S inými textami testy neprejdú.

        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).

        Klikni pre editáciu
        • 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;
          
          • Skontroluj, či výstupy programu zodpovedajú predlohe. S inými textami testy neprejdú.

          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++

           

          Ako sa ti páči článok?
          Pred uložením hodnotenia, popíš prosím autorovi, čo je zleZnakov 0 z 50-500
          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