Programma c++ per equazioni di secondo grado

di il
53 risposte

Programma c++ per equazioni di secondo grado

Ho fatto questo programmino in c++ che calcola le equazioni di 2° in tutte le possibili forme. Funziona con la console di windows, quando inserisco le variabili il programma finisce ignorando lo switch. Perche? Cosa ho sbagliato? Potreste spiegarmi come fare la selezione con lo switch tra le opzioni in cui a=0(eq. di primo grado) b=0(equazione pura) c=0(equazione spuria) a,b,c diversi da zero(equazione completa). Penso di aver sbagliato impostando lo switch.Grazie in anticipo.
Ecco il codice:


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

int a;
int b;
int c;
int x1;
int x2;
int d;
int tipoDiEquazione=0;

int main()
{
cout <<"Inserisci l'equazione \n";
cout <<"Inserisci il coefficiente della a: \n";
cin >>a;
cout <<"Inserisci il coefficiente della b: \n";
cin >>b;
cout <<"Inserisci il coefficiente della c: \n";
cin >>c;

switch(tipoDiEquazione)
{
case 1:
if (a==0)
{
cout <<"L'equazione non e' di secondo grado";
x1=x2=-(b/a);
cout <<x1<<endl;
}
break;

case 2:
if(c==0)
{
cout <<"L'equazione e' spuria";
x1 = 0;
x2 = -(b/a);
cout <<x1;
cout <<x2;
}
break;

case 3:
if(b==0)
{
cout <<"L'equazione e' pura";
x1 = -sqrt(-c/a);
x2 = sqrt(-c/a);
cout <<x1;
cout <<x2;
}
break;

case 4:
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;

}
if(d==0)
{
x1 = (-b)/2*a;
}
if(d<0)
{
cout <<"Questa equazione e' impossibile in R ma ha due soluzioni complesse in C"<<endl;
}

}
system("PAUSE");
return 0;
}
}

53 Risposte

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

    Sei sicuro che i coefficienti siano tutti interi?
  • Re: Programma c++ per equazioni di secondo grado

    No ho messo int per provare ma il problema è un'altro
  • Re: Programma c++ per equazioni di secondo grado

    E le soluzioni x1 x2 possono essere solo intere?
  • Re: Programma c++ per equazioni di secondo grado

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

    All'ingresso dello switch

    tipoDiEquazione

    è 0.

    Quindi lo switch non serve a niente.
  • Re: Programma c++ per equazioni di secondo grado

    Il mio problema è che io ho impostato lo switch...case per controllare il tipo di equazione(pura, spuria o completa) ma ho sbagliato sintassi su questo e dunque non funziona.
  • Re: Programma c++ per equazioni di secondo grado

    Vedi risposta corretta precedente. Non hai sbagliato sintassi, altrimenti non avresti neanche compilato. E' la logica del tuo programma che non va bene.
  • Re: Programma c++ per equazioni di secondo grado

    Hai impostato tipoDiEquazione = 0 dunque lo switch salta tutti i casi ( a=0, b=0, c=0 e a,b,c!=o ). Credo sia sufficiente non inizializzare la variabile tipoDiEquazione ma solo definirla come int tipoDiEquazione;. Bel programmino però! ))
  • Re: Programma c++ per equazioni di secondo grado

    No ... non basta Jackie ...

    Semmai non va usato proprio lo switch ...
  • Re: Programma c++ per equazioni di secondo grado

    In che formato va scritta l'equazione??? Potresti fare un esempio di input per l'equazione, in modo da poter capire anche io, grazie...

    Ho modificato il programma in C (so usare solo questo ed anche a mala pena!! ); riporto il codice ed il printscreen... http://prntscr.com/fsah3
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    
    int a;
    int b;
    int c;
    int x1;
    int x2;
    int d;
    int tipoDiEquazione;
    
    int main( void )
    {
        puts( "Inserisci l'equazione \n" );
        scanf( "%d", &tipoDiEquazione );
        puts( "Inserisci il coefficiente della a: \n" );
        scanf( "%d", &a );
        puts( "Inserisci il coefficiente della b: \n" );
        scanf( "%d", &b );
        puts( "Inserisci il coefficiente della c: \n" );
        scanf( "%d", &c );
    
        
        switch(tipoDiEquazione)
        {
            case 1:
                if (a==0) {
                    puts( "L'equazione non e' di secondo grado" );
                    x1=x2=-(b/a);
                    puts( "x1<<endl" );
                }
                break;
        
        case 2:
            if(c==0) {
                puts( "L'equazione e' spuria" );
                x1 = 0;
                x2 = -(b/a);
                puts( "x1" );
                puts( "x2" );
            }
            break;
        
        case 3:
            if(b==0) {
                puts( "L'equazione e' pura" );
                x1 = -sqrt(-c/a);
                x2 = sqrt(-c/a);
                puts( "x1" );
                puts( "x2" );
            }
            break;
        
        case 4:
            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;
                }
                if(d==0) {
                    x1 = (-b)/2*a;
                }
                if(d<0) {
                    puts( "Questa equazione e' impossibile in R ma ha due soluzioni complesse in C" );
                }
        
            }
        system("PAUSE");
        return 0;
        }
    }
    
  • Re: Programma c++ per equazioni di secondo grado

    JackieJack1207 ha scritto:


    In che formato va scritta l'equazione??? Potresti fare un esempio di input per l'equazione, in modo da poter capire anche io, grazie...
    Mi sembra chiaro che ha in input i 3 coefficienti a b c dell'equazione di 2 grado

    ax2+bx+c=0
    Ho modificato
    Come ti ho detto prima, così ha meno senso di prima. Evidentemente non vi è chiaro il funzionamento e l'utilizzo del costrutto switch.
  • Re: Programma c++ per equazioni di secondo grado

    Dunque ho capito che in questo tipo di programma lo switch non funziona quindi devo usare tutta una cascata di if else. L'input è dato dai 3 coefficienti
  • Re: Programma c++ per equazioni di secondo grado

    No, non hai capito a cosa serve e come si usa lo switch. Questo "tipo" di programmi non c'entra nulla.

    Devi esaminare i 3 coefficienti per determinare il tipo di equazione, non avviene per magia.
  • Re: Programma c++ per equazioni di secondo grado

    Ma in questo caso usando lo switch posso controllare i 3 coefficienti o no? Posso farlo solo con una sequenza di if? In effetti non ho capito benissimo l'argomento sulla selezione multipla. Qualche spiegazione sullo switch riguardo al problema?
Devi accedere o registrarti per scrivere nel forum
53 risposte