Programma c++ per equazioni di secondo grado

di Anonimizzato21817 il
53 risposte
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

  • Sei sicuro che i coefficienti siano tutti interi?
  • No ho messo int per provare ma il problema è un'altro
  • E le soluzioni x1 x2 possono essere solo intere?
  • No
  • All'ingresso dello switch

    tipoDiEquazione

    è 0.

    Quindi lo switch non serve a niente.
  • 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.
  • Vedi risposta corretta precedente. Non hai sbagliato sintassi, altrimenti non avresti neanche compilato. E' la logica del tuo programma che non va bene.
  • 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ò! ))
  • No ... non basta Jackie ...

    Semmai non va usato proprio lo switch ...
  • 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;
        }
    }
    
  • 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.
  • 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
  • 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.
  • 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