Programme qui ne s'exécute pas..

Résolu
Yuku Messages postés 215 Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
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

  1. mype Messages postés 2459 Date d'inscription   Statut Membre Dernière intervention   437
     
    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
  2. mype Messages postés 2459 Date d'inscription   Statut Membre Dernière intervention   437
     
    tu es sur d'avoir tout remplacer... meme le
    else if (delta = 0)
    ?
    1
  3. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    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
  4. Yuku
     
    Oui, je fais souvent cette erreur... Malgré tout, le problème ne change pas...
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Yuku
     
    Ah oui, merci beaucoup, c'est exact !
    0
  7. Yuku Messages postés 215 Statut Membre 4
     
    Merci beaucoup !
    0
  8. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    De rien et bonne continuation ! N'oublie pas de compiler avec les options de warning par la suite !
    0