#include <cstdlib>
#include <iostream>
#include <complex>
#include <cmath>
#include <utility>
using namespace std;
// Definizione del tipo adatto a contenere le radici dell'equazione
typedef pair < complex <double>, complex <double> > Radici;
Radici EquazioneIIgrado(double a, double b, double c);
main()
{ // Test della funzione EquazioneIIgrado
Radici soluzione;
double a, b, c;
cout << "\n\tTest della funzione che risolve un'equazione di II grado\n" <<
endl;
cout << "Scrivi i coefficienti a, b e c: ";
cin >> a >> b >> c;
soluzione = EquazioneIIgrado(a, b, c);
cout << "x1: = " << soluzione.first << endl;
cout << "x2: = " << soluzione.second << endl;
system("pause");
}
Radici EquazioneIIgrado(double a, double b, double c)
{
Radici s; // Conterrà la coppia di numeri complessi, radici dell'equazione
double delta = b * b - 4 * a * c;
if(delta == 0)
// Soluzioni reali e coincidenti (parte immaginaria 0)
s.first = s.second = complex <double> ( -b / (2 * a) );
else if(delta > 0) {
// Soluzioni reali (parte immaginaria 0)
s.first = complex <double> ( (-b - sqrt(delta)) / (2 * a) );
s.second = complex <double> ( (-b + sqrt(delta)) / (2 * a) );
}
else {
// Soluzioni complesse coniugate
s.first = complex <double> ( -b, -sqrt(-delta) ) / (2 * a);
s.second = complex <double> ( -b, sqrt(-delta) ) / (2 * a);
}
return s;
}
Implementazione di una funzione che risolve un'equazione di II grado con radici complesse
Uso del template standard complex e di pair.