Programma c++ per equazioni di secondo grado

di il
53 risposte

53 Risposte - Pagina 3

  • Re: Programma c++ per equazioni di secondo grado

    Dunque...prima di quella riga che, di fatto funziona, c'era un else che mandava a schermo i cout del caso in cui l'equazione è completa.Provate a compilare ora questo codice dove al posto di quella riga ho messo un else e inserite a= 4 b=0 c=-1 e vederete che il programma dà il risultato giusto ma poi stampa qualcosa che non deve stampare. Perche?


    #include <iostream>
    #include <cmath>
    #include <stdlib.h>
    using namespace std;

    float a;
    float b;
    float c;
    float x1;
    float x2;
    float d;

    int main (){

    cout<<"Inserisci a:";
    cin>>a;
    cout<<"inserisci b:";
    cin>>b;
    cout<<"Inserisci c:";
    cin>>c;

    if(a==0)
    {
    x1=x2=-(c/b);
    cout<<"l'equazione e' di primo grado\n";
    cout <<x1;
    }

    if(b==0)
    {
    x1 = sqrt(-(c/a));
    x2 = -sqrt(-(c/a));
    cout<<"l'equazione e' pura\n";
    cout <<x1<<endl;
    cout <<x2<<endl;

    }

    if(c==0)
    {
    x1 = 0;
    x2 = -(b/a);
    cout <<"l'equazione e' spuria\n";
    cout<<x1<<endl;
    cout <<x2<<endl;
    }
    else
    {
    d = sqrt((b*b)-(4*a*c));


    if (d>0){

    x1=((-b+d)/(2*a));
    x2=((-b-d)/(2*a));

    cout << "L'equazione ha due radici reali distinte"<<endl;
    cout << "La prima soluzione e':"<<x1<<endl;
    cout << "La seconda soluzione e':"<<x2<<endl;
    }

    if (d<0){

    cout <<"Impossibile in R, ha due soluzioni in C";
    }
    if (d==0){

    x1 = (-b)/(2*a);

    cout <<"x1"<<endl;

    }
    system("PAUSE");
    return 0;
    }
    }
  • Re: Programma c++ per equazioni di secondo grado

    1) Usa i tag CODE per il codice e l'indentazione corretta altrimenti non si capisce NULLA

    2) "stampa qualcosa" ... magari ci puoi dire cosa?

    Comunque ... NON va bene la else ... comprendi il perché? La else si riferisce a c==0 ... quindi interviene nel caso in cui c è diverso da zero, ovvero il caso che hai indicato tu ... (c -1)

    Devi usare quella linea che avevi usato prima ma CORRETTA

    E POI correggi anche la parte del calcolo della radice del delta, che è sbagliata ...
  • Re: Programma c++ per equazioni di secondo grado

    Allora, posso scrivere quell'else in modo tale che non si riferisca solo al c=0 ma a tutto il blocco e che esegua le istruzioni per il calcolo di un'equazione completa nel caso le condizioni a=0, b=0, c=0 non siano soddisfatte. Quella linea funziona nel programma, perchè dovrebbe essere sbagliata stessa cosa per il delta , entrambe funzionano cosa sbaglio? Quando esegua il programma e metto un'equazione non completa alla fine mi stampa

    cout << "L'equazione ha due radici reali distinte"<<endl;
    cout << "La prima soluzione e':"<<x1<<endl;
    cout << "La seconda soluzione e':"<<x2<<endl;
  • Re: Programma c++ per equazioni di secondo grado

    ... in modo tale ....
    Per scrivere correttamente NON devi usare la else ma la if che ti ho indicato prima ma scritta in modo corretto ... in C non si scrive in quel modo. Hai compreso?

    Per il delta, non funziona proprio. Devi controllare se il contenuto della sqrt è minore, maggiore o uguale a zero e non il risultato della sqrt (che non potrà mai essere minore di zero). Rivedi la parte matematica perché ti stai confondendo.
  • Re: Programma c++ per equazioni di secondo grado

    Io sto scrivendo in c++ c'è diffrenza col C o è uguale? Ho capito cosa intendi per controllare la radice ma come?Ma se il delta non è negativo allora anche la radice esiste. E' per caso una cosa del tipo:

    if(sqrt(b*b-4*a*c)<0 )
    cout << "l'equazione è impossibile";

    else (e qui come continuo?)
  • Re: Programma c++ per equazioni di secondo grado

    La if

    if((a && b && c)!=0)

    è COMUNQUE sbagliata, in C e in C++.

    Per il delta NO. Scusa ma mi sembra di parlare con un muro.
    Ti ho già detto che la radice viene DOPO. Il delta è

    delta = (b*b-4*a*c)

    ed è solo questo che devi controllare se è minore, maggiore o uguale a zero. RIPETO ... rivedi la parte matematica
  • Re: Programma c++ per equazioni di secondo grado

    Il delta l'ho controllato se è maggiore minore o uguale ma la radice non ho idea di come farlo, invece per l'if pensi che così sia giusto: if (a && b && c !=0) ?
  • Re: Programma c++ per equazioni di secondo grado

    Potresti controllare ora se è giusto?
    
    #include <iostream>
    #include <cmath>
    #include <stdlib.h>
    using namespace std;
    
    float a;
    float b;
    float c;
    float x1;
    float x2;
    float d;
    
    int main (){
    
    cout<<"Inserisci a:";
    cin>>a;
    cout<<"inserisci b:";
    cin>>b;
    cout<<"Inserisci c:";
    cin>>c;
    
    if(a==0)
    {
      x1=x2=-(c/b);
      cout<<"l'equazione e' di primo grado\n";
      cout <<"La soluzione e': "<<x1;
    }
    
    if(b==0)
    {
        x1 = sqrt(-(c/a));
        x2 = -sqrt(-(c/a));
        cout<<"l'equazione e' pura\n";
        cout <<"La prima soluzione e': "<<x1<<endl;
        cout <<"La seconda soluzione e': "<<x2<<endl;
    
    }
    
    if(c==0)
    {
        x1 = 0;
        x2 = -(b/a);
        cout <<"l'equazione e' spuria\n";
        cout<<"La prima soluzione e': "<<x1<<endl;
        cout <<"La seconda soluzione e': "<<x2<<endl;
    }
    
    if (a && b && c!=0)
    {
    d =((b*b)-4*(a*c));
    
    if (d>0){
    
      x1=(-b+sqrt(d))/(2*a);
      x2=(-b-sqrt(d))/(2*a);
    
          cout << "L'equazione ha due radici reali distinte"<<endl;
          cout << "La prima soluzione e':"<<x1<<endl;
          cout << "La seconda soluzione e':"<<x2<<endl;
    }
    
    if (d<0){
    
        cout <<"Impossibile in R, ha due soluzioni in C";
    }
    if (d==0){
    
        x1 = (-b)/(2*a);
    
        cout <<"Le soluzioni sono coincidenti: "<<"x1"<<endl;
    
            }
            system("PAUSE");
            return 0;
        }
    }
    
  • Re: Programma c++ per equazioni di secondo grado

    No .... la if non si scrive così. Ripeti i tre confronti ...

    Anche se può sembra uguale, in molti casi può essere fonte di problemi ... Si scrive

    if (a!=0 && b!=0 && c!=0)

    Ma l'hai un libro?


    Per il delta, adesso va bene ... come vedi è molto diverso da prima ...
  • Re: Programma c++ per equazioni di secondo grado

    Già il delta era davvero una stupidaggine ma pensavo per l'if che quando si hanno molti parametri pensavo che l'operatore != si mettesse solo una volta e invece no. No non ho ancora un buon libro di c, c++ mi baso su guide su internet e youtube, se puoi mi consiglierest un buon libro che sia italiano o inglese non ha importanza l'importante che sia completo con tutti gli argomenti e i dovuti approfondimenti anche su ciò che avviene dietro le quinte a livello hardware. Grazie mille per l'assistenza e la pazienza.
  • Re: Programma c++ per equazioni di secondo grado

    Mi sembra che te l'hanno consigliato già un libro in altro thread ... poi ne esistono tantissimi (amazon) e sono tutti buoni ... L'hardware non c'entra nulla con il linguaggio, il libro lo trovi sul linguaggio...
  • Re: Programma c++ per equazioni di secondo grado

    Ok, ma una volta risolta una discussione come si fa a chiuderla?
  • Re: Programma c++ per equazioni di secondo grado

    Non si chiude
  • Re: Programma c++ per equazioni di secondo grado

    Ah ok
  • Re: Programma c++ per equazioni di secondo grado

    oregon ha scritto:


    @Jackie ... se indenti meglio il codice trovi l'errore facilmente.
    Ok, giusto; ora il codice sembra corretto e funzionante:

    http://prntscr.com/ft4dx
    http://prntscr.com/ft4ea

    http://prntscr.com/ft4g4

    http://prntscr.com/ft4ij

    http://prntscr.com/ft4ix

    http://prntscr.com/ft4j4
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    int main( void )
    {
        int a;
        int b;
        int c;
        int d;
        int x1;
        int x2;
    
        puts( "Inserisci il coefficiente della x al quadrato: \n" );
        scanf( "%d", &a );
        puts( "Inserisci il coefficiente della x: \n" );
        scanf( "%d", &b );
        puts( "Inserisci il coefficiente della c: \n" );
        scanf( "%d", &c );
    
        if (a==0) {
            puts( "L'equazione non e' di secondo grado" );
            x1=x2=-(b/a);
            puts( "x1<<endl" );
        } else {
                if(c==0) {
                    puts( "L'equazione e' spuria" );
                    x1 = 0;
                    x2 = -(b/a);
                    printf( "\nx1 = %d", x1 );
                    printf( "\nx2 = %d", x2 );
                } else {
                        if(b==0) {
                            puts( "L'equazione e' pura" );
                            x1 = -sqrt(-c/a);
                            x2 = sqrt(-c/a);
                            printf( "\nx1 = %d", x1 );
                            printf( "\nx2 = %d", x2 );
                        } else {
                                if((a && b && c)!=0) {
                                    d= (b*b)-4*a*c;
                                    if(d>0) {
                                        x1 = ((-b)-sqrt(d))/2*a;
                                        x2 = ((-b)+sqrt(d))/2*a;
                                        printf( "\nx1 = %d", x1 );
                                        printf( "\nx2 = %d", x2 );
                                    }
                                    if(d==0) {
                                        x1 = (-b)/2*a;
                                        printf( "\nx1 = %d", x1 );
                                        printf( "\nx2 = x1 = %d", x1 );
                                    }
                                    if(d<0) {
                                        puts( "Questa equazione e' impossibile in R ma ha due soluzioni complesse in C" );
                                    }
                                }
                          }
                  }
          }
    }
    
    Il probelma però è ancora quello della scelta della variabile in quanto un float sarebbe più indicato di un int...
    Grazie del programmino, spero funzioni ora!!!
Devi accedere o registrarti per scrivere nel forum
53 risposte