edutecnica

Esercizio 6       

Data l'equazione di II° grado ax2+bx+c=0 dove a,b,c sono numeri reali qualsiasi scrivi la procedura e descrivi il suo diagramma di flusso tenendo conto dei seguenti casi:
1) a≠0 b e c qualsiasi
2)a=b=0 c≠0
3)a=b=c=0
4)a=0 b≠0 c qualsiasi.
Per ciascuno dei casi indicati la procedura deve condurre alla determinazione delle soluzioni o alla segnalazione di situazioni singolari (indeterminata, impossibile, etc..)



Si distinguono i due casi principali dove a≠0 ed a=0 in quest’ultimo caso l’equazione si riduce a: bx+c=0 che fornisce come soluzione x=-c/b in questo caso avremo:

1) b=c=0 l’eq. si riduce ad una identità 0=0 la risposta sarà cout << "identità" .
2) b=0 c≠0 ne segue che x=-c/0=infinito la risposta sarà cout << "impossibile".
3) b≠0 c=0 ne segue che x=-0/b la risposta sarà cout << 0 oppure cout << -c/b.
4) b≠0 c≠0 la risposta sarà cout << -c/b:

Alla luce delle considerazioni precedenti il diagramma a blocchi del ramo a=0 può essere illustrato come in figura.
Nel caso a≠0 basterà automatizzare la procedura con la formula risolutiva del trinomio di II°grado; allo scopo verrà usata la variabile d (discriminante) con:
d=b*b-4*a*c
se d≥0 allora si può usare la formula risolutiva
    che in linguaggio C viene scritta come:
X1=(-b+sqrt(d))/(2*a)
X2=(-b-sqrt(d))/(2*a)

Se d<0 non vi sono soluzioni in campo reale e quindi la risposta sarà: cout << "impossibile".



si viene ad ottenere il seguente codice sorgente:


#include<iostream>
#include<math.h>
using namespace std;
main(){
float a,b,c,d;
cout<<"a:";cin>>a;
cout<<"b:";cin>>b;
cout<<"c:";cin>>c;
if(!a){
     if(!b && !c)cout<<"identità";
     else if(!b && c)cout<<"impossibile";
     else cout<<-c/b;
     }
else{
d=b*b-4*a*c;
if(d<0)cout<<"-impossibile-";
else {
     cout<<(-b+sqrt(d))/(2*a)<<" ";
     cout<<(-b-sqrt(d))/(2*a);
     }
}//fine if(!a)
}//fine main