3. seminář - Větvení programu, cykly

TEACHINGZPC1

Cykly

V programu často potřebujeme opakovat určitou část kódu. Potřebujeme tedy kontrukci která nám to umožní a to jsou cykly.


    // Cyklus while
    // Telo cyklu se opakuje pokud plati podminka.

    while (podminka) {
        // telo cyklu
    }


    // Cyklus do-while
    // Je analogicky k cyklu while s tim rozdilem ze se podminka testuje az po provedeni tela.
    // To znamena ze telo cyklu se provede alespon 1.

    do {
        // telo cyklu
    } while (podminka)

    // Cyklus for
    // Prikazy init se provedou pred zapocetim cyklu
    // Prikazy iter se provedou po dokonceni tea cyklu
    // Podminka ma stejnou funkci jako u cyklu while.

    for (init; podminka; iter) {
        // telo cyklu
    }


    // PRIKLADY

    // Vypiseme cisla 0 az 9

    for(int j = 0; j < 10; j = j + 1) {
        printf("%i ", j);
    }

    int j = 0;

    while(j < 10) {
        printf("%i ", j);
        j = j + 1;
    }

    // V cyklech je mozne pouzit prikazy break a continue.
    // Break ukonci vykonavani cyklu
    // Continue pokracuje ve vykonavani dalsi iterace (kolo)

    // Vypiseme cisla 0 az 9 ale vynechame nasobky 3
    for (int j = 0; j < 10; j = j + 1) {
        if (j % 3 == 0) {
            continue;
        }
        printf("%i ", j);
    }

    // Pokud bychom pouzili break misto continue tak by program nevypsal zadnou hodnotu. Zkuste se zamyslet proc.

Dodatek k aritmetickým operacím

Pokud chceme v cyklu (nebo kdekoliv jinde) inkremetovat, nebo-li přičíst 1, můžeme k tomu použít několik konstrukcí:


    int j = 0;

    // Jiz zname
    j = j + 1;

    // Inkementace
    j++;
    ++j;

    // Dekrementace
    j--;
    --j;

    // Dalsi moznost, kde muzeme pricitat libovolnou hodnotu
    j += 1;
    j += 10; // Ekvivaletni s j = j + 10


    // Vyse uvedenou konstrukci pouzit i s artimetickymi operacemi *, -, /,

    j *= 10; // j = j * 10


    // Cyklus vyse muzeme upravit nasledovne

    for (int j = 0; j < 10; j += 1) {
        if (j % 3 == 0) {
            continue;
        }
        printf("%i ", j);
    }

    // nebo

    for (int j = 0; j < 10; j++) {
        if (j % 3 == 0) {
            continue;
        }
        printf("%i ", j);
    }


Úkoly

Napište v jazyku C program, který pro zadané číslo vypíše na obrazovku všechny jeho násobky menší nebo rovny číslu 100.

Řešení


    Zadejte cislo: 7
    Nasobky zadaneho cisla:
     7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 77, 84, 91, 98

Napište v jazyku C program, který vykreslí pomocí znaku "*" na obrazovku čtverec zadané velikosti.

Řešení


    Zadejte velikost ctverce: 5

    *****
    *   *
    *   *
    *   *
    *****

Napište program, který pro přirozená čísla a a b:

  • Vypíše prvních a násobků čísla b.
  • Vypočítá a-tou mocninu čísla b.
  • Vypočítá a-té Fibonacciho číslo.
  • Určí, kolik číslic má číslo a.
  • Sečte všechna celá čísla větší než a a menší než b.

Řešení