Les Allergies
Alimentaires
Posez votre question Signaler

Programmation en C équation du 3 ième degré

flopiflop 3Messages postés 5 mai 2009Date d'inscription - Dernière réponse le 6 mai 2009 à 16:12
Bonjour,
j'ai réaliser un programme en C qui effectue la résolution d'une équation du troisième degré.
la méthode est la suivante: je crée mes fonctions dans le .C
je crée les proptotype dans header.H
j'execute mes fonctions dans le main.C
apparement c'est un méthode de programmation plus professionnelle
le problème qui se pose c'est que j'ai une valeur pour Xn >>> (très grande)!!!!!
et que la méthode de newton ne fonctionne pas correctement!!!!
quelqu'un peut il m'aider à trouver l'erreur voiçi le code:
/***Fonction.C***/
#include<e:\info\p2x.h>
#include<e:\info\p2x.c>
#include<e:\info\p3x.h>
#include<stdio.h>
#include<conio.h>
#include<math.h>
void resolution_P3(double *p_tab)
{
double a,b,r,R,xd,pre=1e-5,x_newton;
double tab[4],tbl[3];
if(p_tab[0]==0)
{
resolution(p_tab+1);
}
else
{
if(p_tab[3]==0)
{
printf("\r\n\n x=0 celle ci est une racine evidente");
resolution(p_tab);
}
else
{
a = max_coeff (tab+1); /*calcul de R selon a*/
R = 1+(a/(fabs(p_tab[0])));
b = max_coeff (tab);/*calcul de r selon b*/
r = 1/1+(b/(fabs(p_tab[3])));
xd = (r+R)/2;
printf("\r\n xd = %lf", xd);
getch();
x_newton = Newton(p_tab,pre,xd);
if(x_newton==0) x_newton = Newton(tab,pre,-xd);
if(x_newton==0) printf("\n\n\n\r il n'y a pas de convergence par
Newton");
else
{
printf("\n\n\n\r il y a une racine r‚elle = %4.4lf ",x_newton);
horner(tab,tbl,x_newton,3);
resolution(p_tab);
}
}
}
void saisie(double *p_tab_coeff)
{
printf("\r\n\n Veuillez introduire les coefficients d'une ‚quation du troisiŠme degr‚");
printf("\r\n\t sous la forme: AXü + BXý + CX + D = 0");
printf("\r\n\n\t\t valeur de A = ");
scanf("%lf",p_tab_coeff);
printf("\r\n\t\t valeur de B = ");
scanf("%lf",p_tab_coeff+1);
printf("\r\n\t\t valeur de C = ");
scanf("%lf",p_tab_coeff+2);
printf("\r\n\t\t valeur de D = ");
scanf("%lf",p_tab_coeff+3);
}
void edition_p3x(double *p_tab_coeff)
{
printf("\r\n\n Y = %lf Xü + %lf Xý + %lf X + %lf ", p_tab_coeff[0],p_tab_coeff[1],p_tab_coeff[2],p_tab_coeff[3]);
}
double max_coeff(double *p_tab_coeff)
{
int n;
double max;
n=1;
max = fabs(p_tab_coeff[0]);
do
{
if(fabs(max) < fabs(p_tab_coeff[n])) max = fabs(p_tab_coeff[n]);
n++;
}
while(n<3);
return max;
}
void horner(double *p_tab, double *p_tbl, double xn, int i)
{
int j;
p_tbl[0]=p_tab[0];
for(j=1;j<i;j++)
{
p_tbl[j]=p_tab[j]+(p_tbl[(j-1)]*xn);
}
}
double Newton(double *p_tab_coeff, double xn, double pre)
{
int nbr = 0;
double tab_coeff_b[4];
double tab_coeff_c[3];
double val_new=0;
do
{
horner(p_tab_coeff,tab_coeff_b,xn,3);
horner(p_tab_coeff,tab_coeff_c,xn,2);
xn = xn-(tab_coeff_b[3]/tab_coeff_c[2]);
printf("\n\r xn = %lf", xn);
getch();
nbr++;
}
while(fabs(tab_coeff_b[3]) > pre && nbr<20);
printf("\n\n\n\r nbr = %d les calculs ont ‚t‚ effectu‚s par la m‚thode de Newton ",nbr);
if(nbr<20)
{
val_new=xn;
}
return val_new;
/***Main.C***/
#include<e:\info\p3x.h>
#include<e:\info\p3x.c>
#include<stdio.h>
#include<conio.h>
void main (void)
{
double tab_coeff[4];
clrscr();
saisie(tab_coeff);
edition_p3x(tab_coeff);
resolution_P3(tab_coeff);
getch();
}
/***Header.H***/
#ifndef p3x.h
#define p3x.h
void resolution_P3(double*);
void saisie(double *);
void edition_p3x(double *);
double max_coeff(double*);
void horner(double*, double*, double, int);
double Newton(double*, double, double);
#endif
PS: la fonction du deuxième degré fonctionne correctement!!!
merci.
Lire la suite 

Programmation en C équation du 3 ième degré »

3 réponses
Réponse
+0
moins plus
Bon, je n'ai pas lu le code, mais une variable avec une valeur très grande laisse présagé un défaut d'initialisation, commence par là...
Ajouter un commentaire
Réponse
+0
moins plus
slt,

mais quel variable???? que je dois réinitialiser????
pyschopathe- 6 mai 2009 à 16:12
Xn ou une des variables utilisées pour le calcul...
Ajouter un commentaire
Ce document intitulé « programmation en C équation du 3 ième degré » 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
Passage au tout numérique : quel coût pour les particuliers ?