Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3113 connectés 

  FORUM HardWare.fr
  Programmation
  C

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1614211
zondervan
Posté le 23-09-2007 à 12:20:37  profilanswer
 

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
mood
Publicité
Posté le 23-09-2007 à 12:20:37  profilanswer
 

n°1614226
Sve@r
Posté le 23-09-2007 à 13:54:04  profilanswer
 

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.
n°1614228
zondervan
Posté le 23-09-2007 à 14:00:34  profilanswer
 

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
n°1614229
dap++
Script kiddie
Posté le 23-09-2007 à 14:04:03  profilanswer
 

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

n°1614230
zondervan
Posté le 23-09-2007 à 14:05:28  profilanswer
 

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

n°1614232
zondervan
Posté le 23-09-2007 à 14:08:22  profilanswer
 

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

n°1614234
Sve@r
Posté le 23-09-2007 à 14:14:47  profilanswer
 

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.
n°1614236
zondervan
Posté le 23-09-2007 à 14:21:20  profilanswer
 

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

n°1614251
Sve@r
Posté le 23-09-2007 à 15:41:40  profilanswer
 

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.
n°1614264
zondervan
Posté le 23-09-2007 à 16:33:30  profilanswer
 

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;
}

mood
Publicité
Posté le 23-09-2007 à 16:33:30  profilanswer
 

n°1614272
Emmanuel D​elahaye
C is a sharp tool
Posté le 23-09-2007 à 17:27:00  profilanswer
 

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/
n°1614273
zondervan
Posté le 23-09-2007 à 17:30:09  profilanswer
 

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?

n°1614282
Emmanuel D​elahaye
C is a sharp tool
Posté le 23-09-2007 à 18:16:08  profilanswer
 

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/
n°1614287
zondervan
Posté le 23-09-2007 à 18:41:51  profilanswer
 

ok merci quand même du conseil

n°1614338
Sve@r
Posté le 24-09-2007 à 08:36:36  profilanswer
 

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.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

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

 

Sujets relatifs
besoin d'aide pour resolution equation scd. degré (vb)Adapter mon image de fond en fonction de la résolution de l'écran
[html] problème d'affichage selon la résolution[resolu]Equation de la chaleur en 2D. Problème avec mon logiciel.
Correction programme vb équation 3 em degrésDevcpp pour les nuls [Débutant]
Programmation d'une équation du troisième degrésRésolution site internet ??
Plus de sujets relatifs à : [c] Résolution d'une équation du seconde degré sur DEVCPP


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR