Větvení
Z MiS
				
				
				(Rozdíly mezi verzemi)
				
																
				
				
								
				|  (→Související stránky:  Odstraněno Procházení kontejneru z odkazů na související stránky.) | m (Přidán úkol pro zvídavé...) | ||
| (Není zobrazena 1 mezilehlá verze od 1 uživatele.) | |||
| Řádka 17: | Řádka 17: | ||
| − | === Syntaxe | + | === Syntaxe === | 
|   if (PODMÍNKA) PŘÍKAZ [ else PŘÍKAZ ]; |   if (PODMÍNKA) PŘÍKAZ [ else PŘÍKAZ ]; | ||
| Řádka 60: | Řádka 60: | ||
|   } |   } | ||
| + | |||
| + | === Úkoly === | ||
| + | |||
| + | ; Pro zvídavé — Malý bug pro programátora, ale fatální chyba pro program! ;) | ||
| + | # Přečtěte si následující kód. Zkuste uhodnout, co bude vypisovat. | ||
| + | # Vyzkoušejte prakticky. Uhodli jste účel? Funguje správně? | ||
| + | # Najděte a opravte chybu! ;) | ||
| + | |||
| + |  public class Pocitadlo { | ||
| + |      int citac = 1; | ||
| + |      public int dalsi() { | ||
| + |           this.citac++; | ||
| + |           if (this.citac > 5); | ||
| + |           { | ||
| + |               this.citac = 1; | ||
| + |           } | ||
| + |           return this.citac; | ||
| + |      } | ||
| + |      public static void main(String[] args) { | ||
| + |          Pocitadlo p = new Pocitadlo(); | ||
| + |          while (true) { | ||
| + |              System.out.println(p.dalsi()); | ||
| + |          } | ||
| + |      } | ||
| + |  } | ||
| Řádka 79: | Řádka 104: | ||
| − | ===  | + | === Příklady Java === | 
| + | |||
| + | ; Převod číselných hodnot na odpovídající objekty. | ||
| + | * Máme zadáno číslo dne v týdnu jako číslo. | ||
| + | * Potřebujeme vyrobit odpovídající instanci potomka třídy <code>DenTydne</code>. Máme připraveny potomky <code>Nedele</code>, <code>Pondeli</code>,..., <code>Sobota</code>. | ||
| + | |||
|   int denTydne; |   int denTydne; | ||
|   ... |   ... | ||
| Řádka 93: | Řádka 123: | ||
|   else if (denTydne == 5) vysledek = new Patek(); |   else if (denTydne == 5) vysledek = new Patek(); | ||
|   else vysledek = new Sobota(); |   else vysledek = new Sobota(); | ||
| + | |||
| + | ; Spočítejte prvky v kategoriích | ||
| + | * Máme kontejner instancí třídy <code>Osoba</code>. | ||
| + | * <code>Osoba</code> má metodu <code>getVyska()</code>, která vrací výšku osoby v cm. | ||
| + | * Spočítejte, kolik osob v kontejneru má výšku pod 170 cm, kolik 170-190 cm a kolik přes 190 cm. | ||
| + | |||
| + |  ArrayList<Osoba> osoby = new ArrayList<>(); | ||
| + |  ... | ||
| + |  int velci = 0, normalni = 0, mali = 0; | ||
| + |  for (Osoba osoba : osoby) { | ||
| + |      int vyska = osoba.getVyska(); | ||
| + |      if (vyska < 170) { | ||
| + |          mali++; | ||
| + |      } else if (vyska <= 190) { | ||
| + |          normalni++; | ||
| + |      } else { | ||
| + |          velci++; | ||
| + |      } | ||
| + |  } | ||
| === Úkol === | === Úkol === | ||
Aktuální verze z 5. 1. 2017, 11:21
Počítače von Neumannova typu provádí instrukce v takovém pořadí, v jakém jsou v operační paměti uloženy. Občas ale potřebujeme vykonat příkaz pouze tehdy, kdy je splněna nějaká podmínka. K tomu slouží podmíněný příkaz.
Příkazy větvení:
-  podmíněný příkaz (if-elseif-else)
-  příkaz switch
Podmíněný příkaz je jednou z řídících struktur programu.
Jsme si vědomi, že následující text je zjednodušený pro úroveň začátečníků v programování!
| Obsah | 
Podmíněný příkaz
Syntaxe
if (PODMÍNKA) PŘÍKAZ [ else PŘÍKAZ ];
-  PODMÍNKA:
- výraz, který vrací pravdivostní hodnotu (pravda nebo nepravda)
- více o zápisu podmínek je v kapitole Podmíněný výraz.
 
-  PŘÍKAZ:
- obvykle se jedná o 'složený příkaz', tedy o posloupnost příkazů, ohraničenou složenými závorkami.
 
-  větev else:- tento příkaz se provede, pokud podmínka není splněná.
- tato část příkazu ale nemusí být vůbec uvedena.
 
Příklady PHP
 if ($vek < 15) {
     echo "POZOR! Přístupné až od 15 let!";
 }
 if ($hotovost > $cena) {
     $hotovost -= $cena;
 } else {
     die("Nákup nelze provést! Nemáme dostatek peněz.");
 }
Příklady Java
if (vek < 15) {
    System.out.println("POZOR! Přístupné až od 15 let!");
}
if (zakaznik.getHotovost() > cena) {
    zakaznik.zaplat(cena);
} else {
    System.err.println("Nákup nelze provést! Nemáme dostatek peněz.");
}
Úkoly
- Pro zvídavé — Malý bug pro programátora, ale fatální chyba pro program! ;)
- Přečtěte si následující kód. Zkuste uhodnout, co bude vypisovat.
- Vyzkoušejte prakticky. Uhodli jste účel? Funguje správně?
- Najděte a opravte chybu! ;)
public class Pocitadlo {
    int citac = 1;
    public int dalsi() {
         this.citac++;
         if (this.citac > 5);
         {
             this.citac = 1;
         }
         return this.citac;
    }
    public static void main(String[] args) {
        Pocitadlo p = new Pocitadlo();
        while (true) {
            System.out.println(p.dalsi());
        }
    }
}
Vícenásobné větvení
-  Můžeme opakovaně použít konstrukci else if:
if (PODMÍNKA) PŘÍKAZ else if (PODMÍNKA) PŘÍKAZ ... else if (PODMÍNKA) PŘÍKAZ else PŘÍKAZ
PŘÍKAZ:
-  { posloupnost příkazů }
-  jeden příkaz ;
PODMÍNKA
- Zápis podmínek viz Podmíněný výraz.
Příklady Java
- Převod číselných hodnot na odpovídající objekty.
- Máme zadáno číslo dne v týdnu jako číslo.
-  Potřebujeme vyrobit odpovídající instanci potomka třídy DenTydne. Máme připraveny potomkyNedele,Pondeli,...,Sobota.
int denTydne; ... DenTydne vysledek = null; /* Třída DenTydne je společným předkem tříd * Pondeli, Utery, Streda, Ctvrtek, Patek a Sobota. */ if (denTydne == 0) vysledek = new Nedele(); else if (denTydne == 1) vysledek = new Pondeli(); else if (denTydne == 2) vysledek = new Utery(); else if (denTydne == 3) vysledek = new Streda(); else if (denTydne == 4) vysledek = new Ctvrtek(); else if (denTydne == 5) vysledek = new Patek(); else vysledek = new Sobota();
- Spočítejte prvky v kategoriích
-  Máme kontejner instancí třídy Osoba.
-  Osobamá metodugetVyska(), která vrací výšku osoby v cm.
- Spočítejte, kolik osob v kontejneru má výšku pod 170 cm, kolik 170-190 cm a kolik přes 190 cm.
ArrayList<Osoba> osoby = new ArrayList<>();
...
int velci = 0, normalni = 0, mali = 0;
for (Osoba osoba : osoby) {
    int vyska = osoba.getVyska();
    if (vyska < 170) {
        mali++;
    } else if (vyska <= 190) {
        normalni++;
    } else {
        velci++;
    }
}
Úkol
- Dostanete pořadové číslo měsíce.
-  Vypište na obrazovku text: Dnes je jaro|léto|podzim|zima.
- Předpokládejte, že zimní měsíce jsou leden, únor a březen, jarní měsíce duben, květen a červen atd.
  Příkaz switch 
Syntaxe
switch (proměnná) {
	case hodnota1: příkaz; break;
	case hodnota2: příkaz; break;
	default: příkaz
}
Příklad Java
int denTydne;
...
DenTydne vysledek = null;
/* Třída DenTydne je společným předkem tříd
 *  Pondeli, Utery, Streda, Ctvrtek, Patek a Sobota.
 */
switch (denTydne) {
	case 0: vysledek = new Nedele(); 	break;
	case 1: vysledek = new Pondeli(); 	break;
	case 2: vysledek = new Utery(); 	break;
	...
	case 5: vysledek = new Patek(); 	break;
	default: vysledek = new Sobota();
}
Úkol
Máte číslo stav faktury. Faktura může být: 1... vystavená (poslali jsme, zatím nepřišla platba) 2... zaplacená (platba přišla, odeslali jsme zboží) 3... vyřešená (zákazník převzal zboží) Vypište podle stavu faktury text: "Faktura je vystavená|zaplacená|vyřešená!"
Zdroje:
- The Java Tutorials [online]. 1995, 2011 [cit. 2011-06-07]. Control Flow Statements.
-  ARCANIS. Výuka PHP a MySQL [online]. Třeboň : 2008 [cit. 2011-06-07]. Řídící struktury. 
- Dostupné z WWW: <http://arcanis.argon.cz/docs/seminarka1/index.php?incl=lekce_5>.
 
-  ARCANIS. Výuka PHP a MySQL [online]. Třeboň : 2008 [cit. 2011-06-07]. Cykly. 
- Dostupné z WWW: <http://arcanis.argon.cz/docs/seminarka1/index.php?incl=lekce_6>.
 
