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