Programme qui ne s'exécute pas..

Résolu
Yuku Messages postés 215 Statut Membre -  
mamiemando Messages postés 34209 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 !

7 réponses

mype Messages postés 2449 Statut Membre 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
mype Messages postés 2449 Statut Membre 437
 
tu es sur d'avoir tout remplacer... meme le
else if (delta = 0)
?
1
mamiemando Messages postés 34209 Date d'inscription   Statut Modérateur Dernière intervention   7 896
 
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
Yuku
 
Oui, je fais souvent cette erreur... Malgré tout, le problème ne change pas...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

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