Programma c++ per equazioni di secondo grado

di Anonimizzato21817 il
53 risposte

53 Risposte - Pagina 2

  • Lo switch controlla il valore di una variabile ed esegue pezzi di codice corrispondenti ai case.
    Ovvero usa una variabile che tu devi avere impostato PRIMA di eseguire lo switch.
  • olegfresi ha scritto:


    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
    Anche io avevo pensato di riprovare con gli if...else, solo che mi dice: http://prntscr.com/fseou

    Il codice in C è qui sotto ed ho fatto un paio di modifiche come per esempio:
    1) int a;
    int b;
    int c;
    int d;
    int x1;
    int x2;

    dove x1 ed x2 sono le due radici dell'equazione di secondo grado;
    a,b,c sono i coefficienti;

    senza le altre variabili (secondo me sono inutili);

    2) sostituire lo switch che sinceramente non centra perchè è una funzione di selezione multipla dove tu imposti dei casi predefiniti in base al valore della variabile (che tu avevi messo tipoDiEquazione e tra l'altro l'avevi impostata sul valore 0...) e che il compilatore riconosce e per quanto io ne sappia (sono ancora alle prime armi con il C) nello switch ci devi mettere oltre il CASE: anche il DEFAULT: ....

    Riporto il codice, se qualcuno mi corregge le parentesi posso continuare perchè non sono d'accordo sul printscreen (o meglio non riesco a trovare l'errore). Grazie e ciao! ....
    
    #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);
                puts( "x1" );
                puts( "x2" );
            } else {
              if(b==0) {
                  puts( "L'equazione e' pura" );
                  x1 = -sqrt(-c/a);
                  x2 = sqrt(-c/a);
                  puts( "x1" );
                  puts( "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;
                      }
                      if(d==0) {
                          x1 = (-b)/2*a;
                      }
                      if(d<0) {
                          puts( "Questa equazione e' impossibile in R ma ha due soluzioni complesse in C" );
                      }
                }
              }
          }
    }
    
  • @Jackie ... se indenti meglio il codice trovi l'errore facilmente.
  • Ok, dunque in questo caso uso semplicemente if ed else poichè lo switch non può funzionare.
  • Non è che non funziona in questo caso, non ha senso!

    Rivedi il suo funzionamento nel libro.
  • Ho ho tolto lo switch e messo if else ma rimane un problemino...se in un'equazione pura il numero sotto radice è negativo che condizione devo mettere nell'if?Una curiosità: quale sarebbe un'eventuale algoritmo che controlla se un numero sotto radice è un quadrato perfetto?
  • Sono incappato in un altro errore: quando l'equazione non è completa il programma mi dà la soluzione ma poi ricade nel cout del caso dell'equazione completa. Provate a compilare il codice e mettete a = 0 o un'equazione spuria o pura e poi vedrete l'errore che non dovrebbe stampare.
  • X olegfresi: qui il cross posting non è ammesso.
    Se vuoi continuare su questo forum metti un backlink verso questa discussione e convoglia tutto qui.
    Se vuoi continuare nell'altro forum, qui chiudo.

    Fammi sapere
  • Continuo qui ma cos'è un backlink
  • Ok fatto
  • Posta nuovamente il codice corretto così si fanno le prove di cui parli.
  • Eccolo qui:


    #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;
    }
    system("PAUSE");
    return 0;

    if ((a && b && c)!=0)
    {
    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;
    }
    }
  • Questa linea

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

    non si scrive in quel modo. Rivedila.
Devi accedere o registrarti per scrivere nel forum
53 risposte