[c] Résolution d'une équation du seconde degré sur DEVCPP

Résolution d'une équation du seconde degré sur DEVCPP [c] - C - Programmation

Marsh Posté le 23-09-2007 à 12:20:37    

Bonjour tout le onde, je dois faire un programme sur devcpp pour résoudre une équation du deuxième degré.
Voici mon programme mais j'ai un problème au else juste aprés le system(pause).
Si vous voyez quelque chose de faux, cela serait sympa de me dire ce qui ne vas pas.
merci
 
 
 
 

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
 
int main(void)
{double A, B, C;
double D, X1, X2, Re, Img, X;
 
printf("\nVeuillez saisir votre variable A: \n" );
scanf("%lf", &A);
printf("\nVeuillez saisir votre variable B: \n" );
scanf("%lf", &B);
printf("\nVeuillez saisir votre variable C: \n" );
scanf("%lf", &C);
 
D=B*B-4*A*C;
X1=-B+sqrt(D)/2*A;
X1=-B-sqrt(D)/2*A;
Re=B/2*A;
Img=sqrt(-D);
X=-C/B;
 
if(A!=0)
{printf("delta=%lf", D);
      if(D>=0)
       {printf("X1=%lf, X2=%lf", X1, X2);    
       }     else{printf("Re=%lf, Img=%lf", Re, Img);
                 printf("Z1=%lf+%lf*j, Img=%lf-%lf*j", Re, Img, Re, Img);
                 }
           
              if(D!=0)
               {printf("X1=%lf, X2=%lf", X1, X2);      
               }
                 else{printf("X1=%lf", X1);  
                     }
}
 else{
       
      if(B!=0)
      {printf("X=%lf", X);      
      }


       
 
problème de compilation
           
 

else{            
              if(C==0)
              {printf("0=0, ensemble des solutions infini" );  
              }
                   
                     else{printf("\n Il n'y a donc pas de solution\n" );
                     }
                         }
                         
     }
 system("pause" );
 return 0;
 
}
}


Message édité par zondervan le 23-09-2007 à 14:09:24
Reply

Marsh Posté le 23-09-2007 à 12:20:37   

Reply

Marsh Posté le 23-09-2007 à 13:54:04    

1) c'est assez idiot de calculer la racine carrée de delta avant de tester si delta est négatif
2) tu calcules 2 fois X1
3) if (C=0) => sans commentaire
 
Remarque perso: si tu commences à venir polluer le forum pour des problèmes aussi triviaux t'as pas fini. Commence déjà par faire attention à ce que t'écrits. Et essayer de dégrossir un peu l'algo sur un papier n'est pas une mauvaise idée non plus. Par exemple ça ne sert à rien d'aller calculer delta si A = 0 et ça évite au truc de partir en torche quand tu divises par 2*A...
 
PS: mettre "D" en double alors qu'il reçoit un calcul d'int ça marche mais c'est dommage...
PS2: Je vois pas à quoi sert la variable "Img"


Message édité par Sve@r le 23-09-2007 à 14:01:47

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 23-09-2007 à 14:00:34    

juste avant ta réponse j'ai fais quelque modification dont le C=0 mais sa bloque toujours.
Aprés je pensais que ce forum servait à s'aider, tout le monde ne maitrîse pas le langage C....
La variable Img c'est pour les solutions imaginaires...


Message édité par zondervan le 23-09-2007 à 14:01:22
Reply

Marsh Posté le 23-09-2007 à 14:04:03    

Il doit manquer des opérateurs de multiplication à cette ligne-ci : D=B*B-4AC;

Reply

Marsh Posté le 23-09-2007 à 14:05:28    

ok merci j'ai modifié mais sa bloque a l'autre else sans doute a cause d'une accolade :(

Reply

Marsh Posté le 23-09-2007 à 14:08:22    

j'ai déja essayer de bien aligner les if et else mais je galère quand même

Reply

Marsh Posté le 23-09-2007 à 14:14:47    

zondervan a écrit :

ok merci j'ai modifié mais sa bloque a l'autre else sans doute a cause d'une accolade :(


 
ok. Commence par indenter les choses. Ecrits un code "propre" et l'erreur sautera peut-être plus facilement aux yeux. Et poste ton code entre des balises "[f.i.x.e.d]" "[/f.i.x.e.d]" (enlève le "." quand tu écrits les balises)
 
Voici ton code reécrit

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
 
int main(void)
{
    double A, B, C;
    double D, X1, X2, Re, Img, X;
 
    printf("\nVeuillez saisir votre variable A: \n" );
    scanf("%lf", &A);
    printf("\nVeuillez saisir votre variable B: \n" );
    scanf("%lf", &B);
    printf("\nVeuillez saisir votre variable C: \n" );
    scanf("%lf", &C);
 
    D=B*B-4*A*C;
    X1=-B+sqrt(D)/2*A;
    X1=-B-sqrt(D)/2*A;
    Re=B/2*A;
    Img=sqrt(-D);
    X=-C/B;
 
    if (A!=0)
    {
        printf("delta=%lf", D);
        if(D>=0)
        {
             printf("X1=%lf, X2=%lf", X1, X2);    
        }
        else
        {
             printf("Re=%lf, Img=%lf", Re, Img);
             printf("Z1=%lf+%lf*j, Img=%lf-%lf*j", Re, Img, Re, Img);
        }
           
        if (D!=0)
        {
             printf("X1=%lf, X2=%lf", X1, X2);      
        }
        else
        {
             printf("X1=%lf", X1);  
        }
    }
    else
    {
        if(B!=0)
        {
             printf("X=%lf", X);      
        }
        // problème de compilation
        else
        {            
             if(C==0)
             {
                 printf("0=0, ensemble des solutions infini" );  
             }                  
             else
             {
                 printf("\n Il n'y a donc pas de solution\n" );
             }
         }                
     }
     system("pause" );
     return 0;
}
}


Et oh que vois-je ? Une accolade de trop à la fin !!!
 

zondervan a écrit :

Aprés je pensais que ce forum servait à s'aider, tout le monde ne maitrîse pas le langage C....


Oui mais faut quand-même commencer par te sortir les doigts du luc et faire un effort personnel avant de venir chouiner sur le fofo. Et écrire un code indenté fait partie des efforts personnels...


Message édité par Sve@r le 23-09-2007 à 14:17:24

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 23-09-2007 à 14:21:20    

OK merci de ton aide, je vais quand même essayer de résoudre les derniers bugs que je rencontre.

Reply

Marsh Posté le 23-09-2007 à 15:41:40    

zondervan a écrit :

OK merci de ton aide, je vais quand même essayer de résoudre les derniers bugs que je rencontre.


Ben déjà toute ta partie calculs de delta, solutions X1, X2, relles et imaginaires à placer dans le bloc si A != 0. Et éviter de calculer sqrt(D) si D < 0. Ensuite, le reste devient trivial...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 23-09-2007 à 16:33:30    

Merci à tous, j'ai modifié mon programme mais j'ai encore un petit problème c'est quand mon delta=0, il m'affiche X1 X2 et X1, bien que les valeurs soient logiquement les mêmes je ne comprend pourquoi il me les affiches 3 fois. De même, quand delta>0, il m'affiche X1, X2 et encore une fois X1, X2 comme si delta>0 rentrez dans 2 blocs!
 
 


#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
 
int main(void)
{
    double A, B, C;
    double D, X1, X2, Re, Img, X;
 
    printf("\nVeuillez saisir votre variable A: \n" );
    scanf("%lf", &A);
    printf("\nVeuillez saisir votre variable B: \n" );
    scanf("%lf", &B);
    printf("\nVeuillez saisir votre variable C: \n" );
    scanf("%lf", &C);
 
   
    X=-C/B;
   
 
    if (A!=0)
    {D=B*B-4*A*C;        
     printf("\ndelta=%lf\n", D);
         
        if(D>=0)
        {X1=(-B+sqrt(D))/2*A;
         X2=(-B-sqrt(D))/2*A;
         printf("\nX1=%lf, X2=%lf\n", X1, X2);    
         
        if (D!=0)
        {
        printf("\nX1=%lf, X2=%lf\n", X1, X2);      
        }
        else
        {
             printf("\nX1=%lf\n", X1);  
        }
               
        }
        else
        {Re=B/2*A;
         Img=sqrt(-D);
             printf("\nRe=%lf, Img=%lf\n", Re, Img);
             printf("\nZ1=%lf+%lf*j, Img=%lf-%lf*j\n", Re, Img, Re, Img);
        }
           
         
    }
    else
    {
        if(B!=0)
        {
             printf("\nX=%lf\n", X);      
        }
 
        else
        {            
             if(C==0)
             {
                 printf("\n0=0, ensemble des solutions infini\n" );  
             }                  
             else
             {
                 printf("\n Il n'y a donc pas de solution\n" );
             }
          }                
     }
     system("pause" );
     return 0;
}

Reply

Marsh Posté le 23-09-2007 à 16:33:30   

Reply

Marsh Posté le 23-09-2007 à 17:27:00    

zondervan a écrit :

Merci à tous, j'ai modifié mon programme mais j'ai encore un petit problème c'est quand mon delta=0, il m'affiche X1 X2 et X1, bien que les valeurs soient logiquement les mêmes je ne comprend pourquoi il me les affiches 3 fois. De même, quand delta>0, il m'affiche X1, X2 et encore une fois X1, X2 comme si delta>0 rentrez dans 2 blocs!
<...>


Faut pas utiliser scanf() si tu n'es pas un expert...


 
Veuillez saisir votre variable A:
a
 
Veuillez saisir votre variable B:
 
Veuillez saisir votre variable C:
 
delta=0.000000
 
X1=0.000000, X2=0.000000
 
X1=0.000000, X2=0.000000
Appuyez sur une touche pour continuer...


Je suppose que A B et C sont des 'coefficients' ou des paramètres' de l'équation, mais en aucun cas des 'variables'...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 23-09-2007 à 17:30:09    

Il ne faut pas utliser scanf alors? j'ai mis variable mais c'est en effet bien les coefficients de l'équation.... mais cela a un rapport avec mon  problème?

Reply

Marsh Posté le 23-09-2007 à 18:16:08    

zondervan a écrit :

Il ne faut pas utliser scanf alors?


Sauf si tu maitrises. Sinon, il est plus simple d'utiliser fgets() et strtod() ou strtol() selon les besoins.

Citation :


j'ai mis variable mais c'est en effet bien les coefficients de l'équation.... mais cela a un rapport avec mon  problème?


Non.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 23-09-2007 à 18:41:51    

ok merci quand même du conseil

Reply

Marsh Posté le 24-09-2007 à 08:36:36    

zondervan a écrit :

Merci à tous, j'ai modifié mon programme mais j'ai encore un petit problème c'est quand mon delta=0, il m'affiche X1 X2 et X1, bien que les valeurs soient logiquement les mêmes je ne comprend pourquoi il me les affiches 3 fois. De même, quand delta>0, il m'affiche X1, X2 et encore une fois X1, X2 comme si delta>0 rentrez dans 2 blocs!


Bien sûr. tu fais des tests si delta >= 0 donc tu y rentres même si delta = 0. Et tu rentres aussi dans le else du delta != 0 donc ça t'affiche tous les printf de ces cas. Pour bien le voir, fais des affichages un peu différents à chaque fois comme ça tu verras bien quel affichage correspond quel cas...


Message édité par Sve@r le 24-09-2007 à 08:36:56

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed