Linux E X P R E S

Facebook

Programovanie v jazyku C++: Cykly (1)

cplusplus.png

Tento článok započne mini seriál o cykloch v C++. Neminie vás ľahký úvod do cyklov a prvé zoznámenie sa s cyklom for.


Úvod do cyklov

Predstavte si situáciu, síce trochu praštenú, ale na predstavu nám to postačí. Vašou úlohou je vypísať 100 krát Hello world na obrazovku. Tak, na základe nadobudnutých znalostí (a stále neviete o cykloch) by ste išli na to asi takto:

cout << "Hello world";
cout << "Hello world";
cout << "Hello world";

a ešte 96krát, ale sami asi uznáte, že vypisovať tu celý kód by dalo na jeden samostatný článok a to by ste neboli radí a ja by som dostal „padáka“.

cout << "Hello world";   // hurá, stý krát výpis, misia splnená

Tak, po pracnej robote sa s radosťou uvelebíte do kresla s pocitom dobre vykonanej práce. Po vyprchaní hormónov šťastia, vás začne niekde v hlave svietiť kontrolka, že niečo s tým kódom nie je v poriadku. Z hľadiska funkčností je bezchybný, ale vyzerá dlhý, prácny a zabral vám určite kopec času.

Ak ste používali obľúbenú metódu copy/paste, skrátilo by vám to čas, ale stále to nie je ono. Môžme použiť v jazyku C++ niečo efektívnejšie? A na scénu prichádzajú cykly. S pomocou cyklov môžeme robiť „manuálne“ veci jednoduchšie.

Inkrementácia a dekrementácia

Ešte predtým, než si povieme niečo o prvom type cyklu, musíme si predstaviť inkrementáciu a dekrementáciu. Inkrementácia zvýši hodnotu premennej o 1 a operátor sa píše takto: ++. Dekrementácia naopak zníži hodnotu o 1. Operátor dekrementácie je --.

Ich využitie je hlavne v cykloch, kde sa veľmi často používa inkrementácia a dekrementácia. Pôvodne bez inkrementácie a dekrementácie musíte zvyšenie/zníženie o hodnotu 1 napísať takto:

int k = i + 1;
int k = i – 1;

Inkrementácia vyzerá takto:

int k = i++;

Dekrementácia:

int k = i--;

Inkrementácia a dekrementácia pozná prefixový a postfixový zápis. A oba zápisy dávajú iné výsledky, tak pozor!

Prefixový zápis:

int i = 5;
int k = ++i;   // najprv sa zvýši hodnota premennej i o 1, až tak priradí 
premennú i k premennej k

Výsledok: i = 6; k = 6

Postfixový zápis:

int i = 5;
int k = i++;  // najprv priradí premennú i k premennej k, až potom 
sa premenná i zvýši o hodnotu 1!

Výsledok: i = 6; k = 5

Ak by som mal trefne zhodnotiť prefix/postfix tak čítanie kódu je z ľavá do práva a je potrebné si dávať pozor na priradenie premenných.

Poďme na príklad:

Príklad 1: Inkrementácia

#include <iostream>   // hlavičkový súbor iostream

using namespace std;   // priestor mien
 
 int main()   // hlavná funkcia main
 {
     int a = 22;   // deklarácia premennej
     int b = ++a;  // deklarácia premennej pomocou priradenia
     int c = 22;
     int d = c++;
 
     cout <<"Prefix: a: "<<a<<" b: "<<b<<"\n";   // výstupy na obrazovku
     cout <<"Postfix c: "<<c<<" d: "<<d<<"\n";
 
     return 0;
 }

Výsledok:

Prefix: a: 23 b: 23
Postfix c: 23 d: 22

2. program: Dekrementácia

#include <iostream>
using namespace std;
int main()
{
    int a = 22;
    int b = --a;
    int c = 22;
    int d = c--;
    cout <<"Prefix: a: "<<a<<" b: "<<b<<"\n";
    cout <<"Postfix c: "<<c<<" d: "<<d<<"\n";
    return 0;
}

Výsledok:

Prefix: a: 21 b: 21
Postfix c: 21 d: 22

Cyklus for

Cyklus for je jeden z cyklov na využitie opakovania nejakej činností.

Syntax cyklu for je nasledovná:

for (inicializácia; podmienka; zmenový výraz)
{
  kód…
}

Bez teoretickej omáčky, pozrime si radšej ukážku:

for (int i = 0; i < 100; i++)
 {
   cout <<"Hello world";
 }

Ešte si pamätáte na tu divnú úlohu, ktorú som načrtol na začiatku. Tak a tu mate jej riešenie. Pár riadkov kódu oproti tomu, ak by sme nevyužili cyklus. Prvý výraz je inicializačný a vykoná sa raz na začiatku! Premenná bude typu int a získa hodnotu 0. Následne pri každej iterácii sa testuje podmienka.

Ak je podmienka pravdivá, vykonajú sa všetky príkazy v tele cyklu. Ak je nepravdivá, cyklus skonči. Ak sa dokončia príkazy v tele cyklu, premenná i je inkrementovaná o hodnotu 1! Práve tu sa najviac využíva inkrementácia a dekrementácia. A tak nasleduje opäť test podmienky, vykonanie tela cyklu, inkrementácia/dekrementácia a tak dookola.

3. program: Ukážeme si demonštráciu cyklu na príklade, o ktorom básnime od začiatku článku

#include <iostream>

using namespace std;

int main()
{
  for (int i = 0; i < 100; i++)
  {
    cout << "Hello world\n";
  }
  return 0;
}

Výsledok: Veríte mi, že sa tam objaví 100 krát Hello world? Môžte si to kľudne prepočítať.

Diskuze (2) Nahoru