Cykly
Cyklus nebo taky smyčka nám umožňuje provádět nějakou činnost v programu opakovaně. Opakování je řízeno podmínkou: když podmínka platí, příkazy se opakují, když podmínka přestane platit, smyčka končí. Jazyk C má tři typy cyklu: while, do-while, for.
Cyklus while
Cyklu while říkáme taky cyklus s podmínkou na začátku. Obecná syntaxe příkazu:
while (výraz) příkaz;
Poznámky k provádění:
- výraz v závorce za klíčovým slovem while se testuje na začátku každého průchodu cyklem
- když výsledkem výrazu je pravda, provede se příkaz
- když výsledkem výrazu je nepravda, cyklus končí a v programu se pokračuje dalším příkazem za cyklem
- příkaz může tvořit taky tzv. složený příkaz (blok) neboli posloupnost více příkazů, které uzavřeme ve složených závorkách
Př. Program určí největšího společného dělitele pro 2 zadaná čísla. Používá Euklidův algoritmus.
#include <stdio.h> #include <stdlib.h> int main() { int a, b; printf("Program urci nejvetsiho spolecneho delitele pro 2 zadana cisla\n\n"); printf("\nZadejte prvni cislo: "); scanf("%d",&a); printf("\nZadejte druhe cislo: "); scanf("%d",&b); //algoritmus je platny jen pro prirozena cisla if((a == 0) || (b == 0)) { printf("Nelze urcit, pokud jedno z cisel je nula\n"); system("pause"); return 0; } if(a < 0) a = -a; if(b < 0) b = -b; while(a != b) { if(a > b) a = a-b; else b = b-a; } printf("\nNejvetsi spolecny delitel je %d\n\n", a); system("pause"); return 0; }
Cyklus do-while
Tomuto cyklu říkáme cyklus s podmínkou na konci. Obecná syntaxe příkazu:
do příkaz while(výraz);
Poznámky k provádění:
- příkaz se provede vždy alespoň jednou
- výraz se testuje až na konci každého průběhu cyklu, po provedení příkazu
- když výsledkem výrazu je pravda, pokračuje se dalším průběhem cyklem
- když výsledkem výrazu je nepravda, cyklus končí a v programu se pokračuje dalším příkazem za cyklem
- cyklus se používá v případech, když potřebujeme např. nejdřív získat hodnotu a až potom ji testovat
- časté použití: načítání s koncovou značkou, testování zadaných hodnot
Př. Program načte celé číslo a vypíše jeho číslice v opačném pořadí. Ignoruje přitom znaménko mínus u záporného čísla.
#include <stdio.h> #include <stdlib.h> int main() { int cislo, cislice; printf("\nZadejte cislo: "); scanf("%d",&cislo); if(cislo < 0) cislo = -cislo; // zaporne cislo zmenime na kladne printf("Cislice v opacnem poradi:\n"); do { cislice = cislo%10; //zbytek po deleni 10 nam da posledni cislici printf("%d ", cislice); cislo = cislo/10; //prechod na vyssi rad //zruseni posledni cislice } while(cislo > 0); printf("\n\n"); system("pause"); return 0; }