
In questa lezione risolveremo le equazioni di secondo grado in C++.
Affronteremo questo esercizio per approfondire ancora le funzioni in C++.
Abbiamo già proposto lo stesso esercizio in C, se volete potete seguire il link: equazioni in C.
Equazioni di secondo grado
Un’equazione di secondo grado scritta nella forma canonica è:
ax2+bx+c=0
Per risolvere questa equazione occorre conoscere i valori dei coefficienti a, b e c.
Dopo occorre trovare il delta o determinante utilizzando questa formula: b*b-4*a*c.
In base al risultato potremmo trovarci in tre situazioni distinte:
nel caso in cui il determinante è minore di zero, allora non esistono soluzioni reali;
se invece il determinante è uguale a zero, l’equazione ammette due soluzioni reali coincidenti;
infine, se il determinante è maggiore di zero, l’equazione ammette due soluzioni reali distinte.
Inoltre osserviamo che, se il coefficiente a è uguale a zero, non ci troveremmo più di fronte ad un’equazione di secondo grado ma ovviamente di primo grado: bx+c. Dunque non si potrà applicare la formula.
Quando le soluzioni esistono si ottengono con questa formula:
x1=(-b+sqrt(determinante))/2*a
x2=(-b-sqrt(determinante))/2*a
utilizziamo sqrt (dalla libreria cmath) come funzione per il calcolo della radice quadrata.
Strutturiamo il programma scomponendolo in sottoprogrammi:
funzione coefficienti() per prendere in input i coefficienti.
funzione determinante() per il calcolo del determinante.
funzioni soluzioni() per il calcolo delle soluzioni.
funzione equazione_primo() nel caso in cui l’equazione sia di primo grado.
Ecco il listato completo del programma in C++ per il calcolo delle equazioni di secondo grado.
#include <iostream>
#include <cmath>
using namespace std;
float a, b, c;
double x1,x2,d;
void coefficienti()
{
cout<<"coefficiente a:\t";
cin>>a;
cout<<"coefficiente b:\t";
cin>>b;
cout<<"coefficiente c:\t";
cin>>c;
}
void determinante()
{
d=b*b-4*a*c;
}
void soluzioni()
{
if(d<0)
cout<<"non possono esserci soluzioni reali"<<endl;
else if(d==0) {
x1=(-b)/(2*a);
cout<<"Due soluzioni reali coincidenti x1 e x2: "<<x1;
}
else
{
x1=(-b-sqrt(d))/(2*a);
x2=(-b+sqrt(d))/(2*a);
cout<<"Due soluzioni reali distinte x1: "<<cout<<x1<<" e x2"<<cout<<x2;
}
}
void equazione_primo()
{
if((b==0)&&(c==0))
cout<<"\nequazione indeterminata";
else if(b==0)
cout<<"\nequazione impossibile";
else {
x1=-c/b;
cout<<"x: "<<x1;
}
}
main()
{
coefficienti();
if(a==0)
equazione_primo();
else {
determinante();
soluzioni();
}
system("pause");
}
Chiaramente questo è solo un esempio di possibile risoluzione di un’equazione di secondo grado in C++.
Alcuni link utili
Passaggio di parametri per valore o per riferimento
Iterazioni con il ciclo for in C++
Esercizi con switch case in C++
Come utilizzare lo switch case in C++
Successione di Fibonacci in C++