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ý popis (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í: testování vstupních hodnot, opakování výpočtu podle přání uživatele, načítání s koncovou značkou
Př. Program načte celé číslo a vypíše jeho číslice v opačném pořadí. Program pokračuje jen po zadání kladného čísla.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int cislo, cislice;
do
{
printf("\nZadejte kladne cislo: ");
scanf("%d",&cislo);
if (cislo < 0) printf ("Chyba. Cislo je zaporne\n") ;
} while (cislo < 0); // opakovani v pripade zaporneho cisla
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;
}
Uživatelská nabídka
V následujícím programu je ukázka použití jednoduché uživatelské nabídky. Ta je důležitou součástí přívětivého ovládání v mnoha aplikacích. Program je určený jenom pro testování barevných schémat podle výběru uživatele.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int vyber;
printf("\nVitejte v aplikaci pro testovani barevnych schemat obrazovky\n\n");
do{
printf("1 - cervena na bilem pozadi\n");
printf("2 - cervena na zlutem pozadi\n");
printf("3 - zluta na cernem pozadi\n");
printf("4 - svetle cervena na modrem pozadi\n");
printf("5 - fialova na sedem pozadi\n");
printf("0 - konec testovani\n\n");
printf("Vyberte schema: ");
scanf("%d", &vyber);
switch (vyber) {
case 1: system("COLOR FC");
break;
case 2: system("COLOR 6C");
break;
case 3: system("COLOR 06");
break;
case 4: system("COLOR 1C");
break;
case 5: system("COLOR 85");
break;
default: printf("\nNEZNAME SCHEMA\n\n");
break;
}
}while(vyber != 0);
return 0;
}