Řídící struktury programu

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
m (Cyklus for each: Odkaz na Java_Kontejnery)
m (Změna struktury nadpisů.)
 
(Nejsou zobrazeny 4 mezilehlé verze od 1 uživatele.)
Řádka 2: Řádka 2:
  
  
== Řídící struktury programovacích jazyků Java a PHP ==
+
Procesor počítačů [[Von Neumannova architektura|von Neumannova typu]] provádí instrukce v takovém pořadí, v jakém jsou uloženy v operační paměti. Pokud chceme toto chování změnit, musíme použít speciální instrukci skoku.
  
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.
+
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>)
+
* cyklus <code>for</code>
+
* cyklus <code>while</code>
+
* cyklus <code>do-while</code>
+
* + větvení (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ětvení ==
 +
* Podle splnění podmínky pokračuje kód jednou z několika větví.
  
 +
* Podmíněný příkaz (<code>if-elseif-else</code>)
  
 
+
  if (hero.lives <= 0) {
 
+
    window.alert("Game over!")
== 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>
+
 +
* Příkaz <code>switch</code>
  
<pre>
+
  switch(varianta) {
  if ($hotovost > $cena) {
+
    case 1: return "Varianta A";
    $hotovost -= $cena;
+
    case 2: return "Varianta B";
} else {
+
    case 3: return "Varianta C";
    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.");
 
}
 
 
 
 
 
 
== 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> ==
 
 
 
 
== 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''.
 
 
  
 +
* Více viz [[Větvení]].
  
  
== Zdroje: ==
+
== Cykly ==
# The Java Tutorials [online]. 1995, 2011 [cit. 2011-06-07]. ''Control Flow Statements''.  
+
* Zadaný kód se opakuje, dokud je splněna podmínka.
#: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;].
+
* Cyklus <code>for</code>
# ARCANIS. Výuka PHP a MySQL [online]. Třeboň : 2008 [cit. 2011-06-07]. ''Řídící struktury''.
+
* Cyklus <code>for each</code>
#: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;.
+
* Cyklus <code>while</code>
# ARCANIS. Výuka PHP a MySQL [online]. Třeboň : 2008 [cit. 2011-06-07]. ''Cykly''.
+
* Cyklus <code>do-while</code>
#: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:
+
* Více viz [[Cykly]].
* [[Programovací_jazyky]]
+
* [[Java:_Kontejnery#Proch.C3.A1zen.C3.AD_kontejneru]]
+

Aktuální verze z 9. 9. 2016, 12:03


Procesor počítačů von Neumannova typu provádí instrukce v takovém pořadí, v jakém jsou uloženy v operační paměti. 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ětvení

if (hero.lives <= 0) {
   window.alert("Game over!")
}

switch(varianta) {
   case 1: return "Varianta A";
   case 2: return "Varianta B";
   case 3: return "Varianta C";
}


Cykly

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