Řídící struktury programu

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(Příkaz switch: Doplněn text a příklad.)
(Rozděleno na větvení a cykly, ponecháno jako rozcestník.)
Řádka 6: Řádka 6:
 
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. Pokud chceme toto chování změnit, musíme použít speciální instrukci skoku. Ve [[Programovací_jazyky | vyšších programovacích jazycích]] se používají pro přehlednější zápis ustálené řídící struktury.
 
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. Pokud chceme toto chování změnit, musíme použít speciální instrukci skoku. Ve [[Programovací_jazyky | vyšších programovacích jazycích]] se používají pro přehlednější zápis ustálené řídící struktury.
  
Řídící struktury vyšších programovacích jazyků:
+
Běžné řídící struktury vyšších programovacích jazyků jsou:
* podmíněný příkaz (<code>if</code>)
+
* podmíněný příkaz (<code>if-elseif-else</code>)
 
* cyklus <code>for</code>
 
* cyklus <code>for</code>
 +
* cyklus <code>for each</code>
 
* cyklus <code>while</code>
 
* cyklus <code>while</code>
 
* cyklus <code>do-while</code>
 
* cyklus <code>do-while</code>
* + větvení (příkaz <code>switch</code>)
+
* příkaz <code>switch</code>
  
Dále uvádíme základní popis použití nejběžnějších řídících struktur. Jsme si vědomi, že '''následující text je velmi zjednodušený!'''
 
  
 
+
== Více o řídících strukturách ==
 
+
* [[Větvení]]
 
+
* [[Cykly]]
== Podmíněný příkaz ==
+
 
+
=== Zápis: ===
+
 
+
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 <code>else</code>:
+
*: 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 ===
+
 
+
<pre>
+
if ($vek < 15) {
+
    echo "POZOR! Přístupné až od 15 let!";
+
}
+
</pre>
+
 
+
<pre>
+
if ($hotovost > $cena) {
+
    $hotovost -= $cena;
+
} else {
+
    die("Nákup nelze provést! Nemáme dostatek peněz.");
+
}
+
</pre>
+
 
+
=== 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.");
+
}
+
 
+
=== Vícenásobné větvení ===
+
* Můžeme opakovaně použít konstrukci <code>else if</code>:
+
 
+
if (''PODMÍNKA'') ''PŘÍKAZ''
+
else if (''PODMÍNKA'') ''PŘÍKAZ''
+
...
+
else if (''PODMÍNKA'') ''PŘÍKAZ''
+
else ''PŘÍKAZ''
+
 
+
''PŘÍKAZ'':
+
# <code>{ ''posloupnost příkazů'' }</code>
+
# <code>''jeden příkaz'' ;</code>
+
 
+
''PODMÍNKA''
+
* Zápis podmínek viz [[Podmíněný výraz]].
+
 
+
; 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.
+
  */
+
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();
+
 
+
; Úkol
+
* Dostanete pořadové číslo měsíce.
+
* Vypište na obrazovku text: <code>Dnes je jaro|léto|podzim|zima.</code>
+
* Předpokládejte, že zimní měsíce jsou leden, únor a březen, jarní měsíce duben, květen a červen atd.
+
 
+
== Cyklus <code>for</code> ==
+
 
+
=== Zápis: ===
+
 
+
for (INICIALIZACE; PODMÍNKA; ÚPRAVA_ČÍTAČE) PŘÍKAZ;
+
 
+
Cyklus <code>for</code> je v PHP a Javě hodně obecný, obvykle se ale používá tak, že definujeme řídící proměnnou (třeba <code>i</code>), která postupně nabývá hodnot od 0 do maximální hodnoty. Pro každou hodnotu řídící proměnné pak provádíme příkaz, který obvykle tuto hodnotu nějak využívá.
+
 
+
Řídící proměnné se někdy také říká „čítač“.
+
 
+
* INICIALIZACE_ČÍTAČE:
+
*: příkaz, který se provede na začátku, před prováděním cyklu.
+
*: obvykle nastaví počáteční hodnotu řídící proměnné cyklu.
+
* ÚPRAVA_ČÍTAČE:
+
*: příkaz, který se provede po každém provedení PŘÍKAZU. Obvykle zvýší či sníží hodnotu řídící proměnné.
+
* 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.
+
 
+
=== Příklady PHP ===
+
 
+
<pre>
+
for ($i = 0; $i < 15; $i++) {
+
    echo "<p>Průchod číslo $i.</p>";
+
}
+
</pre>
+
 
+
Tento příklad vlastně provede následující kód:
+
 
+
<pre>
+
$i = 0;
+
echo "<p>Průchod číslo $i.</p>"; // $i == 0
+
$i++;
+
echo "<p>Průchod číslo $i.</p>"; // $i == 1
+
$i++;
+
.
+
:
+
:
+
echo "<p>Průchod číslo $i.</p>"; // $i == 13
+
$i++;
+
echo "<p>Průchod číslo $i.</p>"; // $i == 14
+
$i++;
+
</pre>
+
 
+
Dále už je hodnota <code>$i == 15</code>, takže není splněna podmínka <code>$i < 15</code> a tedy se provádění cyklu ukončí.
+
 
+
 
+
=== Příklady Java ===
+
 
+
for (int i = 0; i < 15; i++) {
+
    System.out.println("Průchod číslo "+i+".");
+
}
+
 
+
 
+
 
+
 
+
== Cyklus <code>for each</code> ==
+
* Pro průchod přes všechny prvky [[Java:_Kontejnery|kontejneru]] je lépe využít cyklus <code>for each</code>.
+
* Více viz: [[Java:_Kontejnery#Proch.C3.A1zen.C3.AD_kontejneru| Java: Kontejnery]].
+
 
+
== Cyklus <code>while</code> ==
+
 
+
=== Zápis: ===
+
 
+
while (PODMÍNKA) PŘÍKAZ;
+
 
+
Cyklus <code>while</code> provádí zadaný PŘÍKAZ tak dlouho, dokud je splněna PODMÍNKA.
+
 
+
* 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.
+
 
+
Pozn.: Cyklus <code>for</code> jazyků Java a PHP lze přepsat pomocí cyklu <code>while</code> následujícím způsobem:
+
 
+
INICIALIZACE;
+
while (PODMÍNKA) {
+
    PŘÍKAZ;
+
    ÚPRAVA_ČÍTAČE;
+
}
+
 
+
=== Příklady PHP ===
+
 
+
<pre>
+
$i = 0;
+
while ($i < 15) {
+
    echo "<p>Průchod číslo $i.</p>";
+
    $i++;
+
}
+
</pre>
+
 
+
Tento příklad vlastně provede následující kód:
+
 
+
<pre>
+
$i = 0;
+
echo "<p>Průchod číslo $i.</p>"; // $i == 0
+
$i++;
+
echo "<p>Průchod číslo $i.</p>"; // $i == 1
+
$i++;
+
.
+
:
+
:
+
echo "<p>Průchod číslo $i.</p>"; // $i == 13
+
$i++;
+
echo "<p>Průchod číslo $i.</p>"; // $i == 14
+
$i++;
+
</pre>
+
 
+
Dále už je hodnota <code>$i == 15</code>, takže není splněna podmínka <code>$i < 15</code> a tedy se provádění cyklu ukončí.
+
 
+
=== Příklady Java ===
+
 
+
int i = 0;
+
while (i < 15) {
+
    System.out.println("Průchod číslo "+i+".");
+
    i++;
+
}
+
 
+
 
+
 
+
== Cyklus <code>do while</code> ==
+
 
+
 
+
 
+
 
+
== Příkaz <code>switch</code> ==
+
switch (''proměnná'') {
+
case ''hodnota1'': ''příkaz''; break;
+
case ''hodnota2'': ''příkaz''; break;
+
default: ''příkaz''
+
}
+
 
+
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á!"
+
 
+
== Cvičení ==
+
 
+
=== 1. Hodnoty funkce ===
+
* Vstup: čísla ''A'', ''B'' a ''K''.
+
* Berte hodnoty funkce ''y = 1/2 x^2 - 5'' v rozsahu hodnot ''x'' z intervalu <''A'';''B''> s krokem ''K''.
+
* Vypište hodnoty ''x'', ve kterých je hodnota ''y'' v intervalu <-2;2>.
+
 
+
=== 2. Průchod pole ===
+
* Vstup: číslo ''K'' a pole kladných čísel ''P''.
+
* Projděte hodnoty čísel v poli ''P''.
+
* Pokud je hodnota dělitelná číslem ''K'', zapište na odpovídající pozici v poli ''P'' číslo ''-1''.
+
 
+
 
+
 
+
 
+
== Zdroje: ==
+
# 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 &lt;http://download.oracle.com/javase/tutorial/java/nutsandbolts/flow.html&gt;].
+
# ARCANIS. Výuka PHP a MySQL [online]. Třeboň : 2008 [cit. 2011-06-07]. ''Řídící struktury''.
+
#:Dostupné z WWW: &lt;[http://arcanis.argon.cz/docs/seminarka1/index.php?incl=lekce_5 http://arcanis.argon.cz/docs/seminarka1/index.php?incl=lekce_5]&gt;.
+
# ARCANIS. Výuka PHP a MySQL [online]. Třeboň : 2008 [cit. 2011-06-07]. ''Cykly''.
+
#:Dostupné z WWW: &lt;[http://arcanis.argon.cz/docs/seminarka1/index.php?incl=lekce_6 http://arcanis.argon.cz/docs/seminarka1/index.php?incl=lekce_6]&gt;.
+
 
+
; Související stránky:
+
* [[Programovací_jazyky]]
+
* [[Java:_Kontejnery#Proch.C3.A1zen.C3.AD_kontejneru]]
+

Verze z 7. 6. 2016, 09:34


Řídící struktury programovacích jazyků Java a PHP

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. Pokud chceme toto chování změnit, musíme použít speciální instrukci skoku. Ve vyšších programovacích jazycích se používají pro přehlednější zápis ustálené řídící struktury.

Běžné řídící struktury vyšších programovacích jazyků jsou:


Více o řídících strukturách

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