Kvadratická rovnice
2. KvadratickaRovniceWPF
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.