Větvení a cykly v C++

Jak ovlivnit běh programu

S tím co doposavaď umíme pracovat je sice možné udělat nějaké základní prgrámky, ale není možné udělat složitější aplikace, které by mohly být už nějak užitečné. Je třeba, aby se program dokázal řídit podle toho, jak se mění vlastnosti toho s čím pracuje. S tím nám pomůžou jednoduché nástroje, které jsou v C++ dobře implementovány, jsou to podmínky a cykly. Dost řečí, přejdeme na příklad.

#include <iostream>

using namespace std;

// bool slouží k určování stavů true/false (pravda/nepravda)

bool pravda = true;
bool nepravda = false;

int main(){

  // slovo "if" muzeme prekladat jako "pokud"

  if (pravda) cout << "tato podminka je splnena" << endl;
  if (nepravda) cout << "tato podminka neni splnena" << endl;

  if (1<2) cout << "tato podminka je splnena" << endl;
  if (1>2) cout << "tato podminka neni splnena" << endl;

  // slovo "for" budeme pokladat za "pocitadlo"

  for (int i=0; i<10; i++) cout << i << " ";
  cout << endl;

  // "do" cyklus s podminkou na zacatku

  int d = 9;

  do{
    d--;
    cout << d << " ";
  }while (d >= 0);
  cout << endl;

  // "while" cyklus s podminkou na konci

  int w = 0;

  while (w <= 10) {
    w++;
    cout << w << " ";
  }
  cout << endl;

  return 0;

}

tato podminka je splnena
tato podminka je splnena
0 1 2 3 4 5 6 7 8 9
8 7 6 5 4 3 2 1 0 -1
1 2 3 4 5 6 7 8 9 10 11

Syntaxe příkazů

V této lekci poněkud netradičně nebudeme popisovat kód, který je napsán, ale popíšeme si syntaxi příkazů, které byly v příkladu použity. Předpokládám, že každý bude schopný po naučení se syntaxe přeložit co je napsáno sám.

Podmínky

Podmínku si můžeme představit jako dotaz na který je možné odpovědět pomocí slov "ano" a "ne" (logický výraz). Abychom mohli tvořit podmínky, bylo by dobré trochu se vyznat v množinových operacích a mít "selský rozum". K vytváření podmínek budeme potřebovat různé druhy operátorů. Důležitý přehled si uvedeme v tabulce.

<, <=menší, menší nebo rovno
>, >=větší, větší nebo rovno
==, !=rovná se, nerovná se
!logické NOT (!true == false)
&&a zároveň (množinová operace průnik)
||nebo (množinová operace sjednocení)

Větvení (if)

Větvením rozumíme směrování běhu programu na základě podmínek. K tomu slouží "if".

if (podmínka) {
     příkazy ...
} else if (podmínka) {
     příkazy ...
} else {
     příkazy ...
}

Syntaxe if začíná jednoduchým "if". pokud je podmínka splněna provedou se příkazy, které jsou v bloku kódu hned za ní. Blok kódu se ohraničuje složenými závorkami { blok kódu }. Pokud za if nenásleduje blok kódu, provede se pouze 1 příkaz jed za podmínkou. Tato část syntaxe je povinná. Následuje část nepovinná. Pokud chceme kontrolovat další podmínky, které se vylučují s podmínkou první můžeme navázat "else if (podmínka)". To je v překladu "v jinem případě, pokud ...". Nakonec přichází blok "else", ten se provede vždy, pokud všechny předešlé podmínky byly označené za neplatné.

Pokud deklarujete nějakou proměnnou uvnitř bloku {}, bude její platnost pouze v tomto bloku a v blocích do ní vnořených. Na konci bloku se proměnná stráci (dealokuje se).

Větvení (switch)

Větvení můžeme provádět i pomocí switch. Tady pomůže při popisu jenom příklad. popisování by mohlo být zdlouhavé a zavádějící.

int d=1;
switch (d) {
    case 0: cout << "0"; break;
    case 1: cout << "1"; break;
    case 2: cout << "2"; break;
}

Switch je v překladu přepínač. Postupně kontroluje pro jaké hodnoty (case "případ") se rovná a pokud najde tak spustí kód následující za ním. Je důležité si uvědomit že se zde nepracuje s bloky. Pracuje se přímo se sadou příkazů následujících po case. Pokud tedy chceme provést jen nějakou část, můžeme předčasně ukončit blok pomocí "break" (zlomit, rozbít).

Cyklus s podmínkou na začátku (počítadlo for)

Počítadlo for se chová jako cyklus s podmínkou na začátku. To znamená, že se první ověří platnost podmínky a teprve poté se provedou příkazy. Pokud podmínka neplatí cyklus se ukončí. Poznámka: Pokud použijeme místo podmínky slovo true, vytvoříme nekonečný cyklus.

// for (deklarace pocitaci promenne ; podminka ; pocitani ) { prikazy }
for (int i=0; i<10; i++) cout << i << " ";

Do počítadla se zadáva počítací proměnná, které se nestaví počáteční hodnota. Za prvním středníkem se zadává podmínka do kdy má čítat. A za posledním středníkem operace která se má s čítací proměnou provádět v každém cyklu. Příkaz "i++" dělá to samé jako příkaz "i=i+1". Přičítá tedy k proměnné jedničku. Příkaz "i--" pracuje na stejném principu, akorát odečítá.

Kód k "for" zobrazí čísla 0 - 9 odělené mezerami.

Cyklus s podmínkou na začátku (while)

Toto už není počítadlo. Je to strohý cyklus, který se řídí podmínkou, kterou kontroluje vždy na začátku cyklu. While je v překladu "dokuď".

while ( podmínka ) {
     příkazy ...
}

Cyklus s podmínkou na konci (do {} while)

Do {} while je cyklus s podmínkou na konci. To znamená že se první provedou příkazy a až na konci cyklu se zkontroluje zda podmínka platí. To znamená, že se cyklus vždy provede alespoň jednou.

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

Úkoly

  1. Vypište na obrazovku 1000x "Ahoj".
  2. Vytvořte pole celých čísel o velikosti 100 a naplňte jej hodnotami 0 - 99.
  3. Ke každému číslu v poli přičtěte číslo 7 a výsledek zobrazte.
  4. Pokuste se přepsat algoritmus tak, aby jste použily jiný cyklus než jste používali doposavaď.

TOPlist