Programma c++ per equazioni di secondo grado

di il
53 risposte

53 Risposte - Pagina 4

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

    @Jackie ... non ti sei accorto che l'ultima versione prevede i float?
  • Re: Programma c++ per equazioni di secondo grado

    oregon ha scritto:


    @Jackie ... non ti sei accorto che l'ultima versione prevede i float?
    Già Oregon, il problema è che io ho riscritto in C...
    Cmq ho corretto nella mia "traduzione" la int in float.
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    int main( void )
    {
        float a;
        float b;
        float c;
        float d;
        float x1;
        float x2;
    
        puts( "Inserisci il coefficiente della x al quadrato: \n" );
        scanf( "%f", &a );
        puts( "Inserisci il coefficiente della x: \n" );
        scanf( "%f", &b );
        puts( "Inserisci il coefficiente della c: \n" );
        scanf( "%f", &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 = %f", x1 );
                    printf( "\nx2 = %f", x2 );
                } else {
                        if(b==0) {
                            puts( "L'equazione e' pura" );
                            x1 = -sqrt(-c/a);
                            x2 = sqrt(-c/a);
                            printf( "\nx1 = %f", x1 );
                            printf( "\nx2 = %f", 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 = %f", x1 );
                                        printf( "\nx2 = %f", x2 );
                                    }
                                    if(d==0) {
                                        x1 = (-b)/2*a;
                                        printf( "\nx1 = %f", x1 );
                                        printf( "\nx2 = x1 = %f", x1 );
                                    }
                                    if(d<0) {
                                        puts( "Questa equazione e' impossibile in R ma ha due soluzioni complesse in C" );
                                    }
                                }
                          }
                  }
          }
    }
    
    Il problema è ora, almeno per me, verificare il programma perchè ci vorrebbero degli esercizi svolti di equazioni di secondo grado perchè io ho sparato a caso i coefficienti di x quadro, x e c....
    Per esempio in questo printscreen:

    http://prntscr.com/ftfkc

    Qualcuno ha degli esercizi svolti per verificare??? Li cercherò anche io... se potreste anche controllare se il programma è corretto, dopo lo salvo e lo uso per i miei esercizi di matematica!!...
  • Re: Programma c++ per equazioni di secondo grado

    Nota di servizio: a cagione dell'instabilità numerica NON puoi eseguire istruzioni del tipo
    "float==0"

    Breve introduzione
    https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
  • Re: Programma c++ per equazioni di secondo grado

    +m2+ ha scritto:


    Nota di servizio: a cagione dell'instabilità numerica NON puoi eseguire istruzioni del tipo
    "float==0"

    Breve introduzione
    https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
    A chi è riferito??...
    p.s.: bello lungo l'argomento!!...
    Ciao e grazie!
  • Re: Programma c++ per equazioni di secondo grado

    JackieJack1207 ha scritto:


    +m2+ ha scritto:


    Nota di servizio: a cagione dell'instabilità numerica NON puoi eseguire istruzioni del tipo
    "float==0"

    Breve introduzione
    https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
    A chi è riferito??...
    p.s.: bello lungo l'argomento!!...
    Ciao e grazie!
    A chiunque non abbia fatto Calcolo Numerico (o come si chiama oggi)
     if (a==0)
  • Re: Programma c++ per equazioni di secondo grado

    Corretto se parliamo di confronto con zero dopo aver effettuato calcoli in FP, soprattutto con valori decimali non esprimibili in FP e quindi soggetti ad errori. Ad esempio, se in input inserisco

    0.1

    e poi sommo a questo il valore -0.1 NON è possibile fare confronti con zero.

    Ma la questione non è applicabile nel caso specifico di semplice controllo del valore zero così come inserito da tastiera (senza altre manipolazioni intermedie) in quanto tale valore è perfettamente esprimibile e correttamente confrontato da istruzioni come UCOMISD (dopo che il valore è stato convertito da float a double dal compilatore).
  • Re: Programma c++ per equazioni di secondo grado


    oregon ha scritto:


    Corretto se parliamo di confronto con zero dopo aver effettuato calcoli in FP, soprattutto con valori decimali non esprimibili in FP e quindi soggetti ad errori. Ad esempio, se in input inserisco

    0.1

    e poi sommo a questo il valore -0.1 NON è possibile fare confronti con zero.

    Ma la questione non è applicabile nel caso specifico di semplice controllo del valore zero così come inserito da tastiera (senza altre manipolazioni intermedie) in quanto tale valore è perfettamente esprimibile e correttamente confrontato da istruzioni come UCOMISD (dopo che il valore è stato convertito da float a double dal compilatore).
  • Re: Programma c++ per equazioni di secondo grado

     if(d==0) 
  • Re: Programma c++ per equazioni di secondo grado

    +m2+ ha scritto:


     if(d==0) 
    Per questo sono d'accordo ...
Devi accedere o registrarti per scrivere nel forum
53 risposte