Dichotomie sur c

Fermé
Chabanus Messages postés 978 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 11 novembre 2011 - 29 févr. 2008 à 15:10
Chabanus Messages postés 978 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 11 novembre 2011 - 29 févr. 2008 à 21:07
Bonjour,
J'ai un problème je dois écrire la résolution d'un système d'équation du second degré et je dois utilisé la dichotomie, je ne suis pas très expérimentée en langage C donc j'aurais vraiment besoin d'aide, j'ai les variables x1,x2 qui doivent etre relles ainsi que delta mais je dois aussi définir une variable PRECISION valant 0,005 et tant que (borne_sup - borne_inf>=PRECISION), r2= (borne_sup + borne_inf)/2 et en comparant r3(donc sensé être la carré de r2)à delta, je dois modifier la borne adéquate? Moi, j'ai écrit ce programme déjà, je ne sais même pas si c'est juste et en plus, il me met comme erreur:
pouvez vous m'aidez svp, je dois rendre dans pas longtemps, si quelqu'un pouvait m'aider à voir si je ne fais pas fausse route et ou sont mes erreurs voilà bien deux jours que j'essaie de trouver la réponse au problème et ou sont mes erreurs mais je ne trouve pas toujours pas de resultat concret lors de l'execution.Je vous remerci d'avance pour votre aide.

# include <stdio.h>
# include <stdlib.h>
# include <math.h>
# include <float.h>
# include <string.h>
# define PRECISION 0.005

float main ()


{
float a,b,c,delta,u,borne_inf,borne_sup,r3,r2;
double x1,x2;
borne_inf = 0;
borne_sup = FLT_MAX;


printf("resolution d'un systeme d'equation du second degre\n" );
printf("ax^2+ bx + c = 0\n" );

printf("saisie du coefficient a\n" );
scanf("%f", &a);
printf("saisie du coefficient b\n" );
scanf("%f", & b);
printf("saisie du coefficient c\n" );
scanf("%f", &c);
printf("%.2f est le discriminant de cette equation\n", delta);
delta = (b*b) - (4*a*c);

if (delta<0)
{
printf("pas de solution reelle possible\n" );
}

if (delta==0)
{
printf("une seule solution reelle possible, u\n" );
u=(-b)/(2*a);
printf("%.2d\n", u);
}


while (borne_sup - borne_inf>=PRECISION);
{
r2=(borne_sup + borne_inf)/2;
r3 = r2*r2;

if (r3<delta)
{
borne_sup = (float)r2;

}
else
{
borne_inf = (float)r2;
}
}

if (delta > 0)
{
printf("deux solutions reelles possibles,x1 et x2\n" );
x1=(float)((-b - (r2))/(2*a));
x2=(float)((-b + (r2))/(2*a));
printf("%.2f\n", x1);
printf("%.2f\n", x2);
}

return 0;
}

4 réponses

Bonjour

Plusieurs choses m'intriguent :
. tu parles d'un système d'équation (sans 's' ?') alors que normalement, un système a plusieurs équations. Je passe sur l'orthographe, mais le problème est très différent selon qu'il s'agit d'une équation unique ou d'un système.
. tu dois utiliser la dichotomie. Dans le programme que tu donnes, tu n'utilise la dichotomie que pour chercher la racine carrée du discriminant, pas pour résoudre l'équation à proprement parler.
. ça doit planter dès le départ parce que tu pars avec comme bornes 0 et FLT_MAX. Tu prends la moyenne, tu as FLT_MAX / 2 , dès que tu élèves au carré, boum, ça doit faire exploser ton processeur ! (façon de parler)
. enfin, je crois bien que tu fais l'affectation borne_sup / borne_inf en fonction de ton test est à l'envers
0
Bonjour,

Je me premets aussi de faire quelques remarques

borne_inf = 0;
borne_sup = FLT_MAX;
/*l'affectation de borne_sup nest pas bien placée
borne_sup doit etre egale au discriminant donc il faut d'abord
le calculer/*

printf("%.2f est le discriminant de cette equation\n", delta);
delta = (b*b) - (4*a*c);
/*tu veux afficher la valeur de delta avant de l'avoir calculé
ça ira mieux si tu inverse les deux lignes*/


if (delta<0)
{
printf("pas de solution reelle possible\n" );
}
/*si le test es verifié le programme est terminé
donc il ne faut pas executer le reste du code
on quitte par return(0);
ou alors il faut ecrire un test du genre
si (delta<0) alors .... sinon si (delta==0) alors ... sinon ....;*/

if (delta==0)
{
/*....*/
}
/*meme remarque*/

if (delta > 0)
{
/*...*/
}
/*ce test n'est pas necessaire puisque si delta n'est ni <0 ni==0
alors il ne peut etre que >0*/

/*enfin je crois aussi que l'affectation de borne_sup et borne_inf
en fonction du test est à l'envers*/
0
Chabanus Messages postés 978 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 11 novembre 2011 70
29 févr. 2008 à 20:13
en effet, mais cela n'est qu'une partie d'un long programme, je voudrais aussi trouver les iterations de l'equation, merci comme même
0
Chabanus Messages postés 978 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 11 novembre 2011 70
29 févr. 2008 à 21:07
merci amigo ton aide m'a été trés bénéfique, je vais essayer :p
0