Dichotomie sur c

Chabanus Messages postés 982 Date d'inscription   Statut Membre Dernière intervention   -  
Chabanus Messages postés 982 Date d'inscription   Statut Membre Dernière intervention   -
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

  1. le père
     
    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
  2. amigo
     
    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
  3. Chabanus Messages postés 982 Date d'inscription   Statut Membre Dernière intervention   70
     
    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
  4. Chabanus Messages postés 982 Date d'inscription   Statut Membre Dernière intervention   70
     
    merci amigo ton aide m'a été trés bénéfique, je vais essayer :p
    0