Pierwiastki równania kwadratowego

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:

Wykres funkcji kwadratowej

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:

Wykres funkcji kwadratowej

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:

Wykres funkcji kwadratowej

 

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;
}

 

powrót