#include<stdio.h>
#include<math.h>
//declaration fonction
/* -ed-
* Bizarre le commentaire... ce sont des variables, non ?
* les // ne sont pas standard en C90
*/
float x;
float s;
float k;
float den;
float num;
float r;
/* -ed-
* Pourquoi des globales ?
* Pourquoi des float() ?
* Les calculs se font en 'double'.
*/
//main
/* -ed-
* mieux vaut preciser que main() n'a pas de parametre
int main ()
*/
int main (void)
{
//parametre entree
printf ("exp(x) : " );
/* -ed-
* Attention, pourqu'une chaine sorte,
* elle doit etre terminée par un '\n',
* sinon, il faut appeler fflush(stdout).
*
* Pour les nuls en maths comme moi, peut etre faudrait-il preciser
* (et de toutes facons, tester) les domaines des variables 'humaines' ...
*/
scanf ("%f", &x);
/* -ed-
* scanf() n'est pas une fonction de debutant.
* Au minimum, il faut tester la valeur retournee.
*
* Il est preferable d'utiliser fgets()
* et la fonction de conversion qui va bien.
*/
printf ("seuil : " );
scanf ("%f", &s);
//initialisation
r = 1;
k = 1;
den = 1;
num = 1;
//calcul
/* -ed-
* La, je te fais confiance...
* Les maths, c'est pas mon truc.
*
* toutefois, abs(), c'est pour des entiers.
* Pour des flottants, c'est fabs().
while (abs ((den * x) / (num * k)) >= s)
*/
while (fabs ((den * x) / (num * k)) >= s)
{
den = den * x;
num = num * k;
k = k + 1;
r = r + (den / num);
/* -ed-
* il ya une facon plus 'C' d'ecrire ca,
den *= x;
etc.
* mais c'est correct.
* Attention quand meme aux risques de debordements.
* Les limites sont exprimees par des constantes definies
* dans <limits.h> et <float.h>
*/
}
printf ("result : %f", r);
printf ("\n" );
/* -ed-
* pourquoi un '\n' separe ?
* Ce n'est pas faux, juste un peu plus complique que necessaire...
*/
/* -ed-
* comme main() retourne int,
* il faut preciser la valeur retournee
* (obligatoire en C90)
*/
return 0;
}
|