Programme qui ne s'exécute pas..

Résolu
Bonjour,

J'ai créé un petit programme calculant les racines du discriminant et sa valeur... Seulement, il s'arrête automatiquement après avoir entré a, b et c...

Voici le code :

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{

float a = 0, b = 0, c = 0, racinedouble = 0, delta = 0, racinedouble2 = 0, rac1 = 0, rac2 = 0;

printf(" CALCUL DU DISCRIMINANT ET SES RACINES.\n\n");
printf("\nRentrez a :\n\n");
scanf("%d",&a);
printf("\nRentrez b :\n\n");
scanf("%d",&b);
printf("\nRentrez c :\n\n");
scanf("%d",&c);

delta = (b*b)-(4*(a*c));
if ((a=0)&&(b=0))
{
printf("\n Equation degeneree : 0 ou solutions infinies.\n\n\n");
}
else if ((a=0)&&(b!=0))
{
racinedouble = (b/c);
printf("\n Il y a une racine : %d\n\n\n", racinedouble);
}
else if ((a!=0)&&(b!=0))
{

if (delta < 0)
{
printf("\n Il n'y a pas de racine reelle.\n\n");
}
else if (delta = 0)
{
racinedouble2 = (-b)/(2*a);
printf("\n Il y a une racine double : %d.\n\n", racinedouble2);
}
else if (delta > 0)
{
rac1 = (((-b)-(delta/delta))/(2*a));
rac2 = (((-b)+(delta/delta))/(2*a));
printf("\n Il y a deux solutions : %d et %d\n\n", rac1, rac2);
}

}
system("PAUSE");
}

Merci d'avance !
Configuration: Windows Vista
Firefox 3.0.1

7 réponses

  • Votes
  • Date
  • Date décroissante
  1. dans tous tes if tu affectes des valeur aux variables au lieu de les comparer...
    remplace les
    if ((a=0)&&(b=0))
    par
    if ((a==0)&&(b==0))
    1. Modérateur
      Voici la correction :
      #include <stdio.h>
      #include <stdlib.h>
      #include <math.h> // compilation gcc -W -Wall -o plop.exe plop.c -lm
      
      int main(){
          // un double est plus précis qu'un float
          double a = 0, b = 0, c = 0, delta = 0, racinedouble2 = 0, rac1 = 0, rac2 = 0;
      
          printf(" CALCUL DU DISCRIMINANT ET SES RACINES.\n");
          printf("Rentrez a :\n");
          scanf("%lf",&a); // a,b,c sont des double donc il faut lire un double (%lf)
          printf("Rentrez b :\n");
          scanf("%lf",&b);
          printf("Rentrez c :\n");
          scanf("%lf",&c);
      
          delta = (b*b)-(4*(a*c));
      
          // Attention il faut utiliser == !!!
          // Sinon tu fais une affectation et tu testes si la valeur affectée est
          // différente de 0 ou de NULL
          // Si tu compiles avec les warnings (options -W -Wall) il te prévient !
          if(a == 0){
              if(b == 0){
                  printf("Fonction constante :\n");
                  if(c==0) printf("infinité de raçines\n");
                  else printf("0 racine\n");
              }else{
                  printf("Polynôme du premier degré\n");
                  // la racine peut être un réel ! %d ne permet que d'écrire un entier !
                  // bx + c == 0 <=> x = -c/b, b != 0
                  printf("Il y a une racine : %lf\n",c ? -c/b : 0);
              }
          }else{
              if (delta < 0){
                  printf("Il n'y a pas de racine reelle.\n");
              }else if (delta == 0){
                  racinedouble2 = (-b)/(2*a);
                  printf("Il y a une racine double : %lf.\n", racinedouble2);
              }else{
                  rac1 = (-b-sqrt(delta))/(2*a);
                  rac2 = (-b+sqrt(delta))/(2*a);
                  printf("Il y a deux solutions : %lf et %lf\n", rac1, rac2);
              }
          }
      //  system("PAUSE"); // pas standard, utilise getchar
          getchar();
          return 0;
      }
      
      On compile (par exemple sous linux ça donne ça) :
      gcc -W -Wall -o plop.exe pouet.c -lm

      Et on exécute :
      (mando@aldur) (~) $ ./plop.exe
       CALCUL DU DISCRIMINANT ET SES RACINES.
      Rentrez a :
      1
      Rentrez b :
      1
      Rentrez c :
      -2
      Il y a deux solutions : -2.000000 et 1.000000

      Bonne chance
      1. Oui, je fais souvent cette erreur... Malgré tout, le problème ne change pas...
        1. Modérateur
          De rien et bonne continuation ! N'oublie pas de compiler avec les options de warning par la suite !