Domanda Risolutore equazione di 2° grado

Stato
Discussione chiusa ad ulteriori risposte.

KeepRISE

Utente Gold
25 Novembre 2012
367
77
76
261
Buonasera a tutti , avrei un problemino su un codice di c++ per la risoluzione di una equazione di 2° grado.
PI e PR sono la parte immaginaria e reale


#include <iostream>
#include <cmath>
using namespace std;

int main() {
int a,b,c,D;
float X2,X1,PR,PI;
cin>>a>>b>>c;
D=b*b-(4*a*c);
if (D>0) {X1 = [-b + sqrt ( D )] / (2*a) ;
X2 = [-b - sqrt ( D )] / 2*a ; cout<<X1<<X2;}
else if (D==0) {X1= -b/(2*a); X2=X1; cout<<X1<<X2;}
else { PR = -b/(2*a); PI = sqrt ( abs ( D)); X1= PR + i*PI; X2= PR -i*PI; cout<<X1<<X2;}
return 0;
}

Il problema lo dà sulle ultime 4 righe..ringrazio per eventuali delucidazioni.
Alla prossima!
 
Ultima modifica:
Hai usato la variabile I, senza averla dichiarate e senza averle dato nessun valore (Nei due else if)
+1 a visual studio (Microsoft rulez)
 
Se hai davvero scritto così il codice nell'IDE ci credo che puoi aver fatto un errore come quello della i, non è per criticare, ma imparare ad indentare il testo ti aiuta a leggerlo con molta più chiarezza e ad evitare errori stupidi (oltre che a risparmiare tempo). In più chi lo legge riesce ad identificare molto più velocemente il problema. Se già lo riscrivi così (e utilizzi il tag code, o php che colora le parole chiave, tanto il C++ ha una sintassi quasi identica):
PHP:
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
    int a, b, c, D;
    float X2, X1, PR, PI;
    cin >> a >> b >> c;
    D = b*b - (4*a*c);
    if (D > 0)
    {
        X1 = [-b + sqrt ( D )] / (2*a) ;
        X2 = [-b - sqrt ( D )] / 2*a ;
        cout << X1 << X2;
    }
    else if (D == 0) 
    {
        X1 = -b/(2*a);
        X2 = X1;
        cout << X1 << X2;
    }
    else
    {
        PR = -b/(2*a);
        PI = sqrt(abs ( D));
        X1 = PR + i*PI;
        X2 = PR - i*PI;
        cout << X1 << X2;
    }
    return 0;
}
Vedrai che riuscirai a capire già a colpo d'occhio cosa fa il programma. Cmq non ho corretto l'errore della i, suppongo tu stia parlando di numeri complessi giusto? Ora non ricordo la risoluzione delle equazioni di secondo grado, ma di sicuro non puoi riscrivere così com'è il valore di sqrt(-1) in i dato che non esiste nella normale radice quadrata. Ora non so se cmath abbia funzioni matematiche per risolvere i complessi, ma trovo più pratico scrivere la i nel cout per lasciar intedere quale sia la parte immaginaria. Quindi sarà una cosa del tipo: cout<<PR<<"+i"<<PI<<" "<<PR<<"-i"<<PI;
 
  • Mi piace
Reazioni: d23 e Black4Pix
Codice:
X1 = [-b + sqrt ( D )] / (2*a); 
X2 = [-b - sqrt ( D )] / 2*a;
// ...
X1 = PR + i*PI;
X2 = PR - i*PI;

:megawtf:

Mhh... no, non ci siamo. Riguardati i fondamenti del linguaggio perché stai facendo errori piuttosto radicali, stai mischiando le notazioni matematiche con la sintassi di un linguaggio di programmazione. Le parentesi quadre servono a tutt'altra cosa, e la i non è di certo una variabile!

BTW: Linee-guida sezione Programmazione
 
min***** dopo una giornata di università non c'ho nemmeno fatto caso che c'erano parentesi quadre... sto messo molto male :asd:
 
Stato
Discussione chiusa ad ulteriori risposte.