Větvení

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(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říklad Java ===
+
=== 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 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 ];


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! ;)
  1. Přečtěte si následující kód. Zkuste uhodnout, co bude vypisovat.
  2. Vyzkoušejte prakticky. Uhodli jste účel? Funguje správně?
  3. 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í

if (PODMÍNKA) PŘÍKAZ
else if (PODMÍNKA) PŘÍKAZ
...
else if (PODMÍNKA) PŘÍKAZ
else PŘÍKAZ

PŘÍKAZ:

  1. { posloupnost příkazů }
  2. jeden příkaz ;

PODMÍNKA


Příklady Java

Převod číselných hodnot na odpovídající objekty.
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
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


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:

  1. The Java Tutorials [online]. 1995, 2011 [cit. 2011-06-07]. Control Flow Statements.
    Dostupné z WWW: <http://download.oracle.com/javase/tutorial/java/nutsandbolts/flow.html>.
  2. 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>.
  3. 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>.


Související stránky

Osobní nástroje
Jmenné prostory
Varianty
Akce
Výuka
Navigace
Nástroje