Posez votre question Signaler

Dichotomie sur c

Chabanus 982Messages postés 23 décembre 2007Date d'inscription 11 novembre 2011Dernière intervention - Dernière réponse le 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;
}
Lire la suite 

Dichotomie sur c »

4 réponses
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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*/
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
merci amigo ton aide m'a été trés bénéfique, je vais essayer :p
Ajouter un commentaire
Ce document intitulé « dichotomie sur c » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
5 extensions si vous voulez revenir à l'ancien Facebook