2. Cyklus s podmínkou na začátku

Cyklus s podmínkou na začátku je prvním typem podmíněného cyklu, jehož tělo cyklu je prováděno do té doby, dokud je splněna podmínka, tzn. větev True za rozhodovacím blokem ve vývojovém diagramu – viz Obrázek 1. Pokud nastane situace, že podmínka není splněna, tělo uvnitř smyčky cyklu již není nadále prováděno. Opuštění cyklu symbolizuje větev False, kdy podmínka není splněna. Je vhodné podotknout, že tělo uvnitř cyklu nemusí být provedeno ani jednou, pokud by hned v počátku při průchodu podmínkou nastala situace, že podmínka není splněna.

Značka cyklu s podmínkou na začátku – vývojový diagram

Obrázek 1: Značka cyklu s podmínkou na začátku – vývojový diagram

Obecná syntaxe cyklu s podmínkou na začátku v jazyce C#:

while (řídícíPodmínka) těloCyklu

kde:

  • řídícíPodmínka - logický výraz, který je vyhodnocen. řídícíPodmínka musí být zapsána do kulatých závorek a musí být logického typu
  • těloCyklu - příkaz (nebo složený příkaz uzavřený do složených závorek), který je proveden pokud platí, že výsledek výrazu v řídící podmínce je true. Proces provádění těla cyklu se opakuje, pokud je splněna řídícíPodmínka

Velmi často se jako identifikátor řídící proměnné používá písmeno i. Cykly lze také zapouzdřovat do sebe, tak jak tomu bylo např. u rozhodování. Pak se jako identifikátory těchto řídících proměnných vnořených cyklů používají další písmena pokračující v abecedě za písmenem i, tedy j, k, l atd. My tento zvyk v následujících příkladech algoritmů porušíme. Jedná se nám zejména o zachycení podstaty proměnné pomocí jejího názvu.


Opakování je matka moudrosti, proto se vraťme zpět k modifikované verzi příkladu Kalkulacka, tentokráte však použijeme při aritmetické operaci dělení reálná čísla. 


Ilustrativní příklad VydelParametry

Algoritmus VydelParametry
Program VydelParametry
  • Popis: Deklarace metody s návratem s použitím cyklu s podmínkou na začátku
  • Zadání: Vymyslete, jak byste na základě předchozích algoritmů podprogramů ZadejKodOperace a ZadejCislo v C# naprogramovali obě statické metody (s identickým názvem) jako konzolovou aplikaci
  • Řešení: Bude postupně probráno v následujícím textu

V následujícím zdrojovém kódu je implementována metoda s návratem VydelParametry, která zajišťuje zadání nenulového jmenovatele – viz Kód 1. Validace na nenulový jmenovatel je realizováno pomocí cyklu s podmínkou na začátku pomocí logického výrazu (podmínky) bb == 0. V těle cyklu je prováděno načtení hodnoty reálného čísla pomocí metody s návratem s názvem ZadejCislo – viz Kód 2. Toto zadávání reálného čísla se bude provádět do té doby, dokud platí řídící podmínka uvedená v kulatých závorkách za příkazem while, tj. pokud uživatel zadá nulové reálné číslo.

//Metoda s návratem - navrací hodnotu podílu dvou reálných předaných hodnot
public static double VydelParametry(double aa, double bb)
{
    /* Deklarace lokální proměnné 'cc' ... slouží pro uložení hodnoty podílu načtených hodnot 
     * předaných z hlavního programu uložených do formálních parametrů 'aa' a 'bb' */
    double cc;
    // Test, zda nebyl načten nulový jmenovatel
    while (bb == 0)
    {
        // Pokud je jmenovatel nulový následuje zadání nového jmenovatele
        bb = ZadejCislo("nenulové B");
    }
    // Provedení podílu hodnot uložených v formálních parametrech funkce a uložení do lokální proměnné 'cc'
    cc = aa / bb;
    // Hodnota v 'cc' je výstupem metody
    return cc;
}

Kód 1: Deklarace metody VydelParametry - příklad cyklu s podmínkou na začátku 

Následující kód obsahuje deklaraci metody s návratem pro zadání nového reálná čísla, které představuje jmenovatele v podílu - viz Kód 2.

//Metoda s návratem - navrací zadané reálné číslo
public static double ZadejCislo(string nazevParametru)
{
    //Deklarace lokální proměnné 'cc' ... výstupní reálné číslo 
    double xx;
    // Výpis definovaného textu spolu s textem uloženým v 'NazevParametru'
    Console.WriteLine("Zadejte " + nazevParametru + ":");
    // Načtení textu a konverze na reálnou hodnotu a uložení do proměnné 'xx'
    xx = double.Parse(Console.ReadLine());
    // Přiřazení hodnoty v 'xx' do výstupu metody
    return xx;
}

Kód 2: Deklarace metody ZadejCislo