Zad. 2. Napisz program, który wyznaczy pierwiastki równania kwadratowego. W przypadku, gdy tych pierwiastków nie ma program powinien wyświetlić komunikat: "Brak pierwiastków".
Rozwiązanie
Rozpatrujemy następujące równanie:
$$ax^2+bx+c=0,\:gdzie\:a \neq 0$$
Współczynnik a musi być różny od 0 ponieważ dla a = 0 otrzymujemy równanie liniowe.
Pierwiastkami równania kwadratowego (inaczej miejscami zerowymi lub rozwiązaniami równania) nazywamy takie miejsca na osi X, gdzie przecina się wykres funkcji. Inaczej mówiąc wartość y jest równa zero. Przy obliczaniu pierwiastków mamy trzy opcje.
Wszystko zależy od wyróżnika równania kwadratowego zwanego deltą. Wzór na deltę wygląda następująco:
$$\Delta = b^2-4ac$$
Dla $$\Delta > 0$$ otrzymujemy dwa miejsca zerowe, które wyliczamy według wzorów:
$$x_1=\frac{-b-\sqrt{\Delta}}{2a}$$
$$x_2=\frac{-b+\sqrt{\Delta}}{2a}$$
Dla przykładu rozpatrzmy równanie:
$$x^2+x-2=0$$
Współczynniki są równe:
$$a=1, b=1, c=-2$$,
a więc
$$\Delta=1^2-4 \cdot 1 \cdot (-2)=9$$
$$x_1=\frac{-1-\sqrt{9}}{2 \cdot 1}=-2$$
$$x_2=\frac{-1+\sqrt{9}}{2 \cdot 1}=1$$
Wynika stąd, że wykres funkcji przetnie oś X w punktach: -2 i 1. Dodatkowo
$$a>0$$
co sprawia, że ramiona paraboli będą skierowane do góry. Wykres tej funkcji wygląda następująco:
Drugi przypadek mamy gdy $$\Delta=0$$. Mamy wtedy jedno miejsce zerowe wyznaczane według wzoru:
$$x_0=\frac{-b}{2a}$$
Rozpatrzmy równanie:
$$-2x^2+4x-2=0$$
$$\Delta=4^2-4\cdot(-2)\cdot (-2)=0$$
$$x_0=\frac{-4}{2\cdot (-2)}= 1$$
Skoro
$$a<0$$
więc ramiona paraboli skierowane są do domu i wykres ma tylko jeden punkt wspólny z osią OX.
Wykres danej funkcji wygląda następująco:
Ostatni przypadek mamy w sytuacji gdy $$\Delta<0$$.
Rozpatrzmy równanie:
$$x^2+x+1=0$$
$$\Delta = 1^2 - 4\cdot1\cdot1 = -3 < 0$$
Wynika stąd, że równanie nie posiada pierwiastków. Wykres wygląda następująco:
Rozwiązanie problemu w języku C++:
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
double a, b, c, x1, x2, x0, delta;
cout<<"Podaj współczynniki a, b i c: ";
cin>>a>>b>>c;
delta = b*b - 4*a*c;
if(delta>0) //jeśli delta jest większa od 0 to mamy dwa miejsca zerowe
{
delta = sqrt(delta); //wyznaczamy pieriwastek z delty
x1 = (-b - delta)/(2*a);
x2 = (-b + delta)/(2*a);
cout<<"Są dwa pierwiastki równania: "<<fixed<<setprecision(2)<<x1<<" "<<x2;
}
else
if(delta==0)
{
x0 = -b/(2*a);
cout<<"Jest jeden pierwiastek: "<<fixed<<setprecision(2)<<x0;
}
else
cout<<"Brak pierwiastków";
return 0;
}