Programme qui ne s'exécute pas..

Résolu
Yuku Messages postés 199 Date d'inscription   Statut Membre Dernière intervention   -  
mamiemando Messages postés 33772 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 2435 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
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
tu es sur d'avoir tout remplacer... meme le
else if (delta = 0)
?
1
mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
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 199 Date d'inscription   Statut Membre Dernière intervention   4
 
Merci beaucoup !
0
mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
De rien et bonne continuation ! N'oublie pas de compiler avec les options de warning par la suite !
0