Kapitola 5. Řízení vykonávání programu

Obsah

5.1. Výrazový příkaz
5.2. Prázdný příkaz
5.3. Blok příkazů
5.4. Oblast platnosti identifikátorů
5.5. Příkaz If - else
5.6. Přepínač - switch
5.7. Cykly
5.8. Cyklus while
5.9. Cyklus for
5.10. Cyklus do
5.11. Příkaz goto
5.12. Opakování

Časová náročnost
Časová náročnost kapitoly: 1 hodina 40 minut

V této části si ukážeme, jak nechat vykonat jen část kódu, případně jak některou část kódu nevykonat vůbec. Také si ukážeme jak vybrat některou variantu, podle aktuální hodnoty přepínače. V neposlední řadě se naučíme několik způsobů, jak opakovaně vykonávat skupiny příkazů.

Všechny tyto naše zvolené záměry budou vykonány za použití řídicích konstrukcí. S jejich pomocí bude náš program provádět právě ty příkazy, které požadujeme.

Důležité K řízení chodu programu máme k dispozici tyto příkazy:
  1. Výrazový příkaz
  2. Blok
  3. Přepínač
  4. Cyklus
  5. Skok

Potřebné znalosti
Potřebné znalosti
K zvládnutí obsahu této kapitoly je nutné mít znalosti z kapitoly 2 až 4 - umět napsat jednoduché programy s pomocí výrazů. Orientovat se v problematice operátorů a znát jejich prioritu.

5.1. Výrazový příkaz

Časová náročnost
Časová náročnost: 1 minuta

Výrazem je nejen aritmetický výraz, prostý výskyt konstantní hodnoty, konstanty či proměnné, ale i volání funkce a přiřazení. Jestliže výraz ukončíme symbolem ; (středník), získáme výrazový příkaz. Zkráceně mu budeme i dále říkat příkaz.

5.2. Prázdný příkaz

Časová náročnost
Časová náročnost: 1 minuta

Prázdný příkaz je tvořen samotným středníkem. Dává nám v některých případech možnost, umístit nadbytečný středník ; do zdrojového textu.

5.3. Blok příkazů

Časová náročnost
Časová náročnost: 5 minut

V jazyku C můžeme spojit dva nebo více příkazů dohromady. Nazýváme to blok příkazů, nebo složený příkaz. Pro vytvoření bloku příkazů ohraničte příkazy v bloku otevírací a uzavírací složenou závorkou. Když to uděláte, budou příkazy v bloku představovat jednu logickou jednotku, kterou lze použít všude tam, kde lze použít jeden příkaz.

Blok příkazu si nejlépe ukážeme na často používaném příkazu if.

Jednoduchý příklad
Příklad:

if(výraz)
{
 příkaz1;
 příkaz2;
   .
   .
   .
 příkazN;
}
else
{
 příkaz1;
 příkaz2;
   .
   .
   .
 příkazN;
}

Pokud je výraz vyhodnocen jako pravdivý provedou se všechny příkazy uvedené v bloku za if. Budou prováděny v pořadí v jakém byly zapsány. Je-li výraz nepravdivý provedou se všechny příkazy bloku následující za else.

Blok může obsahovat nejen lokální proměnné, ale obecně v něm mohou být libovolné lokální deklarace a definice. Ovšem pouze na začátku bloku. Jejich platnost je omezena na blok a případné další vnořené bloky. Lokální proměnné v bloku mají paměťovou třídu auto. Vnořený blok nemusí být ukončen středníkem. Je vhodné si uvědomit, že tělo každé funkce je blokem. Proto můžeme v těle funkce main(void) definovat a používat lokální proměnné. Blok tedy může obsahovat žádnou, jednu či více deklarací. Dále blok může obsahovat jednotlivé příkazy.

5.4. Oblast platnosti identifikátorů

Časová náročnost
Časová náročnost: 4 minuty

Důležité Identifikátor, který deklarujeme či definujeme, si ponechává svůj význam (platnost) v programu či bloku, v němž je deklarován či definován. Jeho jméno je v tomto rozsahu viditelné, není-li překryto:

  1. Na úrovni souboru začíná platnost deklarace místem deklarace a končí na konci souboru.
  2. Deklarace na úrovni argumentu funkce má rozsah od místa deklarace argumentu v rámci definice funkce až do ukončení vnějšího bloku definice funkce. Pokud se nejedná o definici funkce, končí rozsah deklarace argumentu s deklarací funkce.
  3. V rámci bloku je deklarace platná do konce bloku.

Jméno makra je platné od jeho definice(direktivou define) až do místa, kdy je definice odstraněna (direktivou undef), pokud vůbec odstraněna je. Jméno makra nemůže být maskováno. To vyplývá z toho, že makra zpracovává preprocesor.

5.5. Příkaz If - else

Časová náročnost
Časová náročnost: 15 minut

Příkaz if-else je jedním z příkazů jazyka C pro větvení programu. Často je také nazýván podmíněný příkaz. Jeho činnost je určena výsledkem testu podmínky, která je vyhodnocena jako pravdivá či nepravdivá.

Syntaxe příkazu if-else je jednoduchá, je však nutné zvýraznit, že výraz (podmínka splnění) musí být uzavřen v kulatých závorkách.

Důležité
if (výraz) příkaz1 else příkaz2
if_else.swf
Flashová animace
Kliknutím na ikonu spustíte test.

Je-li podmínka splněna, tedy výraz dává nenulovou hodnotu, vykoná se příkaz1, pokud podmínka splněna není, tedy výsledkem výrazu je nula, vykoná se příkaz2. Po vykonání jednoho z příkazů pokračuje chod programu za podmíněným příkazem.

Pro názorné pochopení příkazu if-else si ukažme jeho činnost na programu. Naším úkolem bude přečíst znak a pokud to bude velké písmeno vypsat jeho ordinální hodnotu, v opačném případě vypsat hlášení o tom, že nejde o velké písmeno.

src/if_els_1.c
Příklad 5.1.
/******************************
*	if_els_1.c
*	19.03.2002
******************************/

#include <stdio.h>

int main(void)
{
 int c;


 printf("Zadej znak: ");
 c = getchar();  /* nacteni znaku */
 if (c >='A' && c<='Z')
	printf("%d\n",c);   /* vytisteni ordinalni hodnoty */
 else
 	printf("Male pismeno nebo jiny znak\n");	
 return 0;
}

Další příklad požádá o zadání dvou čísel a vytiskne jejich podíl. V případě, že se budeme snažit dělit nulou vytiskne chybové hlášení.

src/if_els_2.c
Příklad 5.2.
/******************************
*	if_els_2.c
*	19.03.2002
******************************/

#include <stdio.h> 

void main(void)
{
  int a, b; 

  printf("Zadejte dve cisla: ");
  scanf("%d%d", &a, &b); 

  if(b) 
    printf("%d\n", a/b);
  else 
    printf("Nelze delit nulou!\n");
}

Další ilustrační jednoduché příkazy použití If-else:

Jednoduchý příklad
Příklad:

if (i > 3)
 j = 5;
 
Jednoduchý příklad
Příklad:

if (i > 3)
 j = 5;
else
 j = 1;
 

Složený příkaz je nutné uzavřít do bloku za pomoci závorek { a }. Tento blok však nesmí být ukončen středníkem ;

Jednoduchý příklad
Příklad:

if (i > 3)
{
 j = 5;
 i = 7;
}  /* zde nesmí být žádný středník */ 
else if (i < 1)
 j = 1;
else
 j = 0; 
 

Samozřejmě že není nutné používat pouze konstrukce If-else. Můžeme použít jak zjednodušenou variantu se syntaxí:

Důležité
if (výraz) příkaz1

případně variantu více rozvitou, se syntaxí:

Důležité
if (výraz1) příkaz1;
 else if (výraz2) příkaz2;
 else if (výraz3) příkaz3;
 ...
 else if (výrazN) příkazN;
 else příkazN+1;

Důležité V programech napsaných v jazyce C se často setkáváme že místo příkazu:

if (vyraz != 0) se píše if (vyraz)

a místo příkazu:

if (vyraz == 0) se píše if (!vyraz)

5.6. Přepínač - switch

Časová náročnost
Časová náročnost: 20 minut

Ikdyž je příkaz if dobrý pro výběr ze dvou možností, stává se těžkopádným, když je potřeba pracovat s několika možnostmi. Jazyk C řeší tento problém příkazem switch. Příkaz switch je příkaz pro vícenásobný výběr. Používá se pro volbu jedné z několika variant a pracuje následovně. Hodnota je postupně testována podle seznamu celočíselných nebo znakových konstant. Když je nalezena shoda, provede se posloupnost příkazů spojená s touto hodnotou.

Obecný tvar příkazu switch je následující:

Důležité
switch (celočíselný výraz)
{
	   case hodnota1: příkaz1;
	   case hodnota2: příkaz2;
	      .              .
	      .              .
	      .              .
	   case hodnotaN: příkazN;
	   default: příkazD;
}
switch.swf
Flashová animace
Kliknutím na ikonu spustíte test.

Nyní si popíšeme jaké konstrukce nám přepínač umožňuje vytvořit. Po klíčovém slově switch následuje v závorkách uzavřený celočíselný výraz. Za ním obecně následuje příkaz. Příkaz přepínače je tvořen blokem, neboť jinak bychom jen těžko mohli hovořit o přepínači mezi více variantami. V bloku jsou jednotlivé příkazy, příkaz1, příkaz2, ..., příkazN a příkazD. V tomtéž bloku mohou být po některé příkazy označeny speciálně umístěnou celočíselnou konstantou - mezi klíčovým slovem case a dvojtečkou.

Posloupnost příkazů pro default se provádí, když není nalezena žádná shoda. Část default je nepovinná. Pokud všechna porovnání selžou a default chybí, neprovede se žádná činnost.

A nyní si pokusíme vysvětlit význam přepínače switch. Během chodu programu je vyhodnocen celočíselný výraz. Podle jeho konkrétní hodnoty, je v bloku přepínače nalezena odpovídající hodnota, hodnota1, hodnota2, .... hodnotaN za kterou se přenese další chod programu. Provede se první příkaz za označeným místem, pak druhý, třetí, ..., dokud se nenarazí na konec bloku přepínače, nebo na zarážku break. Tím je ukončeno vykonávání přepínače a pokračuje se příkazem, který je v programu zapsán za příkazem přepínač.

Nyní, po trošce teorie, si ukážeme použití switch v praxi.

Naším úkolem je napsat program, ve kterém rozpoznáváme stisknuté klávesy 1 - 3 a vytiskneme název zadané klávesy. To znamená že po stisku 2 vypíše program dvě. Pokud zadáme jiné klávesy, než ty které zachytáváme vypíše program hlášení: Jiná klávesa.

src/switch_1.c
Příklad 5.3.
/******************************
*	switch_1.c
*	19.03.2002
******************************/

#include <stdio.h>

int main(void)
{
 int i;
 
 printf("Stiskni klavesu: ");
 scanf("%d",&i);
 switch (i)
 {
 case 1:
	  printf ("Stiskl jsi klavesu 1\n");
	  break;
 case 2:
	  printf ("Stiskl jsi klavesu 2\n");
	  break;
 case 3:
 	  printf ("Stiskl jsi klavesu 3\n");
	  break;	  
 default:
 	  printf ("Jina klavesa\n");
	  break;
 }
 
 return 0;
} 	  

Zamysleme se chvíli na tím, co by se stalo, kdyby v části kde kontrolujeme zda byla stisknuta klávesa 1 nebyl příkaz break. V tom případě by zápis vypadal následovně:

src/switch_2.c
Příklad 5.4.
/******************************
*	switch_2.c
*	19.03.2002
******************************/

#include <stdio.h>

int main(void)
{
 int i;
 
 printf("Stiskni klavesu: ");
 scanf("%d",&i);
 switch (i)
 {
 case 1:
 	  printf ("Stiskl jsi klavesu 1\n");
 case 2:
 	  printf ("Stiskl jsi klavesu 2\n");
	  break;
 case 3:
 	  printf ("Stiskl jsi klavesu 3\n");
	  break;	  
 default:
 	  printf ("Jina klavesa\n");
	  break;
 }
 
 return 0;
} 	  

V tomto případě by při stisku klávesy 1 bylo vytisknuto:

Stiskl jsi klávesu 1
Stiskl jsi klávesu 2

Jak je vidět klíčové slovo break je velice důležité.

Důležité Nyní se podívejme na možné problémy přepínače switch.
  • Program vyhodnotí výraz za switch a jeho hodnotu porovnává s každým z case návěští přepínače. Návěští case může být obsaženo uvnitř jiných příkazů (v rámci přepínače), kromě případného vnořeného přepínače.
  • V jednom přepínači se nesmí používat dvě návěští se stejnou hodnotou.
  • Příkaz break může být v rámci přepínače umístěn v libovolných příkazech, kromě případných vnořených do, for, switch nebo while příkazech. Tyto příkazy mohou break obsahovat. Jeho význam pak ovšem bude spojen s nimi, nikoliv s vnějším příkazem case.
  • Častou chybou je opomenutí case. Samotná konstanta s dvojtečkou je pak chápána jako návěští skoku. Syntakticky o chybu nejde, ale význam je zcela jiný.

Důležité A ještě se podívejme na rozdíly v konstrukcích mezi přepínačem switch a If-else.
  • Rozhodovací výraz if může testovat hodnoty jakéhokoliv typu (záleží jen na výsledném "nula - nenula"), zatímco rozhodovací výraz příkazu switch musí být výhradně celočíselným výrazem a jeho hodnoty se rozlišují podrobněji.
  • V konstrukci if-else-if se provede nejvýše (či podle použití právě) jeden z příkazů. U přepínače se nemusí provést žádný z příkazů v bloku přepínače. Konstantní hodnota po slově case určuje pozici prvního příkazu v bloku přepínače. Pokud chceme, oddělíme následující příkazy příkazem break. Pokud break neuvedeme, provedou se všechny příkazy až do konce bloku přepínače.
  • V přepínači se návěští default může vyskytovat kdekoliv. Odpovídající "default" varianta v konstrukci if-else-if může být umístěna pouze na konci.

5.7. Cykly

Časová náročnost
Časová náročnost: 2 minuty

Cyklus je část programu, která je v závislosti na podmínce prováděna opakovaně. U cyklu obvykle rozlišujeme řídicí podmínku cyklu. Řídicí podmínka cyklu určuje, bude-li provedeno tělo cyklu, či bude-li řízení předáno za příkaz cyklu. Tělo cyklu je příkaz, zpravidla zapsaný v podobě bloku.

Cykly můžeme rozdělit podle toho, provede-li se tělo alespoň jedenkrát, a cykly, kde tělo nemusí být provedeno vůbec. Výběr typu cyklu ponechejme na vhodnosti použití v dané situaci i na zvyklostech programátora.

5.8. Cyklus while

Časová náročnost
Časová náročnost: 15 minut

Podmínka cyklu while se testuje před průchodem cyklu, což znamená, že cyklus tedy vůbec nemusí proběhnout. Programový kód pro výraz musí být uzavřen v kulatých závorkách.

Syntaxe příkazu while je následující:

Důležité
while (výraz) příkaz

Začátečníci se často mylně domnívají, že když se při vykonávání těla cyklu změní hodnoty, na jejichž základě se vyhodnocuje řídcí podmínka cyklu, tedy výraz, projeví se to okamžitě změnou řízení chodu programu. Skutečnost je taková, že se dokončí vykonávání těla cyklu teprve poté je znovu vyhodnocena řídicí podmínka cyklu.

Důležité Do těla cyklu můžeme opět uvádět nepovinné příkazy break a continue. Jejich význam je následující:
  • Příkaz break uvedený v těle cyklu ukončí provádění příkazů těla cyklu a přenese chod programu za probíhající cyklus.
  • Příkaz continue rovněž ukončí provádění příkazů těla cyklu. Řízení ovšem předá na řídicí podmínku cyklu. U cyklu typu while jde o první příkaz za while. Podmínka je vyhodnocena a podle výsledku bude opět vykonáno tělo cyklu, nebo je řízení předáno za cyklus.

Správné pochopení cyklu while si nyní ukážeme na příkladu. V prvním příkladu budeme číst znaky z klávesnice do té doby dokud nestiskneme klávesu 'z' a všechny tisknutelné znaky budeme opět vypisovat na obrazovku.

src/while.c
Příklad 5.5.
/******************************
*	while.c
*	19.03.2002
******************************/

#include <stdio.h>

int main()
{
 int c;

 printf("Zadavejte znaky: ");
 while ((c=getchar()) != 'z')
 {
  if (c >= ' ')	/* tiskneme pouze viditelne znaky */
	putchar(c);
 }
 printf("Nacitani znaku bylo ukonceno\n");
 return 0;
}	

Nyní si ukážeme tentýž příklad pouze s použitím nekonečného cyklu while a s použitím příkazů break a continue.

src/whil_b_c.c
Příklad 5.6.
/******************************
*	whil_b_c.c
*	19.03.2002
******************************/

#include <stdio.h>

int main()
{
 int c;

 printf("Zadavejte znaky: ");
 while (1)           	 /* nekonecna smycka */
 {
  if ((c=getchar()) <= ' ')
	continue;	/* zahazujeme neviditelne znaky */
  if (c == 'z')
	break;      	/* zastaveni po nacteni znaku z */
  putchar(c);		/* tisk znaku */
 }
 printf("Nacitani znaku bylo ukonceno\n");
 return 0;
}
Pozn:
Pozn:
Tělo cyklu while může být také prázdné, například pokud chceme přeskočit všechny oddělovače na vstupu.

5.9. Cyklus for

Časová náročnost
Časová náročnost: 20 minut

Cyklus for se používá pro zadaný počet opakování příkazu nebo bloku příkazu. Má následující syntaxi:

Důležité
for(inicializace; test-podmínky; inkrementace) příkaz;

Část inicializace se používá pro zadání počáteční hodnoty proměnné, která řídí průběh cyklu. Tato hodnota se obvykle označuje jako řídící proměnná cyklu. Část inicializace se provádí pouze jednou před začátkem cyklu. Část test-podmínky testuje řídící proměnnou cyklu na koncovou hodnotu. Je-li test podmínky vyhodnocen jako pravdivý, cyklus se opakuje. Je-li nepravdivý, cyklus se ukončí a zpracování programu pokračuje příkazem následujícím za cyklem. Test podmínky se provádí na začátku cyklu neboli před každým opakováním těla cyklu. Část inkrementace cyklu for se provádí na konci cyklu. To znamená, že část inkrementace se provádí poté, co se provede příkaz nebo blok, který tvoří tělo cyklu. Účelem inkrementace je zvyšovat (nebo snižovat) řídící proměnnou cyklu o určitou hodnotu.

Část inkrementace je nepovinná. Typicky se jedná o přípravu další iterace cyklu. Pokud neuvedeme testovací výraz test-podmínky, použije překladač hodnotu jedna, a tedy bude provádět nekonečný cyklus. Naštěstí můžeme použít příkazy break a continue se stejným významem, jaký jsme popsali u cyklu while.

Jako první jednoduchý příkaz si ukážeme program který vypíše čísla od 1 do 10.

src/for_1.c
Příklad 5.7.
/******************************
*	for_1.c
*	19.03.2002
******************************/

#include <stdio.h>

int main(void)
{
 int i, cislo;
 
 for(i=1; i<=10; i++)
	 printf("%d ",i);

 return 0;
} 	

Program pracuje následovně:

Nejprve se inicializuje řídící proměnná cyklu i na hodnotu 1. Pak se vyhodnotí příkaz i<=10 a jelikož je pravdivý začne běžet cyklus for. Po vytisknutí čísla se i zvětší o 1 a znovu se vyhodnotí test podmínky. Tento proces pokračuje do té doby, dokud není i rovno 11. Když k tomu dojde, cyklus for se zastaví a ukončí.

Důležité Mějme na paměti, že se podmínka cyklu vyhodnocuje na začátku každého opakování. To znamená, že je-li test na začátku cyklu nepravdivý, neprovede se tělo cyklu ani jednou.

Zkusme si další příklad, který vypočítá součet a součin čísel od 1 do 5.

src/for_2.c
Příklad 5.8.
/******************************
*	for_2.c
*	19.03.2002
******************************/

#include <stdio.h>

int main(void)
{
 int i, soucet, soucin;
 soucet=0;
 soucin=1;
 
 for(i=1; i<6;i++)
 {
  soucet = soucet + i;
  soucin = soucin * i; 
 }
 printf("Soucet cisel 1 az 5 je: %d",soucet);
 printf("\nSoucin cisel 1 az 5 je: %d",soucin);
 
 return 0;
} 

Nyní si ukážeme některé další možné použití cyklu for. Navážeme na náš předchozí příklad a opět se budeme snažit tisknout čísla od 1 do 10.

Jednoduchý příklad
Příklad:
  1. Klasické a doporučované použití for
    
    	int i = 0;
    	for (i=0; i<11; i++)
    		printf("%d",i);
    
    
  2. Využití inicializace i při definici - ne příliš vhodné řešení, protože není vše pohromadě
    
    	int i = 0;
    	for ( ; i<11; i++)
    		printf("%d",i);
    
    
  3. Řídící proměnná je měněna v těle cyklu - opět nevhodné řešení
    
    	int i = 0;
    	for ( ; i<11; )
    		printf("%d",i++);
    
    
  4. Využití operátoru čárka - časté, ale opět ne zcela vhodné řešení
    
    	int i = 0;
    	for ( ; i<11; printf("%d",i), i++)
    
    
  5. Využití operátoru čárka při inicializaci (i = 1, sum = 0) je vhodné, ovšem při výpočtu (sum += i, i++) je nevhodné
    
    	int i, sum;
    	for ( i = 1, sum = 0; i<=11; sum +=i, i++)
    		;
    
    
  6. Cyklus for může měnit řídící proměnnou libovolným způsobem
    
    	int i, soucin;
    	for ( i = 3, soucin = 1; i<=10; i+=2)
    		soucin *=i;
    
    

Často se používá i nekonečný cyklus, který má tvar:

Důležité
for ( ; ; ;)

5.10. Cyklus do

Časová náročnost
Časová náročnost: 7 minut

Příkaz do je jediným z cyklů, který zajišťuje alespoň jedno provedení těla cyklu. Jinak řečeno, jeho testovací příkaz příkaz je testován až po průchodu tělem cyklu. Pokud je test, představovaný hodnotou získanou z výrazu splněn, provádí se tělo cyklu, tedy příkaz, který je typicky blokem.

Syntaxe:

Důležité
do 
{
 příkazy;
}while(výraz);

Opět provedeme naše již známé načítání znaků z klávesnice, ovšem tentokrát vytiskneme i koncový znak z.

src/do.c
Příklad 5.9.
/******************************
*	do.c
*	19.03.2002
******************************/

#include <stdio.h>

int main(void)
{
 int c;

 do
 {
  if ((c=getchar()) >= ' ')   /* nacitani znaku */
	putchar(c);   /* tisk znaku */
 } while (c != 'z');

 return 0;
}

Mohlo by se zdát, že cyklus typu do-while je zbytečný. Totéž bychom ovšem mohli tvrdit i o cyklu for. Programátorská teorie totiž ukazuje, že pomocí cyklu typu while jsme schopni naprogramovat jakýkoliv cyklus. Programátorská realita nám ukazuje, že existence tří možných typů cyklů má své opodstatnění - to, co si programátor oblíbí, to rád a správně používá.

5.11. Příkaz goto

Časová náročnost
Časová náročnost: 3 minuty

Jazyk C podporu příkaz nepodmíněného skoku nazvaný goto. Většina programátorů však příkaz goto nepoužívá, protože narušuje strukturu programu a pokud je používán často stává se napsaný kód nepřehledným. Později se může stát, že bude velice těžké pochopit správnou funkci takto napsaného programu.

Příkaz goto může provádět skok v rámci funkce. Nemůže však přeskakovat mezi dvěma funkcemi. Používá se spolu s návěstím.

Syntaxe:

Důležité
návěští: příkaz;

goto návěští;

5.12. Opakování

Shrnutí
Shrnutí

Časová náročnost
Časová náročnost: 1 minuta

Uvědomte si, že:

  • Pro ukončení smyčky se používá break
  • Za každou větví příkazu switch by měl být break - pokud ovšem není mezi větvemi souvislost
  • Vyhýbejte se komplikovaným zápisům a použití příkazu goto

Cvičení
Cvičení

Úkol k textu

Zadání 1)

Je tento úsek programu správný?
if(pocet < 100)
   printf("Cislo je mensi nez 100.\n");
   printf("Jeho druha mocnina je: %d", pocet * pocet);
}
Řešení

Úkol k textu

Zadání 2)

Napište program, který uživatele požádá o zadání celého čísla a pak vypíše zda je číslo liché nebo sudé. (Rada: použijte operátor modulo %).
Řešení

Úkol k textu

Zadání 3)

Napište program, který si vyžádá dvě celá čísla a pak zobrazí podle volby uživatele buď součin nebo součet.
Řešení

Úkol k textu

Zadání 4)

Co je špatně na této části programu?
float f;

scanf("%f",&f);

switch(f):
{
 case 10.05:
 .
 .
 .
}
Řešení

Úkol k textu

Zadání 5)

Napište program, který načte zadaný znak a rozhodne zda je souhláska či samohláska.
Řešení

Úkol k textu

Zadání 6)

Napište program, který vytiskne čísla mezi 17 a 100, která budou beze zbytku dělitelná 17.
Řešení

Úkol k textu

Zadání 7)

Napište program, který převádí galony na litry. Použijte cyklus do, aby mohl uživatel převody opakovat. (Jeden galon je asi 3,7854 litrů).
Řešení
test5.swf
Test
Kliknutím na ikonu spustíte test.