headerphoto

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;
} 

Design downloaded from Free Templates - your source for free web templates