Lekce 11 - Výpočet řešení kvadratické rovnice
V minulé lekci, Výpočet libovolné mocniny, jsme si ukázali algoritmus na výpočet libovolné (n-té) mocniny.
Budeme řešit kvadratickou rovnici tvaru ax2+ bx + c = 0 v oboru reálných čísel pomocí diskriminantu.
Nejdříve zadáme z klávesnice koeficienty a
(kvadratický
člen), b
(lineární člen), c
(absolutní člen) a
podmínkou ošetříme následující případy:
1.. a = 0, b = 0, c = 0 (všechny koeficienty jsou nulové)
- Řešením je každé reálné číslo.
2.. a != 0 (kvadratický člen je různý od nuly)
Pokud se b
nebo c
rovná nule, kvadratická rovnice
je neúplná, ale lze ji spočítat. Rovnice má jedno, dvě nebo žádné
řešení. Počet řešení vypočítáme pomocí diskriminantu a zanedbáme,
že by to šlo v případě nulových koeficientů b
a
c
malinko rychleji (už takhle je tam těch podmínek dost Kdyby to někomu vadilo, není
problém upravit) d = b2 – 4ac
Pokud je d > 0, rovnice má 2 řešení:
- x1 = (-b - sqrt(b2 – 4ac)) / 2a
- x2 = (-b + sqrt(b2– 4ac)) / 2a
Pokud je d = 0, rovnice má jedno řešení:
- x = ( -b + sqrt(b2 – 4ac)) / 2a
V případě d < 0:
- Rovnice nemá v oboru reálných čísel řešení.
3.. a = 0 (kvadratický člen je nulový)
- Bez kvadratického členu se nejedná o kvadratickou rovnici. Může jít buď o rovnici lineární nebo to rovnice vůbec není.
3..a) b != 0 (b
je různé od nuly)
- Jedná se o lineární rovnici a řešením je: x = -c / b
3..b) b = 0 (b
je nulové)
- Není to rovnice, není třeba řešit.
Vývojový diagram
Zdrojový kód
Kód v PASCALu:
uses crt; var a,b,c,x1,x2,d : real; { vyznam promennych : a,b,c . . . koeficienty x1,x2 . . . koreny rovnice d . . . . . diskriminant } begin clrscr; { ************************** zadavani koeficientu ************************* } writeln('Zadejte prosim koeficienty kvadraticke rovnice: '); write('a : '); readln(a); write('b : '); readln(b); write('c : '); readln(c); { *********************** osetreni koeficientu a vypocet ********************* } if (a = 0) and (b = 0) and (c = 0) then begin writeln('Toto neni kvadraticka rovnice'); write('Vsechna realna cisla jsou resenim.'); end else if (a = 0) then begin if (b <> 0) then write('Rovnice je linearni: x = ',-c/b); else write('Toto neni rovnice!'); end else begin d:=sqr(b) - (4 * a * c); if (d > 0) then begin x1:=(-b - sqrt(sqr(b) -4 * a * c)) / (2 * a); x2:=(-b + sqrt(sqr(b) -4 * a * c)) / (2 * a); writeln('Rovnice ma dve reseni : x1 = ',x1); writeln(' x2 = ',x2); end else if (d = 0) then begin x1:=(-b - sqrt(sqr(b) -4 * a * c)) / (2 * a); writeln('Rovnice ma jedno reseni : x = ',x1); end else writeln('Rovnice nema reseni v oboru realnych cisel'); end; end.
V další lekci, Převod čísel mezi číselnými soustavami, si ukážeme algoritmy pro převod čísel mezi číselnými soustavami.