Polynome et formule quadratique en c

Résolu/Fermé
acrony Messages postés 14 Date d'inscription mardi 23 novembre 2010 Statut Membre Dernière intervention 2 décembre 2010 - 1 déc. 2010 à 16:13
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 - 2 déc. 2010 à 17:08
Bonjour,


je sais que le code que je mets en ligne est loin d'être complet et qu'il ne fonctionnera donc pas. Il s'agit de la résolution d'un polynôme en utilisation la formule quadratique, je ne sais pas si je suis sur le bon chemin...quelqu'un pourrait m'éclairer s'il vous plait? Merci.

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

int main()
{
int a, b, discrim;
const c;
double s1, s2;

c = -4; s1 = 0; s2 = 0;
printf("f(x)= ax2 + bx + c = 0\n");
discrim = (b*b) - (4 * a * c);
if (discrim < 0)
{
printf("There is no solution");
}
else
if (discrim = 0)
{
s1 = s2 = - b/(2*a)
printf("There is one solution");
printf ("%f", s1);

}
else
if (discrim > 0)
{
s1 = (-b - racine(discrim)) / (2*a);
s2 = (-b + racine(discrim)) / (2*a);
printf("There are two solutions");
printf ("%f", s1); printf ("%f", s2);

}

return 0;
}
A voir également:

2 réponses

Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
Modifié par Pacorabanix le 1/12/2010 à 16:28
salut,

je pense que le principe de ton programme est exactement le bon,

néanmoins je vois déjà plusieurs petites erreurs (tout à fait classiques pour les débutants ;) )

tout d'abord, je pense que l'idée de ton programme est de résoudre ton polynome selon le a, b et c que l'utilisateur entre via le clavier.

là tu définis c comme une constante (de quel type ??? ) et a et b comme des entiers mais tu ne leur donnes jamais aucune valeur.


ensuite, je ne suis pas sûr que a et b et le déterminant soient forcément des entiers...

en plus si tu utilises des entiers tu risques d'avoir des problème dans tes calculs. (en faisant des calculs avec des int, le programme va calculer... un int ! donc meme si la division donne un nombre à virgule, ça va être tronqué).


ensuite, une petite erreur aussi ici :

if (discrim = 0)


là tu ne testes pas si le discriminant fait zéro ou pas. Tu lui assignes la valeur zéro.
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
1 déc. 2010 à 16:30
et pour faire plus joli, tu pourrais afficher le bon polynome dont tu t'occupes au lieu d'afficher simplement :
printf("f(x)= ax2 + bx + c = 0\n");

par exemple :

printf("f(x)= %dx2 + %dx + %d = 0\n", a, b, c);
ou avec des %f... selon le type que tu décides de donner à a, b et c.
0
acrony Messages postés 14 Date d'inscription mardi 23 novembre 2010 Statut Membre Dernière intervention 2 décembre 2010
2 déc. 2010 à 12:51
Salut Pacorabanix

je mets en ligne le code avec tes orientations. J'ai quand même un gros soucis en tant que super débutant:
c'est le calcul de la racine carrée. Comment je peux programmer ca? Merci de tes orientations, si tu peux m'aider encore ce serait sympa...
#include <stdio.h>
#include <stdlib.h>

int main()
{

double s1, s2, a, b, c, discrim;

c = 0; s1 = 0; s2 = 0, b = 0, a = 0;

printf(" Input a \n");
scanf("%f", &a);
printf(" Input b \n");
scanf("%f", &b);
printf(" Input c\n");
scanf("%f", &c);

printf("f(x)= %fx2 + %f + %f = 0\n", a, b, c);

discrim = (b*b) - (4 * a * c);
if (discrim < 0)
{
printf("There is no solution");
}
else
if (discrim == 0)
{
s1 = s2 = - b/(2*a)
printf("There is one solution");
printf ("%f", s1);

}
else
if (discrim > 0)
{
s1 = (-b - racine(discrim)) / (2*a);
s2 = (-b + racine(discrim)) / (2*a);
printf("There are two solutions");
printf ("%f", s1); printf ("%f", s2);

}

return 0;
}
0
acrony Messages postés 14 Date d'inscription mardi 23 novembre 2010 Statut Membre Dernière intervention 2 décembre 2010
2 déc. 2010 à 13:03
j'ai trouve la fonction sqrt.
#include <math.h>
#include <stdio.h>
#include <stdlib.h>

int main()
/*{
int x = 69;
printf("%d => %lf\n",x,sqrt(x));
return 0;
}*/
{

float s1, s2, a, b, c, discrim;

c = 0; s1 = 0; s2 = 0, b = 0, a = 0;

printf(" Input a \n");
scanf("%f", &a);
printf(" Input b \n");
scanf("%f", &b);
printf(" Input c\n");
scanf("%f", &c);

printf("f(x)= %fx2 + %f + %f = 0\n", a, b, c);

discrim = (b*b) - (4 * a * c);
if (discrim < 0)
{
printf("There is no solution");
}
else
if (discrim == 0)
{
s1 = s2 = - b/(2*a);
printf("There is one solution");
printf ("%f", s1);

}
else
if (discrim > 0)
{
s1 = (-b - sqrt(discrim)) / (2*a);
s2 = (-b + sqrt(discrim)) / (2*a);
printf("There are two solutions");
printf ("%f", s1); printf ("%f", s2);

}

return 0;
}
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
Modifié par Pacorabanix le 2/12/2010 à 13:15
pour la racine carrée, il faut inclure la bibliothèque <math.h>, et ensuite tu pourras utiliser la fonction sqrt() (comme "SQare RooT").

et sinon je te propose maintenant de tester toi-même ton programme, qui devrait compiler après ça :)

et fais bien sûr des calculs "à la main" avec des polynômes faciles, avant de les rentrer dans ton programme, pour tester si ton programme donne des réponses juste dans les divers cas de figure.


PS : utilises la balise "code" lorsque tu écris dans le forum !

sélectionne ton programme et clique sur le bouton "code" à coté de gras italique souligné.

EDIT : ah ben tu m'as grillé pour sqrt.
0
acrony Messages postés 14 Date d'inscription mardi 23 novembre 2010 Statut Membre Dernière intervention 2 décembre 2010
2 déc. 2010 à 14:06
Ça marche, mais je voudrais savoir s'il existe une solution ou je pourrais utiliser des pointeurs
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
2 déc. 2010 à 13:16
tiens, voilà mon site préféré pour programmer en C/C++ (pour les trucs basiques)

http://www.cplusplus.com/reference/cmath/
0