RÉSOLUTION AUTOMATIQUE DES TRINOMES DU SECOND DÉGRÉ.

gnairod Messages postés 37 Date d'inscription samedi 22 novembre 2008 Statut Membre Dernière intervention 11 avril 2010 - 29 juil. 2009 à 20:15
lemuria1 Messages postés 7 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 18 août 2009 - 18 août 2009 à 10:32
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/50381-resolution-automatique-des-trinomes-du-second-degre

lemuria1 Messages postés 7 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 18 août 2009
18 août 2009 à 10:32
Perso voici mon code , j'ai mis pas mal de truc inutile dedans , c'est cool pour se familiariser avec le C.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define carre(x) x * x//Macro pour le Carré de X.
#define racine(x) sqrt(x)//Macro pour la racine-carré , c'est plus beau.

int main()
{

double a,x,b,c,delta = 0 ;
double *PointeursurA = &a;
double *PointeursurB = &b;
double *PointeursurC = &c;
printf ("Recsolution d'ecquation du type ax%c + bx + c par lemuria.\n",0xFD);
printf ("Une equation du second degre est de la forme ax%c + bx + c = 0 \n Veuillez indiquer A \a : ",0xFD);//On indique A
scanf("%lf", &a);
printf("L'adresse de la variable A est : %d \n", &PointeursurA);
printf("Valeur de A (pointeur) : %.2lf \n", *PointeursurA);

printf (" Veuillez indiquer B \a: ");
scanf("%lf", &b);
printf("L'adresse de la variable age est : %d \n", &b);
printf("Valeur de B (pointeur) : %.2lf \n", *PointeursurB);

printf (" Veuillez indiquer C \a : ");//On Indique C
scanf("%lf", &c);
printf("Valeur de C (pointeur) : %.2lf \n", *PointeursurC);
printf("L'adresse de la variable age est \a : %d \n", &c);

printf("\n \a\a\a\a Resume\n A = %.2lf , B = %.2lf et C = %.2lf \n \n",a,b,c);// On resume la situation ^^
delta = carre(b);
printf ("B %c = %.2lf \n \n", 0xFD,delta );
delta = delta - (4 * ((a) * (c)));
printf (" B%c-4ac = %.2lf \n \n", 0xFD, delta );
if ( delta < 0)
{
printf ("L'equation n'admet aucune solution.\n");
system("PAUSE");
}
else if ( delta == 0)
{
printf ("L'equation admet une solution. ",b,a );
x = ( (- (b)) / (2 * a)) ;
printf("X= %.2lf \n",x);
system("PAUSE");
}
else if ( delta > 0)
{
printf ("L'equation admet 2 solution.\n Premiere solution \n",b,delta );
x = ( -(b) + (racine(delta))) / (2*a );
printf("X= %.2lf \n",x);#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define carre(x) x * x//Macro pour le Carré de X.
#define racine(x) sqrt(x)//Macro pour la racine-carré , c'est plus beau.

int main()
{

double a,x,b,c,delta = 0 ;
double *PointeursurA = &a;
double *PointeursurB = &b;
double *PointeursurC = &c;
printf ("Recsolution d'ecquation du type ax%c + bx + c par lemuria.\n",0xFD);
printf ("Une equation du second degre est de la forme ax%c + bx + c = 0 \n Veuillez indiquer A \a : ",0xFD);//On indique A
scanf("%lf", &a);
printf("L'adresse de la variable A est : %d \n", &PointeursurA);
printf("Valeur de A (pointeur) : %.2lf \n", *PointeursurA);

printf (" Veuillez indiquer B \a: ");
scanf("%lf", &b);
printf("L'adresse de la variable age est : %d \n", &b);
printf("Valeur de B (pointeur) : %.2lf \n", *PointeursurB);

printf (" Veuillez indiquer C \a : ");//On Indique C
scanf("%lf", &c);
printf("Valeur de C (pointeur) : %.2lf \n", *PointeursurC);
printf("L'adresse de la variable age est \a : %d \n", &c);

printf("\n \a\a\a\a Resume\n A = %.2lf , B = %.2lf et C = %.2lf \n \n",a,b,c);// On resume la situation ^^
delta = carre(b);
printf ("B %c = %.2lf \n \n", 0xFD,delta );
delta = delta - (4 * ((a) * (c)));
printf (" B%c-4ac = %.2lf \n \n", 0xFD, delta );
if ( delta < 0)
{
printf ("L'equation n'admet aucune solution.\n");
system("PAUSE");
}
else if ( delta == 0)
{
printf ("L'equation admet une solution. ",b,a );
x = ( (- (b)) / (2 * a)) ;
printf("X= %.2lf \n",x);
system("PAUSE");
}
else if ( delta > 0)
{
printf ("L'equation admet 2 solution.\n Premiere solution \n",b,delta );
x = ( -(b) + (racine(delta))) / (2*a );
printf("X= %.2lf \n",x);
printf ("Deuxieme solution \n");
x = ( -(b) - (sqrt(delta) )) / (2*a );
printf("X= %.2lf \n",x);
system("PAUSE");
}
return 0 ;
}
cs_Altaris Messages postés 6 Date d'inscription jeudi 2 octobre 2008 Statut Membre Dernière intervention 25 mai 2009
2 août 2009 à 10:52
Sympa comme code mais tu pourrais l'améliorer pour des résolutions avec discriminant négatif...
MisterFelx Messages postés 1 Date d'inscription mardi 28 juillet 2009 Statut Membre Dernière intervention 30 juillet 2009
30 juil. 2009 à 02:22
Merci, il est vrai qu'il manque pas mal de chose. Mais j'était tellement pressé de poster mon premier code que j'ai peut-être un peu baclé certaines parties :/
Merci encore pour ces idées d'améliorations
gnairod Messages postés 37 Date d'inscription samedi 22 novembre 2008 Statut Membre Dernière intervention 11 avril 2010
29 juil. 2009 à 20:15
qq remarques :
Fonction polynome du second degre : f(x) = ax^2 + bx + c, f(x) : R->R.
(a,b,c) appartient a R donc a,b,c doit-etre de type float ou double (pour la precision).
Ensuite il faut construire un bon algorithme de resolution et cela passe par la decomposition des actions complexes.

algorithme :

fonction discriminant(entree Reel a, entree Reel b, entree Reel c) retourne Reel
debut
retourner ( b * b - 4 * a * c );
fin

// Solve ax^2 + bx + c = 0
// x0 : premiere racine
// x1 : deuxieme racine
// renvoie vrai si des solutions existe dans R
// renvoie faux s'il n'existe pas de solutions dans R
fonction resoudre(entree Reel a, entree Reel b, entree Reel c, sortie Reel x0, sortie Reel x1) retourne Booleen
debut
b := faux;

si a = 0 alors
lever_exception();
fin si;
delta := discriminant(a, b , c);
si delta >= 0 alors
b := vrai;
x0 = (-b - sqrt(delta)) / (2*a);
x1 = (-b + sqrt(delta)) / (2*a);
sinon
b := faux;
fin si;
retourner ( b );
fin
Rejoignez-nous