Kvadratická rovnice
| Sitio: | Moodle ZČU |
| Curso: | KPV/TI Technická informatika ve strojírenství - cvičení |
| Libro: | Kvadratická rovnice |
| Imprimido por: | Nepřihlášený host |
| Día: | domingo, 8 de noviembre de 2026, 18:27 |
Descripción
1. KvadratickaRovnice
Vytvořte aplikaci pro výpočet kořenů kvadratické rovnice. Koeficienty v rovnici jsou zadány uživatelem v konzolové aplikaci.
Pro
se jedná o lineární rovnici.
Účel příkladu
- Podmínka
- Výpočet s použitím podprogramu – metoda bez návratu (procedura)
- Konverze textu na reálného číslo
- Konverze reálného čísla na text
- Výpis textu do konzole
Typ aplikace
- Konzolová aplikace
Popis úkolu
- Výpočet kořenů kvadratické rovnice
Funkčnosti
- Po zadání koeficientů členů kvadratické rovnice se provede porovnání koeficientu kvadratického členu na rovnost nule. Pokud bude tento koeficient je roven nule je proveden výpočet lineární rovnice
- Pokud není koeficient kvadratického členu roven nule, je vypočten diskriminant s následným výpočtem kořenů kvadratické rovnice na základě koeficientů pomocí tří podprogramů (procedur), ve kterých budou vypsány vypočtených hodnoty kořenů:
- RealneKoreny (procedura pro výpočet reálných kořenů) pro

- KomplexniKoreny (procedura pro výpočet komplexních kořenů) pro

- DvojityKoren (procedura pro výpočet dvojitého kořenu kvadratické rovnice)

- Pokud je některý z koeficientů zadán špatně (nelze konvertovat na reálné číslo), je vypsána chybová hláška
Výstup programu

Výstup programu: Ukázka výpisu reálných kořenů kvadratické rovnice programu KvadratickaRovnice
1.1. Analýza a návrh řešení
Obecný předpis kvadratické rovnice je:
- Koeficient
, který představuje koeficient v kvadratickém členu - Koeficient
, který představuje koeficient v lineárním členu - Konstanta
, která představuje absolutní člen
Ve vývojovém diagramu nejsou zaznamenány výjimky, které mohou být vyvolány chybnou konverzí zadaného textu na reálné číslo, představující jednotlivé koeficienty kvadratické rovnice. Konverzi na reálné číslo lze také ve Flowgorithm provést pomocí příkazu (zavolání funkce) ToReal (standardně však konverzi do příslušného datového typu provádí Flowgorithm sám). Tato funkce přijímá textový řetězec. Pokud nastane chyba při konverzi, aplikace sama vyvolá výjimku, ve které bude uživatele informovat o nastalém problému.
Pokud uživatel zadal
, pak se jedná o lineární rovnici:
Bude tedy volán podprogram (procedura) LinearniRovnice, kterému budou předány parametry b a c. Pokud je
, potom musí být vypočten diskriminant:
Na základě hodnoty diskriminantu se bude rozhodovat, který podprogram bude volán. Při splnění podmínky
jsou volány následující podprogramy:
- Pokud
je volána procedura pro výpočet reálných kořenů RealneKoreny - Pokud
je volána procedura pro výpočet komplexních kořenů KomplexniKoreny
V případu kdy
je volána procedura pro výpočet dvojitého kořenu kvadratické rovnice DvojityKoren
Pokud uživatel zadá
, pak se jedná o lineární rovnici. V tomto případě bude volán podprogram LinearniRovnice.
Obrázek 1: Hlavní program KvadratickaRovnice pro výpočet kořenů kvadratické, nebo lineární rovnice
Pokud koeficient kvadratického členu je roven nule
, potom je volán podprogram (procedura) LinearniRovnice, který vypočítá kořeny na základě předaných parametrů. Formální parametry jsme pro přehlednost pojmenovali stejnými identifikátory, jakými jsou pojmenovány skutečné parametry v hlavním programu. Máme tedy tři možnosti při výpočtu kořenů lineární rovnice:
Na základě předchozích výpočtů vidíme, že výpočet kořenu závisí na hodnotách obou parametrů, tj. zda jsou rovny nule. Použitím dvou bloků rozhodování můžeme sestavit vývojový diagram podprogramu LinearniRovnice - viz Obrázek 2.
Obrázek 2: Podprogram LinearniRovnice - výpočet kořenů lineární rovnice
Pokud platí, že
je vypočten diskriminant. Pokud diskriminant není roven nule a zároveň je větší než 0, je proveden výpočet reálných kořenů kvadratické rovnice na základě vzorce:
Ve vzorci pod odmocninou je použit výpočet diskriminantu, ale poněvadž jsme si již diskriminant vypočítali v hlavním programu, je jednodušší diskriminant předat podprogramu, který jeho hodnotu ve svém výpočtu využije - viz Obrázek 3.

Obrázek 3: Podprogram RealneKoreny - výpočet reálných kořenů kvadratické rovnice
Pro případ, že je
, je volána procedura pro výpočet komplexních kořenů KomplexniKoreny, které jsou předány stejné parametry jako v případě předchozí procedury RealneKoreny. Komplexně sdružené kořeny se skládají z reálné a imaginární části:
Následující vývojový diagram popisuje podstatu výpočtu a zobrazení jednotlivých kořenů - viz Obrázek 4.

Obrázek 4: Podprogram KomplexniKoreny - výpočet komplexně sdružených kořenů kvadratické rovnice
Poslední volanou procedurou je podprogram DvojityKoren a to za podmínky, že
. V tomto podprogramu je vypočten a vypsán dvojitý reálný kořen kvadratické rovnice:
Následující vývojový diagram zachycuje podstatu řešení - viz Obrázek 5.

Obrázek 5: Podprogram DvojityKoren - výpočet dvojitého kořene kvadratické rovnice
1.2. C# kód
Následující zdrojový kód hlavní statické metody v C# pro konzolovou aplikaci je transformací algoritmu KvadratickaRovnice - viz Kód 1. V těle hlavní metody jsou deklarovány parametry ve formě reálných čísel (typ double - nemusíme uvádět literál), představující koeficient kvadratického, lineárního a absolutního členu a také diskriminantu. Po výzvě k zadání prvního koeficientu kvadratického členu a načtení číslic je proveden test konverze na reálné číslo. Pokud tento test je neúspěšný (návrat metody TryParse ve formě logické hodnoty je false), je proveden výpis o chybě. Metoda TryParse je však deklarována jako metoda s výstupním parametrem, tím je zajištěno, že i v případě neúspěchu při provádění konverze, bude výstupní parametr inicializován počáteční hodnotou, která pro typ double je 0.0d. Stejně je postupováno i o ostatních parametrů - lineárního a absolutního členu. Pokud je koeficient kvadratického členu roven 0, je volána metoda bez návratu s názvem LinearniRovnice se skutečnými parametry b a c. Pokud a není rovno nule, jedná se o výpočty kořenů kvadratické rovnice. U výpočtu diskriminantu d je použito umocnění na druhou pomocí metody Pow třídy Math. Tato metoda přijímá dva reálné parametry - první je reálné číslo, které má být umocněno (základ mocniny - mocněnec), a druhý reálný parametr vyjadřuje exponent (mocnitel). Pokud není diskriminant roven 0, je dále testován na hodnotu větší než 0. Pokud je d > 0, je volána metoda RealneKoreny pro výpočet reálných kořenů. Tato metoda přijímá hodnoty uložené v parametrech a, b a d. Pokud je diskriminant menší než nula, je volána metoda bez návratu s názvem KomplexniKoreny. Tato metoda přijímá taktéž parametry a, b a d. V případě, že je diskriminant nulový, je volána metoda DvojityKoren pro výpočet dvojitého kořenu kvadratické rovnice. Této metodě k výpočtu dvojitého kořene stačí pouze parametry a a b.
static void Main(string[] args) { /* Deklarace: 'a' ... koeficient v kvadratickém členu; 'b' ... koeficient * v lineárním členu; 'c' ... absolutní člen; * 'd' ... diskriminant */ double a, b, c, d; // Informace o výpočtu kvadratické rovnice Console.WriteLine("Výpočet kořenů kvadratické rovnice ax^2 + bx + c = 0:"); // Výzva pro zadání koeficientu v kvadratickém členu Console.Write("Zadejte a :"); // Pokud nedojde ke konverzi textu na číslo if (!double.TryParse(Console.ReadLine(), out a)) // Vypsání chybové hlášky v konzole Console.WriteLine("Špatně zadaná hodnota A, program počítá s 0"); // Výzva pro zadání koeficientu v lineárním členu Console.Write("Zadejte b :"); // Pokud nedojde ke konverzi textu na číslo if (!double.TryParse(Console.ReadLine(), out b)) // Vypsání chybové hlášky v konzole Console.WriteLine("Špatně zadaná hodnota B, program počítá s 0"); // Výzva pro zadání absolutního členu Console.Write("Zadejte c :"); // Pokud nedojde ke konverzi textu na číslo if (!double.TryParse(Console.ReadLine(), out c)) // Vypsání chybové hlášky v konzole Console.WriteLine("Špatně zadaná hodnota C, program počítá s 0"); // Pokud koeficient kvadratického členu je roven nule potom... if (a == 0) // Volání metody pro výpočet lineárni rovnice LinearniRovnice(b, c); // Jinak... else { // Výpočet diskriminantu d = Math.Pow(b, 2) - 4 * a * c; // Pokud diskriminant není roven nule, potom... if (d != 0) // Pokud diskriminant je větší než nula, potom... if (d > 0) // Volání metody pro výpočet reálných kořenů kvadr. rovnice - předání parametrů RealneKoreny(a, b, d); // Jinak... else // Voláni metody pro výpočet komplexně sdružených kořenů kvadr. rovnice KomplexniKoreny(a, b, d); // Jinak... else // Zavoláni metody pro výpočet dvojitého kořenu DvojityKoren(a, b); } // Čekání na stisk klávesy -> ukončení programu Console.ReadKey(); }
Kód 1: Program KvadratickaRovnice - deklarace hlavní statické metody Main
Metoda bez návratu LinearniRovnice využívá formálních parametrů b (koeficient v lineárním členu) a c (absolutní člen) pojmenovaných stejně, jako názvy skutečných parametrů předávaných z hlavní statické metody - viz Kód 2. Tyto parametry jsou předány hodnotou - fungují tedy jako vstupní parametry. V těle metody jsou dvě podmínky na nulovost obou parametrů b a c, na kterých je závislý způsob výpočtu kořene.
//--- Specifikace metody bez návratu pro výpočet lineární rovnice 'bx + c = 0' /* Vstupní parametry (předány hodnotou): 'b' ... koeficient v lineárním * členu; 'c' ... absolutní člen */ static void LinearniRovnice(double b, double c) { // Pokud první parametr je roven nule potom... if (b == 0) // Pokud druhý parametr je roven 0 potom... if (c == 0) // Nekonečně mnoho řešení - vypsání textu v konzole Console.WriteLine("Nekonečně mnoho řešení - každé x"); // Jinak... else // Žádné řešení - vypsání textu v konzole Console.WriteLine("Žádné řešení - žádné x"); // Jinak... else // Vypočtení hodnoty kořenu - vypsání textu v konzole Console.WriteLine("Lineární rovnice - kořen je: x = " + (-c / b)); }
Kód 2: Deklarace statické metody bez návratu s názvem LinearniRovnice
Další deklarovanou metodou bez návratu je metoda RealneKoreny určená pro výpočet reálných kořenů kvadratické rovnice. V metodě jsou deklarovány dvě lokální proměnné do nichž se uloží vypočtené hodnoty kořenů. Ve výpočtu je využit příkaz Sqrt (Square Root) pro výpočet druhé odmocniny diskriminantu, implementovaná ve třídě Math. Tyto vypočtené hodnoty kořenů jsou následně využity ve výpisu. Ve výpisu je použito řádkování pomocí řídící posloupnosti \n - viz Kód 3.
//--- Specifikace metody bez návratu pro výpočet reálných kořenů kvadr. rovnice /* Vstupní parametry (předány hodnotou): 'a' ... koeficient v kvadratickém členu; * 'b' ... koeficient v lineárním členu; 'd' ... diskriminant */ static void RealneKoreny(double a, double b, double d) { /* Deklarace: 'x1' ... první reálný kořen kvadr. rovnice; * 'x2' ... druhý reálný kořen kvadr. rovnice */ double x1, x2; // Výpočet prvního kořenu x1 = (-b + Math.Sqrt(d)) / (2 * a); // Výpočet druhého kořenu x2 = (-b - Math.Sqrt(d)) / (2 * a); // Vypočtení hodnot kořenů - vypsání textu v konzole ('\n' - zařádkování) Console.WriteLine("Kořeny jsou:\n x1 = " + x1.ToString() + "\n x2 = " + x2.ToString()); }
Kód 3: Deklarace statické metody bez návratu s názvem RealneKoreny
Další deklarovanou metodou bez návratu je metoda KomplexniKoreny. Metoda využívá dvě lokální reálné proměnné re představující reálnou složka kořenu kvadratické rovnice a im, která představuje imaginární složku kořenu kvadratické rovnice. Tyto složku jsou připojeny do výpisu hodnot kořenů - viz Kód 4.
//--- Specifikace metody bez návratu pro výpočet komplexně sdružených kořenů kvadr. rovnice /* Vstupní parametry (předány hodnotou): 'a' ... koeficient v kvadratickém členu; * 'b' ... koeficient v lineárním členu; 'd' ... diskriminant */ static void KomplexniKoreny(double a, double b, double d) { /* Deklarace: 're' ... reálná složka kořenu kvadr. rovnice; * 'im' ... imaginární složka kořenu kvadr. rovnice */ double re, im; // Výpočet reálné složky kořenu kvadr. rovnice re = -b / (2 * a); // Výpočet imaginární složky kořenu kvadr. rovnice im = Math.Sqrt(Math.Abs(d)) / (2 * a); // Výpis hodnot komplexních kořenů - vypsání textu v konzole ('\n' - zařádkování) Console.WriteLine("Kořeny jsou komplexní: \n x1 = " + re.ToString() + " + " + im.ToString() + "i\n x2 = " + re.ToString() + " - " + im.ToString() + "i"); }
Kód 4: Deklarace statické metody bez návratu s názvem KomplexniKoreny
Poslední metodou bez návratu je metoda DvojityKoren. Tato metoda přijímá pouze dva parametry a a b, ze kterých je vypočten dvojitý reálný kořen - viz Kód 5.
//--- Specifikace metody bez návratu pro výpočet dvojitého reálné kořenu kvadr. rovnice /* Vstupní parametry (předány hodnotou): 'a' ... koeficient v kvadratickém členu; * 'b' ... koeficient v lineárním členu */ static void DvojityKoren(double a, double b) { /* Deklarace: 'x' ... dvojitý reálný kořen kvadr. rovnice */ double x; // Výpočet dvojitého reálného kořenu x = -b / (2 * a); // Vypočtení hodnoty dvojitého reálného kořenu - vypsání textu v konzole Console.WriteLine("Dvojitý reálný kořen je:\n x = " + x.ToString()); }
Kód 5: Deklarace statické metody bez návratu s názvem DvojityKoren
1.3. Výsledný kód
Následující zdrojový kód je kompletací předešlých kódů programu KvadratickaRovnice, 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 KvadratickaRovnice { class Program { static void Main(string[] args) { /* Deklarace: 'a' ... koeficient v kvadratickém členu; 'b' ... koeficient * v lineárním členu; 'c' ... absolutní člen; * 'd' ... diskriminant */ double a, b, c, d; // Informace o výpočtu kvadratické rovnice Console.WriteLine("Výpočet kořenů kvadratické rovnice ax^2 + bx + c = 0:"); // Výzva pro zadání koeficientu v kvadratickém členu Console.Write("Zadejte a :"); // Pokud nedojde ke konverzi textu na číslo if (!double.TryParse(Console.ReadLine(), out a)) // Vypsání chybové hlášky v konzole Console.WriteLine("Špatně zadaná hodnota A, program počítá s 0"); // Výzva pro zadání koeficientu v lineárním členu Console.Write("Zadejte b :"); // Pokud nedojde ke konverzi textu na číslo if (!double.TryParse(Console.ReadLine(), out b)) // Vypsání chybové hlášky v konzole Console.WriteLine("Špatně zadaná hodnota B, program počítá s 0"); // Výzva pro zadání absolutního členu Console.Write("Zadejte c :"); // Pokud nedojde ke konverzi textu na číslo if (!double.TryParse(Console.ReadLine(), out c)) // Vypsání chybové hlášky v konzole Console.WriteLine("Špatně zadaná hodnota C, program počítá s 0"); // Pokud koeficient kvadratického členu je roven nule potom... if (a == 0) // Volání metody pro výpočet lineárni rovnice LinearniRovnice(b, c); // Jinak... else { // Výpočet diskriminantu d = Math.Pow(b, 2) - 4 * a * c; // Pokud diskriminant není roven nule, potom... if (d != 0) // Pokud diskriminant je větší než nula, potom... if (d > 0) // Volání metody pro výpočet reálných kořenů kvadr. rovnice - předání parametrů RealneKoreny(a, b, d); // Jinak... else // Voláni metody pro výpočet komplexně sdružených kořenů kvadr. rovnice KomplexniKoreny(a, b, d); // Jinak... else // Zavoláni metody pro výpočet dvojitého kořenu DvojityKoren(a, b); } // Čekání na stisk klávesy -> ukončení programu Console.ReadKey(); } //--- Specifikace metody bez návratu pro výpočet lineární rovnice 'bx + c = 0' /* Vstupní parametry (předány hodnotou): 'b' ... koeficient v lineárním * členu; 'c' ... absolutní člen */ static void LinearniRovnice(double b, double c) { // Pokud první parametr je roven nule potom... if (b == 0) // Pokud druhý parametr je roven 0 potom... if (c == 0) // Nekonečně mnoho řešení - vypsání textu v konzole Console.WriteLine("Nekonečně mnoho řešení - každé x"); // Jinak... else // Žádné řešení - vypsání textu v konzole Console.WriteLine("Žádné řešení - žádné x"); // Jinak... else // Vypočtení hodnoty kořenu - vypsání textu v konzole Console.WriteLine("Lineární rovnice - kořen je: x = " + (-c / b)); } //--- Specifikace metody bez návratu pro výpočet reálných kořenů kvadr. rovnice /* Vstupní parametry (předány hodnotou): 'a' ... koeficient v kvadratickém členu; * 'b' ... koeficient v lineárním členu; 'd' ... diskriminant */ static void RealneKoreny(double a, double b, double d) { /* Deklarace: 'x1' ... první reálný kořen kvadr. rovnice; * 'x2' ... druhý reálný kořen kvadr. rovnice */ double x1, x2; // Výpočet prvního kořenu x1 = (-b + Math.Sqrt(d)) / (2 * a); // Výpočet druhého kořenu x2 = (-b - Math.Sqrt(d)) / (2 * a); // Vypočtení hodnot kořenů - vypsání textu v konzole ('\n' - zařádkování) Console.WriteLine("Kořeny jsou:\n x1 = " + x1.ToString() + "\n x2 = " + x2.ToString()); } //--- Specifikace metody bez návratu pro výpočet komplexně sdružených kořenů kvadr. rovnice /* Vstupní parametry (předány hodnotou): 'a' ... koeficient v kvadratickém členu; * 'b' ... koeficient v lineárním členu; 'd' ... diskriminant */ static void KomplexniKoreny(double a, double b, double d) { /* Deklarace: 're' ... reálná složka kořenu kvadr. rovnice; * 'im' ... imaginární složka kořenu kvadr. rovnice */ double re, im; // Výpočet reálné složky kořenu kvadr. rovnice re = -b / (2 * a); // Výpočet imaginární složky kořenu kvadr. rovnice im = Math.Sqrt(Math.Abs(d)) / (2 * a); // Výpis hodnot komplextních kořenů - vypsání textu v konzole ('\n' - zařádkování) Console.WriteLine("Kořeny jsou komplexní: \n x1 = " + re.ToString() + " + " + im.ToString() + "i\n x2 = " + re.ToString() + " - " + im.ToString() + "i"); } //--- Specifikace metody bez návratu pro výpočet dvojitého reálné kořenu kvadr. rovnice /* Vstupní parametry (předány hodnotou): 'a' ... koeficient v kvadratickém členu; * 'b' ... koeficient v lineárním členu */ static void DvojityKoren(double a, double b) { /* Deklarace: 'x' ... dvojitý reálný kořen kvadr. rovnice */ double x; // Výpočet dvojitého reálného kořenu x = -b / (2 * a); // Vypočtení hodnoty dvojitého reálného kořenu - vypsání textu v konzole Console.WriteLine("Dvojitý reálný kořen je:\n x = " + x.ToString()); } } }
Kód 1: Program KvadratickaRovnice - deklarace hlavní statické metody Main včetně deklarací dalších metod
Výstup programu
Na následujícím výstupu programu vidíme, že uživatel zadal hodnotu koeficientu v kvadratickém členu rovnu 0. Díky tomu byla zavolána metoda LinearniRovnice a uvnitř metody byla vypsána hodnota vypočteného kořene lineární rovnice - viz Výstup programu 1 - Kód 1.

Výstup programu 1 - Kód 1: Ukázka výpisu hodnoty kořene pomocí metody LinearniRovnice v programu KvadratickaRovnice
V dalším printscreenu konzolové aplikace vidíme, že uživatel zadal hodnoty takovým způsobem, že diskriminant vyšel větší než nula. Znamená to tedy, že pro výpočet kořenů kvadratické rovnice bude zavolána metoda RealneKoreny - viz Výstup programu 2 - Kód 1.

Výstup programu 2 - Kód 1: Ukázka výpisu hodnoty kořene pomocí metody RealneKoreny v programu KvadratickaRovnice

Výstup programu 3 - Kód 1: Ukázka výpisu hodnoty kořene pomocí metody KomplexniKoreny v programu KvadratickaRovnice
Posledním testovaným případem je výpočet dvojitého kořenu kvadratické rovnice pomocí metody DvojityKoren, kdy diskriminant byl vypočten ze zadaných hodnot jako nulový - viz Výstup programu 4 - Kód 1.

Výstup programu 4 - Kód 1: Ukázka výpisu hodnoty kořene pomocí metody DvojityKoren v programu KvadratickaRovnice
2. KvadratickaRovniceWPF
Vytvořte aplikaci pro výpočet kořenů kvadratické rovnice. Koeficienty v rovnici jsou zadány uživatelem v konzolové aplikaci.
Pro
se jedná o lineární rovnici.
Účel příkladu
- Podmínka
- Výpočet s použitím podprogramu – metoda s návratem (funkce), metoda bez návratu (procedura)
- Konverze textu na reálného číslo
- Konverze reálného čísla na text
- Výpis textu do pole na formuláři
- Zavření formuláře
- Vlastnosti objektu
- Metody objektu
Typ aplikace
- WPF aplikace
Popis úkolu
- Výpočet kořenů kvadratické rovnice
Funkčnosti
- Při stisku tlačítka Vypočti se provede výpočet kořenů kvadratické rovnice na základě koeficientů specifikovaných na formuláři pomocí zavolané metody bez návratu. Pokud je některý z koeficientů zadán špatně (nelze konvertovat na reálné číslo), vypíše se v dialogovém okně výzva k zadání koeficientu a metoda přiřazená k tlačítku se opustí. Pokud je diskriminant větší nebo roven nule pak je zavolána metoda pro výpočet reálných kořenů kvadratické rovnice. V opačném případě je zavolána metoda pro výpočet komplexně sdružených kořenů kvadratické rovnice. Pokud uživatel zadá první kořen rovnice roven nule, spočtou se kořeny lineární rovnice
- 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 KvadratickaRovniceWPF

Výstup programu 2:
Ukázka výpisu hodnot reálných kořenů kvadratické rovnice v programu KvadratickaRovniceWPF
2.1. Analýza a návrh řešení
V příkladu bude využit stejný princip výpočtu kořenů jako v případě příkladu KvadratickaRovnice, proto již není zapotřebí provádět detailní analýzu.
Pro rozložení jednotlivých prvků použijeme Grid, který rozdělíme na 4 řádky - viz Obrázek 1. Do prvního řádku Grid (s indexem 0) umístíme objekt typu WrapPanel do něhož budeme vkládat 3 objekty typu TextBlock, ze kterých sestavíme předpis kvadratické rovnice. O řádek níže umístíme další WrapPanel, do kterého budeme vkládat jednotlivé objekty typu TextBox. Tyto objekty využijeme pro zadání koeficientů kvadratické rovnice. Za tyto objekty umístíme objekty typu TextBlock, aby uživatel věděl, který koeficient právě vyplňuje. Do třetího řádku řádku Grid umístíme StackPanel, do něhož vložíme objekt typu Label s popiskem "Výsledek". Pod tento objekt umístíme další objekt typu TextBox do něhož budeme vypisovat výsledný kořen, či kořeny. Do spodní části umístíme další StackPanel, do něhož umístíme dva prvky typu WrapPanel. Do prvního WrapPanel umístíme tlačítko pro výpočet kořenů zadané rovnice. Do druhého WrapPanel umístíme tlačítko pro ukončení aplikace.

Obrázek 1: Návrh GUI - rozložení prvků v mřížce formuláře (KvadratickaRovniceWPF)
Formulář bude obsahovat následující prvky - viz Obrázek 2.

Obrázek 2: Návrh GUI a účel jednotlivých objektů (KvadratickaRovniceWPF)
2.2. XAML
Popis v této kapitole bude stručný, vzhledem k tomu, že jsme již několikrát použili stejné prvky. Po nastavení minimální šířky (MinWidth) a výšky (MinHeight) okna (Window), na kterou lze okno zmenšit, rozdělíme formulář na čtyři řádky, jejichž výšky jsou nastaveny následujícím způsobem - viz Kód 1. První, druhý a čtvrtý řádek se bude přizpůsobovat obsahu vložených prvků. Třetí řádek se bude přizpůsobovat roztažení okna.
<Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions>
Kód 1: Rozdělení Grid na řádky
Druhý řádek bude obsahovat předpis kvadratické rovnice. Ten bude zapsán pomocí 3 objektů typu TextBlock vložených do WrapPanel (aby byly vypsány za sebou). Horní index specifikujeme pomocí nastavení obtékání objektu (Margin) nahoře (druhé číslo) pomocí záporné hodnoty. Nastavíme také menší velikost písma - viz Kód 2.
<WrapPanel Margin="5,20,5,5" HorizontalAlignment="Center"> <TextBlock Text="A * x" FontSize="16"/> <TextBlock Margin="0,-3,0,0" FontSize="12">2</TextBlock> <TextBlock Text=" + B * x + C = 0" FontSize="16"/> </WrapPanel>
Kód 2: Předpis kvadratické rovnice (horní index)
Do dalšího řádku, který se nachází ve druhém řádku Grid (index řádku je tedy roven 1), umístíme další WrapPanel. Tento panel bude obsahovat objekty typu TextBox, které jsou určeny pro vložení hodnoty jednotlivých koeficientů členů rovnice. Za každý objekt typu TextBox umístíme objekt typu TextBlock pro vizuální určení členu jehož hodnotu koeficientu budeme specifikovat ve zmiňovaném TextBox. Všimněte si, že pro horní index jsme využili prvek Span, jehož vlastnost pro umístění ve vertikální ose vkládaných textových objektů (BaselineAlignment) nastavíme na horní hranici tohoto prvku Span. V kombinaci s malým písmem pak tento prvek vypadá jako horní index.
<WrapPanel Grid.Row="1" Margin="10,5" HorizontalAlignment="Center"> <TextBox Name="TxtA" Margin="0,6" TextWrapping="Wrap" Text="0" Width="30" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/> <TextBlock Text="x" Margin="3,6,0,3" /> <TextBlock Margin="0,3,0,0"> <Span BaselineAlignment="Top" FontSize="8">2</Span> </TextBlock> <TextBlock Text=" + " Margin="3,6,0,3"/> <TextBox Name="TxtB" Margin="0,6" TextWrapping="Wrap" Text="0" Width="30" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/> <TextBlock Text="x + " Margin="3,6,0,3"/> <TextBox Name="TxtC" Margin="0,6" TextWrapping="Wrap" Text="0" Width="30" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/> <TextBlock Text="= 0" Margin="3,6,0,3"/> </WrapPanel>
Kód 3: Prvky typu TextBox (pro vložení hodnoty koeficientů) TextBlock (pro vizuální kontrolu) umístěné v objektu WrapPanel
<StackPanel Grid.Row="2"> <Label Content="Výsledek:" FontSize="16"/> <TextBox Name="TxtVysledek" IsReadOnly="True" Background="AliceBlue" Text="?" TextWrapping="Wrap" Padding="5" Margin="20,0,5,0"/> </StackPanel>
Kód 4: Řádek s výsledkem obsahující popisek (Label) a hodnotu vypočteného kořene (TextBox) vložených do StackPanel
Poslední řádek Grid bude obsahovat StackPanel, který využijeme pro vložení dalších dvou objektů typu WrapPanel pro zarovnání vložených tlačítek do těchto objektů v horizontální ose. První WrapPanel umístíme na střed a druhý zarovnáme doprava - viz Kód 5. Pro tlačítka vygenerujeme obsluhu události stisknutí tlačítka (událost Click) pomocí nastavení vlastnosti Click a zvolení položky <New Event Handler>.
<StackPanel Grid.Row="3"> <WrapPanel HorizontalAlignment="Center"> <Button Name="BtnVypocti" Content="Vypočti" Margin="5" Width="80" Padding="5" Click="BtnVypocti_Click"/> </WrapPanel> <WrapPanel HorizontalAlignment="Right"> <Button Name="BtnKonec" Content="Konec" Margin="5" Width="80" Padding="5" Click="BtnKonec_Click"/> </WrapPanel> </StackPanel>
Kód 5: Umístění tlačítek v objektech typu WrapPanel 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
- Label
- TextBlock
- TextBox
- TxtA
- TxtB
- TxtC
- TxtVysledek
- Button
- BtnVypocti
- 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
Nastavení 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="Kvadraticka rovnice" Height="300" Width="500" MinHeight="300" MinWidth="300">
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="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <WrapPanel Margin="5,20,5,5" HorizontalAlignment="Center"> <TextBlock Text="A * x" FontSize="16"/> <TextBlock Margin="0,-3,0,0" FontSize="12">2</TextBlock> <TextBlock Text=" + B * x + C = 0" FontSize="16"/> </WrapPanel> <WrapPanel Grid.Row="1" Margin="10,5" HorizontalAlignment="Center"> <TextBox Name="TxtA" Margin="0,6" TextWrapping="Wrap" Text="0" Width="30" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/> <TextBlock Text="x" Margin="3,6,0,3" /> <TextBlock Margin="0,3,0,0"> <Span BaselineAlignment="Top" FontSize="8">2</Span> </TextBlock> <TextBlock Text=" + " Margin="3,6,0,3"/> <TextBox Name="TxtB" Margin="0,6" TextWrapping="Wrap" Text="0" Width="30" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/> <TextBlock Text="x + " Margin="3,6,0,3"/> <TextBox Name="TxtC" Margin="0,6" TextWrapping="Wrap" Text="0" Width="30" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/> <TextBlock Text="= 0" Margin="3,6,0,3"/> </WrapPanel> <StackPanel Grid.Row="2"> <Label Content="Výsledek:" FontSize="16"/> <TextBox Name="TxtVysledek" IsReadOnly="True" Background="AliceBlue" Text="?" TextWrapping="Wrap" Padding="5" Margin="20,0,5,0"/> </StackPanel> <StackPanel Grid.Row="3"> <WrapPanel HorizontalAlignment="Center"> <Button Name="BtnVypocti" Content="Vypočti" Margin="5" Width="80" Padding="5"/> </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# s konstruktorem MainWindow stejnojmenné částečné třídy MainWindow. Tělo konstruktoru obsahuje pouze metodu InitializeComponent(). Dále byly vygenerovány soukromé (private) metody bez návratu:
- BtnVypocti_Click
- BtnKonec_Click
Jako první vytvoříme zdrojový kód pro zavření formuláře v obsluze události Click u tlačítka BtnKonec - viz Kód 1.
private void BtnKonec_Click(object sender, RoutedEventArgs e) { // Zavření formuláře this.Close(); }
Kód 1: Deklarace metody bez návratu pro zavření formuláře (BtnKonec_Click)
Pokud uživatel stiskne tlačítko BtnVypocti, bude provedena konverze všech tří zadaných hodnot koeficientů. Pokud některá ze zadaných hodnot koeficientů na formuláři nemůže být konvertována na číslo, dojde k inicializaci proměnné, do níž má být hodnota koeficientu uložena na hodnotu nula. O této skutečnosti bude uživatel informován v dialogovém oknu.
Pokud uživatel nastavil nulovou hodnotu koeficientu kvadratického členu, je spuštěna metoda bez návratu s názvem LinearniRovnice, které jsou předány hodnotou potřebné parametry koeficientů lineárního a absolutního členu. Pokud uživatel nastavil nenulovou hodnotu koeficientu kvadratického členu, je vypočten diskriminant d. Pokud je hodnota diskriminantu nenulová a větší než nula, je volána metoda pro výpočet reálných kořenů kvadratické rovnice s názvem RealneKoreny. Této metodě jsou předány hodnoty koeficientů a a b a také vypočtený diskriminant. Pokud je diskriminant záporný, je volána metoda KomplexniKoreny pro výpočet komplexně sdružených kořenů kvadratické rovnice. Pokud je diskriminant nulový, je volána metoda DvojityKoren pro výpočet dvojitého kořenu - viz Kód 2.
private void BtnVypocti_Click(object sender, RoutedEventArgs e) { /* Deklarace: 'a' ... koeficient v kvadratickém členu; 'b' ... koeficient * v lineárním členu; 'c' ... absolutní člen; * 'd' ... diskriminant */ double a, b, c, d; // Pokud nedojde ke konverzi textu na číslo if (!double.TryParse(this.TxtA.Text, out a)) // Vypsání chybové hlášky v dialogovém okně MessageBox.Show("Špatně zadaná hodnota A, program počítá s 0"); // Pokud nedojde ke konverzi textu na číslo if (!double.TryParse(this.TxtB.Text, out b)) // Vypsání chybové hlášky v dialogovém okně MessageBox.Show("Špatně zadaná hodnota B, program počítá s 0"); // Pokud nedojde ke konverzi textu na číslo if (!double.TryParse(this.TxtC.Text, out c)) // Vypsání chybové hlášky v dialogovém okně MessageBox.Show("Špatně zadaná hodnota C, program počítá s 0"); // Pokud koeficient kvadratického členu je roven nule potom... if (a == 0) // Volání metody pro výpočet lineárni rovnice LinearniRovnice(b, c); // Jinak... else { // Výpočet diskriminantu d = Math.Pow(b, 2) - 4 * a * c; // Pokud diskriminant není roven nule, potom... if (d != 0) // Pokud diskriminant je větší než nula, potom... if (d > 0) // Volání metody pro výpočet reálných kořenů kvadr. rovnice - předání parametrů RealneKoreny(a, b, d); // Jinak... else // Voláni metody pro výpočet komplexně sdružených kořenů kvadr. rovnice KomplexniKoreny(a, b, d); // Jinak... else // Zavoláni metody pro výpočet dvojitého kořenu DvojityKoren(a, b); } }
Kód 2: Deklarace metody pro výpočet kořenů kvadratické rovnice (BtnVypocti_Click)
Nad region pro obsluhu událostí stisknutí tlačítek umístíme další region s názvem Výpočty. Tento region bude obsahovat jednotlivé metody pro výpočet kořenů kvadratické, nebo lineární rovnice.
Vzhledem k tomu, že jsme již podstatu těchto metod vysvětlovali na příkladu konzolové aplikace, není zapotřebí detailně popisovat principy výpočtu jednotlivých metod. U metod zdůrazníme zejména rozdíly v zápisu oproti konzolové aplikaci.
Všechny následující metody jsou bez návratu a jsou soukromé (private), tzn., jsou tedy platné pouze pro třídu. Pokud byl zadán nulový koeficient kvadratického členu, je volána soukromá metoda třídy s názvem LinearniRovnice, které jsou předány potřebné hodnoty parametrů pro výpočet kořene. Vypočtený kořen, či text budeme vypisovat na formuláři do objektu TxtVysledek, který je typu TextBox - viz Kód 3.
//--- Specifikace metody bez návratu pro výpočet lineární rovnice 'bx + c = 0' /* Vstupní parametry (předány hodnotou): 'b' ... koeficient v lineárním * členu; 'c' ... absolutní člen */ private void LinearniRovnice(double b, double c) { // Pokud první parametr je roven nule potom... if (b == 0) // Pokud druhý parametr je roven 0 potom... if (c == 0) // Nekonečně mnoho řešení - vypsání textu v konzole this.TxtVysledek.Text = "Nekonečně mnoho řešení - každé x"; // Jinak... else // Žádné řešení - vypsání textu v konzole this.TxtVysledek.Text = "Žádné řešení - žádné x"; // Jinak... else // Vypočtení hodnoty kořenu - vypsání textu v konzole this.TxtVysledek.Text = "Lineární rovnice - kořen je: x = " + (-c / b); }
Kód 3: Deklarace soukromé metody bez návratu pro výpočet kořene lineární rovnice (LinearniRovnice)
Následující zdrojový kód obsahuje deklaraci metody RealneKoreny pro výpočet reálných kořenů kvadratické rovnice. Všimněte si, že u výpisu vypočtených kořenů do objektu TxtVysledek umístěného na formuláři jsou pomocí značky \n
v textovém řetězci vloženy dva nové řádky - viz Kód 4.
//--- Specifikace metody bez návratu pro výpočet reálných kořenů kvadr. rovnice /* Vstupní parametry (předány hodnotou): 'a' ... koeficient v kvadratickém členu; * 'b' ... koeficient v lineárním členu; 'd' ... diskriminant */ private void RealneKoreny(double a, double b, double d) { /* Deklarace: 'x1' ... první reálný kořen kvadr. rovnice; * 'x2' ... druhý reálný kořen kvadr. rovnice */ double x1, x2; // Výpočet prvního kořenu x1 = (-b + Math.Sqrt(d)) / (2 * a); // Výpočet druhého kořenu x2 = (-b - Math.Sqrt(d)) / (2 * a); // Vypočtení hodnot kořenů - vypsání textu v dialog. okně ('\n' - zařádkování) this.TxtVysledek.Text = "Kořeny jsou:\n x1 = " + x1.ToString() + "\n x2 = " + x2.ToString(); }
Kód 4: Deklarace soukromé metody bez návratu pro výpočet reálných kořenů kvadratické rovnice (RealneKoreny)
Další deklarovanou metodou bez návratu je metoda KomplexniKoreny. Metoda využívá dvě lokální reálné proměnné re představující reálnou složka kořenu kvadratické rovnice a im, která představuje imaginární složku kořenu kvadratické rovnice. Tyto složku jsou připojeny do výpisu hodnot kořenů - viz Kód 5.
//--- Specifikace metody bez návratu pro výpočet komplexně sdružených kořenů kvadr. rovnice /* Vstupní parametry (předány hodnotou): 'a' ... koeficient v kvadratickém členu; * 'b' ... koeficient v lineárním členu; 'd' ... diskriminant */ private void KomplexniKoreny(double a, double b, double d) { /* Deklarace: 're' ... reálná složka kořenu kvadr. rovnice; * 'im' ... imaginární složka kořenu kvadr. rovnice */ double re, im; // Výpočet reálné složky kořenu kvadr. rovnice re = -b / (2 * a); // Výpočet imaginární složky kořenu kvadr. rovnice im = Math.Sqrt(Math.Abs(d)) / (2 * a); // Výpis hodnot komplextních kořenů - vypsání textu v konzole ('\n' - zařádkování) this.TxtVysledek.Text = "Kořeny jsou komplexní: \n x1 = " + re.ToString() + " + " + im.ToString() + "i\n x2 = " + re.ToString() + " - " + im.ToString() + "i"; }
Kód 5: Deklarace soukromé metody bez návratu pro výpočet komplexně sdružených kořenů kvadratické rovnice (KomplexniKoreny)
Poslední soukromou metodou bez návratu je metoda DvojityKoren. Tato metoda přijímá pouze dva parametry a a b, ze kterých je vypočten dvojitý reálný kořen - viz Kód 6.
//--- Specifikace metody bez návratu pro výpočet dvojitého reálného kořene kvadr. rovnice /* Vstupní parametry (předány hodnotou): 'a' ... koeficient v kvadratickém členu; * 'b' ... koeficient v lineárním členu */ private void DvojityKoren(double a, double b) { /* Deklarace: 'x' ... dvojitý reálný kořen kvadr. rovnice */ double x; // Výpočet dvojitého reálného kořenu x = -b / (2 * a); // Vypočtení hodnoty dvojitého reálného kořenu - vypsání textu v konzole this.TxtVysledek.Text = "Dvojitý reálný kořen je:\n x = " + x.ToString(); }
Kód 6: Deklarace soukromé metody bez návratu pro výpočet dvojitého reálného kořene kvadratické rovnice (DvojityKoren)
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="KvadratickaRovniceWPF.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:KvadratickaRovniceWPF" mc:Ignorable="d" Title="Kvadratická rovnice" Height="300" Width="500" MinHeight="300" MinWidth="300"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <WrapPanel Margin="5,20,5,5" HorizontalAlignment="Center"> <TextBlock Text="A * x" FontSize="16"/> <TextBlock Margin="0,-3,0,0" FontSize="12">2</TextBlock> <TextBlock Text=" + B * x + C = 0" FontSize="16"/> </WrapPanel> <WrapPanel Grid.Row="1" Margin="10,5" HorizontalAlignment="Center"> <TextBox Name="TxtA" Margin="0,6" TextWrapping="Wrap" Text="0" Width="30" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/> <TextBlock Text="x" Margin="3,6,0,3" /> <TextBlock Margin="0,3,0,0"> <Span BaselineAlignment="Top" FontSize="8">2</Span> </TextBlock> <TextBlock Text=" + " Margin="3,6,0,3"/> <TextBox Name="TxtB" Margin="0,6" TextWrapping="Wrap" Text="0" Width="30" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/> <TextBlock Text="x + " Margin="3,6,0,3"/> <TextBox Name="TxtC" Margin="0,6" TextWrapping="Wrap" Text="0" Width="30" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/> <TextBlock Text="= 0" Margin="3,6,0,3"/> </WrapPanel> <StackPanel Grid.Row="2"> <Label Content="Výsledek:" FontSize="16"/> <TextBox Name="TxtVysledek" IsReadOnly="True" Background="AliceBlue" Text="?" TextWrapping="Wrap" Padding="5" Margin="20,0,5,0"/> </StackPanel> <StackPanel Grid.Row="3"> <WrapPanel HorizontalAlignment="Center"> <Button Name="BtnVypocti" Content="Vypočti" Margin="5" Width="80" Padding="5" Click="BtnVypocti_Click"/> </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 KvadratickaRovniceWPF { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } #region Výpočty //--- Specifikace metody bez návratu pro výpočet lineární rovnice 'bx + c = 0' /* Vstupní parametry (předány hodnotou): 'b' ... koeficient v lineárním * členu; 'c' ... absolutní člen */ private void LinearniRovnice(double b, double c) { // Pokud první parametr je roven nule potom... if (b == 0) // Pokud druhý parametr je roven 0 potom... if (c == 0) // Nekonečně mnoho řešení - vypsání textu v konzole this.TxtVysledek.Text = "Nekonečně mnoho řešení - každé x"; // Jinak... else // Žádné řešení - vypsání textu v konzole this.TxtVysledek.Text = "Žádné řešení - žádné x"; // Jinak... else // Vypočtení hodnoty kořenu - vypsání textu v konzole this.TxtVysledek.Text = "Lineární rovnice - kořen je: x = " + (-c / b); } //--- Specifikace metody bez návratu pro výpočet reálných kořenů kvadr. rovnice /* Vstupní parametry (předány hodnotou): 'a' ... koeficient v kvadratickém členu; * 'b' ... koeficient v lineárním členu; 'd' ... diskriminant */ private void RealneKoreny(double a, double b, double d) { /* Deklarace: 'x1' ... první reálný kořen kvadr. rovnice; * 'x2' ... druhý reálný kořen kvadr. rovnice */ double x1, x2; // Výpočet prvního kořenu x1 = (-b + Math.Sqrt(d)) / (2 * a); // Výpočet druhého kořenu x2 = (-b - Math.Sqrt(d)) / (2 * a); // Vypočtení hodnot kořenů - vypsání textu v dialog. okně ('\n' - zařádkování) this.TxtVysledek.Text = "Kořeny jsou:\n x1 = " + x1.ToString() + "\n x2 = " + x2.ToString(); } //--- Specifikace metody bez návratu pro výpočet komplexně sdružených kořenů kvadr. rovnice /* Vstupní parametry (předány hodnotou): 'a' ... koeficient v kvadratickém členu; * 'b' ... koeficient v lineárním členu; 'd' ... diskriminant */ private void KomplexniKoreny(double a, double b, double d) { /* Deklarace: 're' ... reálná složka kořenu kvadr. rovnice; * 'im' ... imaginární složka kořenu kvadr. rovnice */ double re, im; // Výpočet reálné složky kořenu kvadr. rovnice re = -b / (2 * a); // Výpočet imaginární složky kořenu kvadr. rovnice im = Math.Sqrt(Math.Abs(d)) / (2 * a); // Výpis hodnot komplextních kořenů - vypsání textu v konzole ('\n' - zařádkování) this.TxtVysledek.Text = "Kořeny jsou komplexní: \n x1 = " + re.ToString() + " + " + im.ToString() + "i\n x2 = " + re.ToString() + " - " + im.ToString() + "i"; } //--- Specifikace metody bez návratu pro výpočet dvojitého reálného kořenu kvadr. rovnice /* Vstupní parametry (předány hodnotou): 'a' ... koeficient v kvadratickém členu; * 'b' ... koeficient v lineárním členu */ private void DvojityKoren(double a, double b) { /* Deklarace: 'x' ... dvojitý reálný kořen kvadr. rovnice */ double x; // Výpočet dvojitého reálného kořenu x = -b / (2 * a); // Vypočtení hodnoty dvojitého reálného kořenu - vypsání textu v konzole this.TxtVysledek.Text = "Dvojitý reálný kořen je:\n x = " + x.ToString(); } #endregion #region Události private void BtnVypocti_Click(object sender, RoutedEventArgs e) { /* Deklarace: 'a' ... koeficient v kvadratickém členu; 'b' ... koeficient * v lineárním členu; 'c' ... absolutní člen; * 'd' ... diskriminant */ double a, b, c, d; // Pokud nedojde ke konverzi textu na číslo if (!double.TryParse(this.TxtA.Text, out a)) // Vypsání chybové hlášky v dialogovém okně MessageBox.Show("Špatně zadaná hodnota A, program počítá s 0"); // Pokud nedojde ke konverzi textu na číslo if (!double.TryParse(this.TxtB.Text, out b)) // Vypsání chybové hlášky v dialogovém okně MessageBox.Show("Špatně zadaná hodnota B, program počítá s 0"); // Pokud nedojde ke konverzi textu na číslo if (!double.TryParse(this.TxtC.Text, out c)) // Vypsání chybové hlášky v dialogovém okně MessageBox.Show("Špatně zadaná hodnota C, program počítá s 0"); // Pokud koeficient kvadratického členu je roven nule potom... if (a == 0) // Volání metody pro výpočet lineárni rovnice LinearniRovnice(b, c); // Jinak... else { // Výpočet diskriminantu d = Math.Pow(b, 2) - 4 * a * c; // Pokud diskriminant není roven nule, potom... if (d != 0) // Pokud diskriminant je větší než nula, potom... if (d > 0) // Volání metody pro výpočet reálných kořenů kvadr. rovnice - předání parametrů RealneKoreny(a, b, d); // Jinak... else // Voláni metody pro výpočet komplexně sdružených kořenů kvadr. rovnice KomplexniKoreny(a, b, d); // Jinak... else // Zavoláni metody pro výpočet dvojitého kořenu DvojityKoren(a, b); } } private void BtnKonec_Click(object sender, RoutedEventArgs e) { // Zavření formuláře this.Close(); } #endregion }
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ýpis vypočteného kořene lineární rovnice na formuláři aplikace v případu, že uživatel zadal hodnotu koeficientu v kvadratickém členu rovnu 0. Pro výpočet kořene byla v obsluze události Click tlačítka Vypočti zavolána metoda LinearniRovnice pomocí níž byl vypočten kořen a následně vypsán na formulář - viz Výstup programu 1 - Kód 1 a 2.

Výstup programu 1 - Kód 1 a 2: Ukázka výpisu hodnoty kořene pomocí metody LinearniRovnice v programu KvadratickaRovniceWPF
Na dalším obrázku konzolové aplikace vidíme, že uživatel zadal hodnoty koeficientů takovým způsobem, že diskriminant vyšel větší než nula. Znamená to tedy, že pro výpočet kořenů kvadratické rovnice bude v obsluze události stisknutí tlačítka zavolána metoda RealneKoreny - viz Výstup programu 2 - Kód 1 a 2.

Výstup programu 2 - Kód 1 a 2: Ukázka výpisu hodnoty kořenů pomocí metody RealneKoreny
Pokud byl vypočten ze zadaných hodnot záporný diskriminant, je v obsluze události stisknutí tlačítka Vypočti volána metoda pro výpočet komplexních kořenů (metoda KomplexniKoreny) - viz Výstup programu 3 - Kód 1 a 2.

Výstup programu 3 - Kód 1 a 2: Ukázka výpisu hodnoty kořenů pomocí metody KomplexniKoreny
Dalším testovaným případem je výpočet dvojitého kořenu kvadratické rovnice pomocí metody DvojityKoren, kdy diskriminant byl vypočten ze zadaných hodnot jako nulový - viz Výstup programu 4 - Kód 1 a 2.

Výstup programu 4 - Kód 1 a 2: Ukázka výpisu hodnoty kořene pomocí metody DvojityKoren
Zkusme si ještě zadat nečíselné textové hodnoty "bflm" u některého z koeficientů, např. u koeficientu kvadratického členu. Nebyla provedena konverze číslic (TryParse) na číselnou hodnotu v obsluze události stisknutí tlačítka. Pokud neproběhla konverze, bude spuštěno dialogové okno s výpisem chyby - viz Výstup programu 5 - Kód 1 a 2.

Výstup programu 5 - Kód 1 a 2: Výpis chyby při zadání nevalidní hodnoty koeficientu kvadratického členu
Znamená to, že koeficient A v tomto případu obsahuje nulu jako u lineární rovnice (přednastavená hodnota u typu double) a program provádí výpočet kořene pomocí volání metodu LinearniRovnice - viz Výstup programu 6 - Kód 1 a 2.

Výstup programu 6 - Kód 1 a 2: Ukázka výstupu při zadání nevalidní hodnoty koeficientu kvadratického členu (volání metody LinearniRovnice pro výpočet kořene)
Aplikaci lze ukončit pomocí tlačítka Konec, nebo pomocí zavíracího tlačítka umístěného v pravém rohu aplikace.













![x_1,_2 = \frac{-b \pm i \sqrt[]{-D} }{2 \cdot a } x_1,_2 = \frac{-b \pm i \sqrt[]{-D} }{2 \cdot a }](https://phix.zcu.cz/moodle/filter/tex/pix.php/120d0fbd9f1caaceb664c64714391434.gif)
