===== Větvení do více větví ===== Příkaz **switch** umožňuje větvit program na základě nějakého selektoru. Selektorje proměnná nebo výraz datového typu celé číslo, znak nebo výčet. ===== Syntaxe příkazu switch ===== switch (selektor) { case hodnota1 : prikaz1;break; case hodnota2 : prikaz2;break; ... case hodnotan : prikazn;break; default: prikazD;break; } ==== Poznámky ==== * selektor větvení je proměnná nebo výraz ordinálního datového typu (v některých jazycí může být typu string) * jednotlivé větve pro hodnoty výrazu jsou definovány pomocí klíčového slova **case**. * hodnoty v jednotlivých větvích jsou stejného datového typu jako je selektor větvení * jedna hodnota nemůže být ve dvou větvích * část default je nepovinná a je provedena pouze, pokud selektor větvení nenabývá žádné z hodnot větví case * tělo příkazu switch začíná a končí složenými závarkami * příkaz **break** definitivně ukončí provádění příkazu switch * příkaz goto umožňuje skok na jiný blok case uvnitř příkazu switch * pokud chci provést určitý příkaz pro více hodnot, využiju tzv. propadávání (nenapíši **break**) ===== Průběh rozhodovacího příkazu ===== - **vyhodnocení selektoru** ** porovnání hodnoty selektoru s hodnotou1 - selektor se rovná hodnotě1 **vykonání druhé skupiny příkazů za else** **pokud je uvedeno break, příkaz končí jinak dojde k vykonávání dalších příkazů v dalších větvích - selektor se nerovná hodnotě1 ** porovnání hodnoty selektoru s hodnotou2 *... ==== Selektor větvení je celočíselný ==== int znamka = 2; switch (znamka) //selektor větvení { case 1: printf("Vyborny\n"); break; case 2: printf("Chvalitebny\n"); break; case 3: printf("Dobry\n"); break; case 4: printf("Dostatcny\n"); break; case 5: printf("Nedostatcny\n"); break; default: printf("Chybny vstup!\n"); break; } ==== Selektor větvení je znak ==== char rimska = 'D'; int arabsky; switch (rimska) //selektor větvení { case 'I': arabsky = 1; break; case 'V': arabsky = 5; break; case 'X': arabsky = 10; break; case 'L': arabsky = 50; break; case 'C': arabsky = 100; break; case 'D': arabsky = 500; break; case 'M': arabsky = 1000; break; default: printf("Neznama cislice\n"); arabsky = 0; break; } printf("Rimska cislice %c je %i\n", rimska, arabsky); ==== Selektor větvení je typu výčet ==== enum tyden { pondeli, utery, streda, ctvrtek, patek, sobota, nedele }; enum tyden dnes = streda; switch (dnes) //selektor větvení { case pondeli: case patek: case utery:printf("13 - 18");break; case streda:printf("12 - 20");break; case ctvrtek:printf("8 - 12");break; case sobota: case nedele:printf("zavreno");break; }