Rechercher : dans
Par :

Dichotomie sur c

Dernière réponse le 29 fév 2008 à 21:07:34 Chabanus, le 29 fév 2008 à 15:10:07 
 Signaler ce message aux modérateurs

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;
}

Meilleures réponses pour « dichotomie sur c » dans :
La compilation et les modules en C et en C++ VoirCet article a pour vocation d'introduire les notions de bases de la compilation en C et en C++ et de la programmation modulaire. Il permet de mieux comprendre les messages d'erreur du compilateur. Les notions abordées ici sont indépendantes du...
3D Secure / Verified by Visa / SecureCode: Qu'est-ce que c'est ? VoirDepuis octobre 2008, les banques et commerçants en ligne ont commencé à adopter le système 3DSecure pour les paiements sur Internet. Qu'est-ce que c'est ? 3DSecure est appelé "Verified by Visa" chez Visa, et "SecureCode" chez Mastercard. (Les logos...
Les files en langage C VoirLes files - Premier Entré Premier Sorti Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la file IV. Opérations sur les files A. Initialisation B. Insertion d'un élément dans la file C. Oter un...
Télécharger Visual C++ Express VoirVisual C++ Express est une version "gratuite" et allégée de Visual Studio ; l'utilisation requiert l'inscription sur le site de Microsoft. Cet environnement de développement permet de créer des application Win32 ou du .NET C.
Langage C++ - Les types de données VoirLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître...
Les chaînes de caractères en C++ VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une...
Langage C - Les types de données VoirLes types de données Les données manipulées en langage C sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître l'occupation mémoire (le...

1

le père, le 29 fév 2008 à 17:33:55
  • +1

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

Répondre à le père

2

amigo, le 29 fév 2008 à 20:10:14

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*/

Répondre à amigo

3

Chabanus, le 29 fév 2008 à 20:13:54

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

Répondre à Chabanus

4

 Chabanus, le 29 fév 2008 à 21:07:34

Merci amigo ton aide m'a été trés bénéfique, je vais essayer :p

Répondre à Chabanus