Výpis řady čísel
| Stránky: | Moodle ZČU |
| Kurz: | KPV/TI Technická informatika ve strojírenství - cvičení |
| Kniha: | Výpis řady čísel |
| Vytiskl(a): | Nepřihlášený host |
| Datum: | neděle, 8. listopadu 2026, 21.46 |
1. VypisRady
Vytvořte aplikaci pro výpis řady čísel pomocí jednotlivých podprogramů:
- Cyklus s pevným krokem - čísla od 1 do 10
- Cyklus s podmínkou na začátku - čísla od 11 do 20
- Cyklus s podmínkou na konci - čísla od 21 do 30
- Bez cyklu - čísla od 31 do 40
Cykly (iterace) se používají pro opakování podobné činnosti.
Účel příkladu
- Cyklus s podmínkou na začátku
- Cyklus s podmínkou na konci
- Cyklus s pevným krokem
Typ aplikace
- Konzolová aplikace
Popis úkolu
- Výpis řady čísel
Funkčnosti
- Podprogramy vypíší číselné řady uvnitř těla podprogramu:
- CyklusFor - cyklus s krokem vypíše čísla od 1 do 10
- CyklusWhile - cyklus s podmínkou na začátku vypíše čísla od 11 do 20
- CykusDoWhile - cyklus s podmínkou na konci vypíše čísla od 21 do 30
- BezCyklu - bude proveden výpis čísel od 31 do 40 bez využití cyklu
- Jednotlivé sekce výpisů čísel od sebe oddělte výpisem s informací, který typ cyklu je pro výpis využit
- Po výpisu všech čísel bude aplikace ukončena po stisku klávesy
Výstup programu

Výstup programu: Ukázka výpisu číselných řad v hlavní metodě programu VypisRady
1.1. Analýza a návrh řešení
Příklad jednoduchým způsobem využívá podprogramy (ve formě procedur) pro výpis řady čísel, jejichž těla obsahují cykly různého typu - viz Obrázek 1. V hlavním programu je také na konci spuštěn podprogram, který nevyužívá žádného cyklu. Pro oddělení číselných řad jsou použity výpisy s informací, který typ cyklu je použit při tvorbě číselné řady.
Obrázek 1: Hlavní program VypisRady pro výpis číselných řad pomocí cyklů
Pomocí cyklů jsou jednotlivá čísla (uložená v řídící proměnné cyklu i, tzv. čítače) konvertována na číslice (pomocí příkazu ToString) a umísťována do lokální textové proměnné rada, která je před prováděním cyklu inicializována prázdným textovým řetězcem. Poněvadž je vhodné jednotlivá čísla od sebe oddělit čárkou, je v cyklech umístěna podmínka, která porovnává, zda se jedná již o druhé číslo v číselné řadě (první číslo v řadě již bylo vypsáno). Pokud ano, je do textového řetězce za číslici připojena čárka, která slouží pro vizuální oddělení dalšího vypsaného čísla. Textová proměnná rada je na konci těla podprogramu vypsána.
U prvního typu cyklu s krokem v podprogramu CyklusFor je řídící proměnná cyklu inicializována uvnitř bloku cyklu. V tomto bloku je také definována konečná hodnota (horní mez) této proměnné. U cyklu s krokem je automaticky po každé iteraci (jedna smyčka cyklu) zvýšena hodnota čítače - viz Obrázek 2. Cyklus s krokem probíhá tak dlouho, dokud je řídící proměnná menší, nebo rovna konečné hodnotě, tj. větev Next. Pokud hodnota řídící proměnné překročila konečnou hodnotu, řízení programu je přepnuto do větve Done.
Obrázek 2: Podprogram CyklusFor - výpis řady čísel pomocí cyklu s krokem
U podprogramu CyklusWhile je použit cyklus s podmínkou na začátku. Před provedením cyklu je zapotřebí inicializovat jak textovou lokální proměnnou, tak i řídící proměnnou cyklu pomocí počáteční hodnoty. Na rozdíl od cyklu s krokem musíme hodnotu čítače v každé iteraci zvedat- inkrementace - viz Obrázek 3. Cyklus s podmínkou na začátku probíhá tehdy (je vykonávána větev True), pokud je splněna řídící podmínka. V našem případě, dokud je řídící proměnná menší, nebo rovna specifikované konečné hodnotě (pokud by před provedením cyklu byla hodnota řídící proměnné nastavena větší než specifikovaná konečná hodnota, cyklus by neproběhl ani jednou). Pokud hodnota řídící proměnné překročila konečnou hodnotu, řízení programu je přepnuto do větve False.
Obrázek 3: Podprogram CyklusWhile - výpis řady čísel pomocí cyklu s podmínkou na začátku
U poslední typu cyklu s podmínkou na konci v podprogramu CyklusDoWhile je z vývojového diagramu patrné, že musí proběhnout minimálně jedna iterace - viz Obrázek 4. Oproti předchozímu cyklu je tedy podmínka testována až na konci každé iterace. Cyklus s podmínkou na konci probíhá tak dlouho, dokud je splněna řídící podmínka - větev True. Pokud podmínka není splněna, řízení programu je přepnuto do větve False.
Obrázek 4: Podprogram CyklusDoWhile - výpis řady čísel pomocí cyklu s podmínkou na konci
Poslední ukázkou výpisu řady čísel je pomocí podprogramu BezCyklu, který nevyužívá žádného cyklu - viz Obrázek 5. Tento přístup byl zvolen proto, aby bylo zřejmé, jak je vhodné u opakujících se příkazů používat cykly, namísto provádění jednotlivých příkazů odděleně. V tomto případě existuje větší náchylnost k vytvoření chyby programátorem.
Obrázek 5: Podprogram BezCyklu - výpis řady čísel bez využití cyklu
1.2. C# kód
V hlavní statické metodě jsou pomocí jednotlivých výpisů odděleny jednotlivé číselné řady vypsané pomocí volaných metod, jejichž těla obsahují různé typy cyklu - viz Kód 1. Poslední ukázkou je demonstrován špatný přístup, který je založen na kopírování zdrojového kódu, který se opakuje, namísto toho, aby byl vykonáván v těle cyklu.
static void Main(string[] args) { Console.WriteLine("Výpis pomocí cyklu s pevným krokem:"); // Výpis prvních deseti čísel CyklusFor(); Console.WriteLine("Výpis pomocí cyklu s podmínkou na začátku:"); // Výpis druhé desítky čísel CyklusWhile(); Console.WriteLine("Výpis pomocí cyklu s podmínkou na konci:"); // Výpis třetí desítky čísel CyklusDoWhile(); Console.WriteLine("Výpis bez cyklu:"); // Výpis čtvrté desítky čísel BezCyklu(); // Čekání na stisk klávesy -> ukončení programu Console.ReadKey(); }
Kód 1: Program VypisRady - deklarace hlavní statické metody Main
Ve statické metodě bez návratu s názvem CyklusFor jsme pro připojení nového textu (", ") do stávajícího (na začátku prázdného) textu uloženého v proměnné rada, použili složeného přiřazení += (namísto zdlouhavého zápisu rada = rada + ", ";) - viz Kód 2. Operátor složeného přiřazení jsme také použili pro připojení číslice, která představuje aktuální hodnotu čísla v číselné řadě. Konverzi celočíselné hodnoty jsme provedli v tečkové notaci pomocí příkazu ToString. Inkrementace řídící proměnné i cyklu (tzv. čítače) se děje automaticky pro každém proběhnutí iterace.
// Metoda bez návratu - výpis řady čísel pomocí cyklu for static void CyklusFor() { // Deklarace: 'rada' ... řada čísel určených k výpisu oddělených čárkami; 'i' ... řídící proměnná cyklu - čítač (vypisované číslo) string rada; int i; // Inicializace číselné řady (vymazání) rada = ""; // Cyklus s krokem (proběhne 10x) for (i = 1; i <= 10; i++) { // Test, zda již bylo vypsáno první číslo... if (i > 1) { // Přidání čárky za každé číslo rada += ", "; } // Připojení čísla do řady (tj. číselná hodnota uložená v proměnné 'i' konvertovaná na text) rada += i.ToString(); } // Výpis řady číslic oddělených čárkami Console.WriteLine(rada); }
Kód 2: Deklarace statické metody bez návratu s názvem CyklusFor
Oproti předchozí metodě, musíme v metodě CyklusWhile zajistit inkrementaci řídící proměnné i - viz Kód 3. Pro inkrementaci jsme v cyklu využili příkazu i++. Tento operátor zajistí zvýšení hodnoty řídící proměnné o hodnotu 1 před proběhnutím nové iterace.
// Metoda bez návratu - výpis řady čísel pomocí cyklu while static void CyklusWhile() { // Deklarace: 'rada' ... řada čísel určených k výpisu oddělených čárkami; 'i' ... řídící proměnná cyklu - čítač (vypisované číslo) string rada; int i; // Inicializace číselné řady (vymazání) rada = ""; // Inicializace čítače i = 11; // Cyklus s podmínkou na začátku while (i <= 20) { // Test, zda již bylo vypsáno první číslo... if (i > 11) { // Přidání čárky za každé číslo rada += ", "; } // Připojení čísla do řady (tj. číselná hodnota uložená v proměnné 'i' konvertovaná na číslici) rada += i.ToString(); // Inkrementace čítače o 1 i++; } // Výpis řady číslic oddělených čárkami Console.WriteLine(rada); }
Kód 3: Deklarace statické metody bez návratu s názvem CyklusWhile
Následující metoda CyklusDoWhile využívá cyklus s podmínkou na konci. Tato podmínka je testována po proběhnutí příkazů v těle cyklu - viz Kód 4.
// Metoda bez návratu - výpis řady čísel pomocí cyklu do-while static void CyklusDoWhile() { // Deklarace: 'rada' ... řada čísel určených k výpisu oddělených čárkami; 'i' ... řídící proměnná cyklu - čítač (vypisované číslo) string rada; int i; // Inicializace číselné řady (vymazání) rada = ""; // Inicializace čítače i = 21; // Cyklus s podmínkou na začátku do { // Test, zda již bylo vypsáno první číslo... if (i > 21) { // Přidání čárky za každé číslo rada += ", "; } // Připojení čísla do řady (tj. číselná hodnota uložená v proměnné 'i' konvertovaná na číslici) rada += i.ToString(); // Inkrementace čítače o 1 i++; } // Testování řídící podmínky k vykonání další iterace while (i <= 30); // Výpis řady číslic oddělených čárkami Console.WriteLine(rada); }
Kód 4: Deklarace statické metody bez návratu s názvem CyklusDoWhile
V metodě BezCyklu je v prvním přiřazení hodnoty (textu) lokální proměnné rada použito přímého přiřazení číslice (číselné hodnoty uložené v lokální proměnné i). Není tedy zapotřebí inicializovat textovou proměnnou rada prázdným textovým řetězcem - viz Kód 5.
// Metoda bez návratu - výpis řady čísel bez použití cyklu static void BezCyklu() { // Deklarace: 'rada' ... řada čísel určených k výpisu oddělených čárkami; 'i' ... řídící proměnná cyklu - čítač (vypisované číslo) string rada; int i; // Inicializace číselné řady (vymazání) rada = ""; // Inicializace čítače i = 31; // Připojení čísla do řady (tj. číselná hodnota uložená v proměnné 'i' konvertovaná na číslici) rada = i.ToString(); // Inkrementace čítače o 1 i++; rada += ", " + i.ToString(); i++; rada = rada + ", " + i.ToString(); i++; rada = rada + ", " + i.ToString(); i++; rada = rada + ", " + i.ToString(); i++; rada = rada + ", " + i.ToString(); i++; rada = rada + ", " + i.ToString(); i++; rada = rada + ", " + i.ToString(); i++; rada = rada + ", " + i.ToString(); i++; rada = rada + ", " + i.ToString(); // Výpis řady číslic oddělených čárkami Console.WriteLine(rada); }
Kód 5: Deklarace statické metody bez návratu s názvem BezCyklu
1.3. Výsledný kód
Následující zdrojový kód je kompletací předešlých kódů programu VypisRady, který je umístěn v souboru Program.cs - viz Kód 1.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace VypisRady { class Program { static void Main(string[] args) { Console.WriteLine("Výpis pomocí cyklu s pevným krokem:"); // Výpis prvních deseti čísel CyklusFor(); Console.WriteLine("Výpis pomocí cyklu s podmínkou na začátku:"); // Výpis druhé desítky čísel CyklusWhile(); Console.WriteLine("Výpis pomocí cyklu s podmínkou na konci:"); // Výpis třetí desítky čísel CyklusDoWhile(); Console.WriteLine("Výpis bez cyklu:"); // Výpis čtvrté desítky čísel BezCyklu(); // Čekání na stisk klávesy -> ukončení programu Console.ReadKey(); } // Metoda bez návratu - výpis řady čísel pomocí cyklu for static void CyklusFor() { /* Deklarace: 'rada' ... řada čísel určených k výpisu oddělených čárkami; * 'i' ... řídící proměnná cyklu - čítač (vypisované číslo) */ string rada; int i; // Inicializace číselné řady (vymazání) rada = ""; // Cyklus s krokem (proběhne 10x) for (i = 1; i <= 10; i++) { // Test, zda již bylo vypsáno první číslo... if (i > 1) { // Přidání čárky za každé číslo rada += ", "; } // Připojení čísla do řady (tj. číselná hodnota uložená v proměnné 'i' konvertovaná na text) rada += i.ToString(); } // Výpis řady číslic oddělených čárkami Console.WriteLine(rada); } // Metoda bez návratu - výpis řady čísel pomocí cyklu while static void CyklusWhile() { /* Deklarace: 'rada' ... řada čísel určených k výpisu oddělených čárkami; * 'i' ... řídící proměnná cyklu - čítač (vypisované číslo) */ string rada; int i; // Inicializace číselné řady (vymazání) rada = ""; // Inicializace čítače i = 11; // Cyklus s podmínkou na začátku while (i <= 20) { // Test, zda již bylo vypsáno první číslo... if (i > 11) { // Přidání čárky za každé číslo rada += ", "; } // Připojení čísla do řady (tj. číselná hodnota uložená v proměnné 'i' konvertovaná na číslici) rada += i.ToString(); // Inkrementace čítače o 1 i++; } // Výpis řady číslic oddělených čárkami Console.WriteLine(rada); } // Metoda bez návratu - výpis řady čísel pomocí cyklu do-while static void CyklusDoWhile() { /* Deklarace: 'rada' ... řada čísel určených k výpisu oddělených čárkami; * 'i' ... řídící proměnná cyklu - čítač (vypisované číslo) */ string rada; int i; // Inicializace číselné řady (vymazání) rada = ""; // Inicializace čítače i = 21; // Cyklus s podmínkou na začátku do { // Test, zda již bylo vypsáno první číslo... if (i > 21) { // Přidání čárky za každé číslo rada += ", "; } // Připojení čísla do řady (tj. číselná hodnota uložená v proměnné 'i' konvertovaná na číslici) rada += i.ToString(); // Inkrementace čítače o 1 i++; } // Testování řídící podmínky k vykonání další iterace while (i <= 30); // Výpis řady číslic oddělených čárkami Console.WriteLine(rada); } // Metoda bez návratu - výpis řady čísel bez použití cyklu static void BezCyklu() { /* Deklarace: 'rada' ... řada čísel určených k výpisu oddělených čárkami; * 'i' ... řídící proměnná cyklu - čítač (vypisované číslo) */ string rada; int i; // Inicializace číselné řady (vymazání) rada = ""; // Inicializace čítače i = 31; // Připojení čísla do řady (tj. číselná hodnota uložená v proměnné 'i' konvertovaná na číslici) rada = i.ToString(); // Inkrementace čítače o 1 i++; rada += ", " + i.ToString(); i++; rada = rada + ", " + i.ToString(); i++; rada = rada + ", " + i.ToString(); i++; rada = rada + ", " + i.ToString(); i++; rada = rada + ", " + i.ToString(); i++; rada = rada + ", " + i.ToString(); i++; rada = rada + ", " + i.ToString(); i++; rada = rada + ", " + i.ToString(); i++; rada = rada + ", " + i.ToString(); // Výpis řady číslic oddělených čárkami Console.WriteLine(rada); } } }
Kód 1: Program VypisRady - deklarace hlavní statické metody Main včetně deklarací dalších metod
Výstup programu
Na následujícím výstupu programu vidíme výpis řady čísel pomocí různých typů cyklu a poslední řady, která je vypsána bez použití cyklu - viz Výstup programu - Kód 1.

Výstup programu - Kód 1: Ukázka výpisu číselných řad v hlavní metodě programu VypisRady
2. VypisRadyWPF
Vytvořte aplikaci pro výpis řady čísel pomocí:
- Cyklus s pevným krokem - čísla od 1 do 10
- Cyklus s podmínkou na začátku - čísla od 11 do 20
- Cyklus s podmínkou na konci - čísla od 21 do 30
- Bez cyklu - čísla od 31 do 40
Vytvořte také tlačítko pro mazání vypsané řady čísel.
Cykly (iterace) se používají pro opakování podobné činnosti.
Účel příkladu
- Cyklus s podmínkou na začátku
- Cyklus s podmínkou na konci
- Cyklus s pevným krokem
Typ aplikace
- WPF aplikace
Popis úkolu
- Výpis řady čísel
Funkčnosti
- Při stisku tlačítka 1. deset For se provede výpis čísel od 1 do 10 do TextBox pomocí cyklu s pevným krokem
- Při stisku tlačítka 2. deset While se provede výpis čísel od 11 do 20 do TextBox pomocí cyklu s podmínkou na začátku
- Při stisku tlačítka 3. deset Do While se provede výpis čísel od 21 do 30 do TextBox pomocí cyklu s podmínkou na konci
- Při stisku tlačítka 4. deset bez cyklu se provede výpis čísel od 31 do 40 do TextBox bez použití cyklu
- Při stisku tlačítka Mazat se provede smazání textu v TextBox pomocí zavolání metody, která smaže text v TextBox
- Při stisku tlačítka Konec se provede zavření formuláře
Výstup programu

Výstup programu 1: Ukázka GUI při počátečním spuštění programu VypisRadyWPF
Výsledek:

Výstup programu 2: Ukázka výpisu prvních deseti čísel programu VypisRadyWPF
2.1. Analýza a návrh řešení
V příkladu je využit stejný princip jako v případě příkladu VypisRady, proto již není zapotřebí provádět detailní analýzu pro výpis řady čísel.
Pro rozložení jednotlivých prvků použijeme Grid, který rozdělíme na 2 řádky - viz Obrázek 1. Do prvního řádku Grid (s indexem 0) umístíme objekt typu TextBox, ve kterém bude vypisována příslušná desítka čísel oddělených čárkou na základě stisknutí tlačítka příslušného tlačítka. Do druhého řádku řádku Grid umístíme StackPanel, do něhož vložíme objekty typu Button pro provádění výpisu příslušné řady čísel. WrapPanel zarovnáme na střed formuláře. Do stejného řádku umístíme další WrapPanel. Do tohoto WrapPanel umístíme tlačítko pro ukončení aplikace. Tento WrapPanel bude zarovnán k pravému kraji.

Obrázek 2: Návrh GUI - rozložení prvků v mřížce formuláře (VypisRadyWPF)
Na formulář bude vloženo 5 tlačítek pro výpis různých deseti čísel pomocí různých typů cyklů, které budou spouštět provádění zdrojového kódu v CodeBehind při obsluze události stisknutí tlačítka - viz Obrázek 2.

Obrázek 2: Návrh GUI a účel jednotlivých objektů (VypisRadyWPF)
2.2. XAML
Na základě našich zkušeností s XAML bude již stručně popsán postup tvorby formuláře. Základní atributy (titulek, výšku a šířku) formuláře nastavíme následujícím způsobem - viz Kód 1.
Title="Výpis deseti čísel na obrazovku (4 varianty)" Height="350" Width="800">
Kód 1: Nastavení atributů formuláře
Formulář rozdělíme na dva řádky, jejichž výšky jsou nastaveny následujícím způsobem - viz Kód 2. Výška řádku se bude přizpůsobovat roztažení okna. Druhý řádek se přizpůsobí obsahu vložených prvků.
<Grid.RowDefinitions> <RowDefinition Height="*"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions>
Kód 2: Rozdělení Grid na řádky
První řádek Grid (s indexem 0) bude obsahovat objektu typu TextBox, do kterého bude po stisknutí tlačítka vypsána příslušná řada deseti čísel oddělených čárkou. U tohoto objektu je nastavena fixní šířka a výška. Pokud bude text delší, než je šířka tohoto objektu, bude zbývající text umístěn na další řádek v tomto objektu (vlastnost TextWrapping). Do objektu budeme pouze vypisovat řady čísel, proto jej nastavíme jen pro čtení (vlastnost IsReadOnly) a zabarvíme pozadí (vlastnost BackGround). Objekt bude umístěn na střed prvního řádku. Všimněte si, že není zapotřebí specifikovat umístění objektu do prvního řádku (Grid.Row="0"). To je provedeno automaticky, pokud tato vlastnost není specifikována. Dále v kódu není specifikováno zarovnání v horizontální ose (vlastnost HorizontalAlignment), protože se standardně objekt rozprostře od středu do celého vnořeného objektu, v tomto případu řádku. My jsme však specifikovali fixní šířku a výšku a díky tomu objekt je pouze vycentrován. Text uvnitř objektu bude vypisován na střed (vlastnost HorizontalContentAlignment). Při počátečním spuštění bude v okně vypsán text "Výpis řady čísel" (vlastnost Text) - viz Kód 3.
<TextBox Name="TxtVypis" Height="70" Margin="5" TextWrapping="Wrap" Text="Výpis řady čísel" Width="400" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Background="AliceBlue" IsReadOnly="True"/>
Kód 3: Objekt typu TextBox určený pro výpis desítky čísel
Do druhého řádku Grid (s indexem 1) objekt typu StackPanel, do něhož vložíme dva objekty typu WrapPanel. První WrapPanel bude sloužit pro horizontální zarovnání tlačítek do řady. Všimněte si, že stačí pouze definovat výšku (vlastnost Height) pouze u jednoho tlačítka a výška ostatních tlačítek se přizpůsobí této výšce. Tlačítka ve WrapPanel mají nastavenu pevnou šířku (vlastnost Width) a tloušťku obtékání (vlastnost Margin).
Pro tlačítka vygenerujeme obsluhu události stisknutí tlačítka (událost Click) pomocí nastavení vlastnosti Click a zvolení položky <New Event Handler>.
Druhý WrapPanel zarovnáme k pravému okraji (vlastnost HorizontalAlignment). Do tohoto objektu umístíme tlačítko Konec - viz Kód 4.
<StackPanel Grid.Row="1"> <WrapPanel HorizontalAlignment="Center"> <Button Name="BtnFor" Content="1. deset For" Margin="5" Width="110" Height="30" Click="BtnFor_Click"/> <Button Name="BtnWhile" Content="2. deset While" Margin="5" Width="110" Click="BtnWhile_Click"/> <Button Name="BtnDoWhile" Content="3. deset Do While" Margin="5" Width="110" Click="BtnDoWhile_Click"/> <Button Name="BtnBezCyklu" Content="4. deset bez Cyklu" Margin="5" Width="110" Click="BtnBezCyklu_Click"/> <Button Name="BtnMazat" Content="Mazat" Margin="5" Width="110"/> </WrapPanel> <WrapPanel HorizontalAlignment="Right"> <Button Name="BtnKonec" Content="Konec" Margin="5" Width="80" Padding="5" Click="BtnKonec_Click"/> </WrapPanel> </StackPanel>
Kód 4: Umístění tlačítek v objektech typu WrapPanel v posledním řádku Grid
Výsledný formulář
Navržené rozložení prvků na formuláři, včetně formuláře samotného, je vidět na následujícím obrázku - viz Obrázek 1.

Obrázek 1: Výsledný formulář WPF aplikace
Objekty na formuláři:
- Grid
- StackPanel
- WrapPanel
- TextBox
- TxtVypis
- Button
- BtnFor
- BtnWhile
- BtnDoWhile
- BtnBezCyklu
- BtnMazat
- BtnKonec
které jsou umístěny následujícím způsobem - viz Obrázek 2.

Obrázek 2: VS - okno Document Outline - seznam objektů
2.3. XAML - prvky formuláře
Následující XAML kód obsahuje nastavení formuláře - viz Kód 1. Pokud je zapotřebí zkopírujte XAML kód a vložte jej namísto řádky s nastavením vlastností okna (řádek začíná Title=....).
Title="Výpis deseti čísel na obrazovku (4 varianty)" Height="350" Width="800">
Kód 1: Nastavení vlastností formuláře
Grid
Následující zdrojový kód XAML obsahuje potřebné prvky na formuláři pro řešení úlohy, bez nastavení událostí - viz Kód 2. Pokud je zapotřebí, zkopírujte XAML kód a vložte jej mezi počáteční a koncovou značku prvku Grid.<Grid.RowDefinitions> <RowDefinition Height="*"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <TextBox Name="TxtVypis" Height="70" Margin="5" TextWrapping="Wrap" Text="Výpis řady čísel" Width="400" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Background="AliceBlue"/> <StackPanel Grid.Row="1"> <WrapPanel HorizontalAlignment="Center"> <Button Name="BtnFor" Content="1. deset For" Margin="5" Width="110" Height="30"/> <Button Name="BtnWhile" Content="2. deset While" Margin="5" Width="110"/> <Button Name="BtnDoWhile" Content="3. deset Do While" Margin="5" Width="110"/> <Button Name="BtnBezCyklu" Content="4. deset bez Cyklu" Margin="5" Width="110"/> <Button Name="BtnMazat" Content="Mazat" Margin="5" Width="110"/> </WrapPanel> <WrapPanel HorizontalAlignment="Right"> <Button Name="BtnKonec" Content="Konec" Margin="5" Width="80" Padding="5"/> </WrapPanel> </StackPanel>
Kód 2: Prvky v Grid
2.4. C#
V souboru MainWindow.xaml.cs obsahující kód na pozadí (Code Behind) byla vygenerována základní struktura našeho programu v C#. Vedle konstruktoru MainWindow této třídy byly také vygenerovány soukromé (private) metody bez návratu:
- BtnFor_Click
- BtnWhile_Click
- BtnDoWhile_Click
- BtnBezCyklu_Click
- BtnMazat_Click
- BtnKonec_Click
U první metody pro výpis prvních deseti čísel oddělených čárkami nejprve vymažeme předchozí text v objektu typu TextBox pro výpis řady. Pro generování čísel využijeme cyklus s krokem (for), kde budeme vypisovat hodnotu čítače. Pokud je hodnota větší než 1, tak budeme přidávat za výpis čísla na formuláři čárku - viz Kód 1.
private void BtnFor_Click(object sender, RoutedEventArgs e) { // Deklarace: 'i' ... řídící proměnná cyklu - čítač (vypisované číslo) int i; // Vymazání předchozí výpisu řady this.TxtVypis.Clear(); // Cyklus s krokem (proběhne 10x) for (i = 1; i <= 10; i++) { // Test, zda již bylo vypsáno první číslo... if (i > 1) { // Přidání čárky za každé číslo this.TxtVypis.Text += ", "; } // Připojení čísla do výpisu na formuláři ('i' konverze na text) this.TxtVypis.Text += i.ToString(); } }
Kód 1: Deklarace metody pro výpis čísel od 1 do 10 (BtnFor_Click)
Následující metoda je svojí podstatou stejná, avšak oproti předchozí metodě, musíme zajistit inkrementaci řídící proměnné i - viz Kód 2. Pro inkrementaci jsme v cyklu využili příkazu i++. Tento operátor zajistí zvýšení hodnoty řídící proměnné o hodnotu 1 před proběhnutím nové iterace.
private void BtnWhile_Click(object sender, RoutedEventArgs e) { // Deklarace: 'i' ... řídící proměnná cyklu - inicializace čítače int i = 11; // Vymazání předchozí výpisu řady this.TxtVypis.Clear(); // Cyklus s podmínkou na začátku while (i <= 20) { // Test, zda již bylo vypsáno první číslo... if (i > 11) { // Přidání čárky za každé číslo this.TxtVypis.Text += ", "; } // Připojení čísla do výpisu na formuláři ('i' konverze na text) this.TxtVypis.Text += i.ToString(); // Inkrementace čítače o 1 i++; } }
Kód 2: Deklarace metody pro výpis čísel od 11 do 20 (BtnWhile_Click)
Následující metoda BtnDoWhile_Click využívá cyklus s podmínkou na konci. Tato podmínka je testována po proběhnutí příkazů v těle cyklu - viz Kód 3.private void BtnDoWhile_Click(object sender, RoutedEventArgs e) { // Deklarace: 'i' ... řídící proměnná cyklu - inicializace čítače int i = 21; // Vymazání předchozí výpisu řady this.TxtVypis.Clear(); // Cyklus s podmínkou na začátku do { // Test, zda již bylo vypsáno první číslo... if (i > 21) { // Přidání čárky za každé číslo this.TxtVypis.Text += ", "; } // Připojení čísla do výpisu na formuláři (konverze 'i' na text) this.TxtVypis.Text += i.ToString(); // Inkrementace čítače o 1 i++; } // Testování řídící podmínky k vykonání další iterace while (i <= 30); }
Kód 3: Deklarace metody pro výpis čísel od 21 do 30 (BtnDoWhile_Click)
V metodě BezCyklu_Click je v použito přímého přiřazení číslice na do objektu s výpisem číselné řady umístěného na formuláři - viz Kód 4. Vidíme jasnou nevýhodu ve zdlouhavém vytváření zdrojového kódu, pokud bychom měli vypsat na formulář více hodnot. Proto je vhodné používat cyklus.
private void BtnBezCyklu_Click(object sender, RoutedEventArgs e) { // Deklarace: 'i' ... řídící proměnná cyklu - inicializace čítače int i = 31; // Vymazání předchozí výpisu řady this.TxtVypis.Clear(); // Výpis čísla na formulář TxtVypis.Text = i.ToString(); // Inkrementace čítače o 1 i++; TxtVypis.Text += ", " + i.ToString(); i++; TxtVypis.Text += ", " + i.ToString(); i++; TxtVypis.Text += ", " + i.ToString(); i++; TxtVypis.Text += ", " + i.ToString(); i++; TxtVypis.Text += ", " + i.ToString(); i++; TxtVypis.Text += ", " + i.ToString(); i++; TxtVypis.Text += ", " + i.ToString(); i++; TxtVypis.Text += ", " + i.ToString(); i++; TxtVypis.Text += ", " + i.ToString(); }
Kód 4: Deklarace metody pro výpis čísel od 31 do 40 (BtnBezCyklu_Click)
Předposlední metodou, kterou budeme vytvářet, je metoda pro výmaz vypsané číselné řady na formuláři. Použijeme stejný příkaz (Clear) jako v předchozích případech - viz Kód 5.
private void BtnMazat_Click(object sender, RoutedEventArgs e) { // Vymazání předchozího výpisu řady this.TxtVypis.Clear(); }
Kód 5: Deklarace metody pro výmaz číselné řady vypsané na formuláři (BtnMazat_Click)
Poslední metodou, kterou musíme upravit je metoda pro obsluhu události Click tlačítka Konec. Tato metoda nám zavře formulář - viz Kód 6.
private void BtnKonec_Click(object sender, RoutedEventArgs e) { // Zavření formuláře this.Close(); }
Kód 6: Deklarace metody bez návratu pro zavření formuláře (BtnKonec_Click)
2.5. Výsledný kód
XAML kód
Výsledný XAML kód formuláře (MainWindow.xaml) - viz Kód 1.
<Window x:Class="VypisRadyWPF.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:VypisRadyWPF" mc:Ignorable="d" Title="Výpis deseti čísel na obrazovku (4 varianty)" Height="350" Width="800"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="*"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <TextBox Name="TxtVypis" Height="70" Margin="5" TextWrapping="Wrap" Text="Výpis řady čísel" Width="400" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Background="AliceBlue" IsReadOnly="True"/> <StackPanel Grid.Row="1"> <WrapPanel HorizontalAlignment="Center"> <Button Name="BtnFor" Content="1. deset For" Margin="5" Width="110" Height="30" Click="BtnFor_Click"/> <Button Name="BtnWhile" Content="2. deset While" Margin="5" Width="110" Click="BtnWhile_Click"/> <Button Name="BtnDoWhile" Content="3. deset Do While" Margin="5" Width="110" Click="BtnDoWhile_Click"/> <Button Name="BtnBezCyklu" Content="4. deset bez Cyklu" Margin="5" Width="110" Click="BtnBezCyklu_Click"/> <Button Name="BtnMazat" Content="Mazat" Margin="5" Width="110"/> </WrapPanel> <WrapPanel HorizontalAlignment="Right"> <Button Name="BtnKonec" Content="Konec" Margin="5" Width="80" Padding="5" Click="BtnKonec_Click"/> </WrapPanel> </StackPanel> </Grid> </Window>
Kód 1: Výsledný XAML kód vytvořeného formuláře
C# kód
Code Behind - C# kód pro veškeré události vyvolané uživatelem při manipulaci s aplikací (MainWindow.xaml.cs) - viz Kód 2.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace VypisRadyWPF { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void BtnFor_Click(object sender, RoutedEventArgs e) { // Deklarace: 'i' ... řídící proměnná cyklu - čítač (vypisované číslo) int i; // Vymazání předchozí výpisu řady this.TxtVypis.Clear(); // Cyklus s krokem (proběhne 10x) for (i = 1; i <= 10; i++) { // Test, zda již bylo vypsáno první číslo... if (i > 1) { // Přidání čárky za každé číslo this.TxtVypis.Text += ", "; } // Připojení čísla do výpisu na formuláři ('i' konverze na text) this.TxtVypis.Text += i.ToString(); } } private void BtnWhile_Click(object sender, RoutedEventArgs e) { // Deklarace: 'i' ... řídící proměnná cyklu - inicializace čítače int i = 11; // Vymazání předchozí výpisu řady this.TxtVypis.Clear(); // Cyklus s podmínkou na začátku while (i <= 20) { // Test, zda již bylo vypsáno první číslo... if (i > 11) { // Přidání čárky za každé číslo this.TxtVypis.Text += ", "; } // Připojení čísla do výpisu na formuláři ('i' konverze na text) this.TxtVypis.Text += i.ToString(); // Inkrementace čítače o 1 i++; } } private void BtnDoWhile_Click(object sender, RoutedEventArgs e) { // Deklarace: 'i' ... řídící proměnná cyklu - inicializace čítače int i = 21; // Vymazání předchozí výpisu řady this.TxtVypis.Clear(); // Cyklus s podmínkou na začátku do { // Test, zda již bylo vypsáno první číslo... if (i > 21) { // Přidání čárky za každé číslo this.TxtVypis.Text += ", "; } // Připojení čísla do výpisu na formuláři (konverze 'i' na text) this.TxtVypis.Text += i.ToString(); // Inkrementace čítače o 1 i++; } // Testování řídící podmínky k vykonání další iterace while (i <= 30); } private void BtnBezCyklu_Click(object sender, RoutedEventArgs e) { // Deklarace: 'i' ... řídící proměnná cyklu - inicializace čítače int i = 31; // Vymazání předchozí výpisu řady this.TxtVypis.Clear(); // Výpis čísla na formulář TxtVypis.Text = i.ToString(); // Inkrementace čítače o 1 i++; TxtVypis.Text += ", " + i.ToString(); i++; TxtVypis.Text += ", " + i.ToString(); i++; TxtVypis.Text += ", " + i.ToString(); i++; TxtVypis.Text += ", " + i.ToString(); i++; TxtVypis.Text += ", " + i.ToString(); i++; TxtVypis.Text += ", " + i.ToString(); i++; TxtVypis.Text += ", " + i.ToString(); i++; TxtVypis.Text += ", " + i.ToString(); i++; TxtVypis.Text += ", " + i.ToString(); } private void BtnMazat_Click(object sender, RoutedEventArgs e) { // Vymazání předchozího výpisu řady this.TxtVypis.Clear(); } private void BtnKonec_Click(object sender, RoutedEventArgs e) { // Zavření formuláře this.Close(); } } }
Kód 2: Výsledný C# kód vytvořeného formuláře a metod jeho prvků
Výstup programu
Na následujícím obrázku vidíme výstup naší aplikace pro výpis různých číselných řad - viz Výstup programu - Kód 1 a 2. Výpisy jsou spouštěny pomocí příslušných tlačítek jednotlivých typů cyklů. Aplikaci lze ukončit pomocí tlačítka Konec, nebo pomocí zavíracího tlačítka umístěného v pravém rohu aplikace.

Výstup programu - Kód 1 a 2: Výpis číselné řady od 1 do 10 pomocí cyklu s krokem




