Calculer les racines d'une fonction que l'on rentre dans le programme.

Soyez le premier à donner votre avis sur cette source.

Snippet vu 2 416 fois - Téléchargée 29 fois

Contenu du snippet

C'est encore un petit programme que la classe a mis 2 heures pour le trouver.
En espérant qu'il est pas trop mal écrit.

Source / Exemple :


#include <stdio.h>
#include <conio.h>
#include <math.h>
#define F(x) (2*x*x*x-11*x*x-25*x+83)

float SP(float a,float b,float p);

main()
{float p,x1,x2,n,a,b,r,t;
char A[20];

printf("\nDonnez la valeur de x1:");gets(A);sscanf(A,"%f",&x1);
printf("\nDonnez la valeur de x2:");gets(A);sscanf(A,"%f",&x2);
if (x1>x2)
{t=x1;x1=x2;x2=t;}
n=(x2-x1)/10;
printf("\nDonnez la precision p:");gets(A);sscanf(A,"%f",&p);
a=x1;b=x1+n;
do
  {if(F(a)*F(b)<0)
  {r=SP(a,b,p);
  printf("\n %f",r);}
  a=b;b=b+n;}
while (b<x2);
getch();}

float SP(float a,float b,float p)
{float l1,l2,m,c;
  l1=a;l2=b;
  do
  {m=(l1+l2)/2;
  c=l2;l2=m;
  if(F(l1)*F(l2)>0)
    {l1=l2;l2=c;}
  }
while (fabs(m-c)>p);
return (m);}

A voir également

Ajouter un commentaire Commentaires
Messages postés
584
Date d'inscription
mardi 26 novembre 2002
Statut
Membre
Dernière intervention
29 mai 2015

et j'avais oublié de dire qu'il ne s'agit des racines que s'il s'agit d'un polynômes. Mais cet algo s'applique à toute fonction continue sur l'intervalle choisi.
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
Un truc pour le #define F(x) :

entoure les x de parenthèses dans ta définition pour éviter des pbs dans l'utilisation :
ex

#define F(x) (x*x)

si tu fait F(2), pas de pb, mais en faisant F(2+3), l'expansion de la macro donnera :
2+3*2+3= 11 au lieu de 25

en faisant
#define F(x) ((x)*(x)), pas de pbs.
Messages postés
402
Date d'inscription
samedi 28 décembre 2002
Statut
Membre
Dernière intervention
21 juillet 2005
1
donc pour les truc important du while tu dois mettre ici dans ta boucle:

if ( b <= 0 )
continue; // va sortir de la boucle... :)
Messages postés
584
Date d'inscription
mardi 26 novembre 2002
Statut
Membre
Dernière intervention
29 mai 2015

Tu as l'air de débuter en programmation alors je vais te donner qq conseils importants pour ne pas faire n'importe quoi.

1) Le code doit être correctement indenté
2) Le nom des variables et des fonctions doit être explicite (evite les a,b,c,l1,l2,SP...)
3) Va à la ligne après chaque instruction, càd après chaque point-virgule
4) Evite les void main() et utilise plutot les int main. Certains compilateurs refusent les void main.
5) gets(A);sscanf(A,"%f",&x1); peut être avantageusement remplacé par scanf("%f", &x1);
6) Ton programme utilise le thérorème des valeurs intermédiaires. Ce thérorème exige que la fonction soit continue
7) Un truc SUPER IMPORTANT : quand tu fais un while (ou un do...while) vérifie TOUJOURS que tu es CERTAIN de sortir de la boucle. Par exemple ici si on met une précision de 0 (ou encore une précision négative), ton programme ne s'arretera jamais !

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (cs_Ju)