probleme avec calcul exponentiel

probleme avec calcul exponentiel - C - Programmation

Marsh Posté le 10-11-2004 à 02:27:24    

Salut à tous;
J'ai besoin d'une petite aide, j'essaie d'afficher les points de la courbe exponentielle de x(y=exp(x)). L'utilisateur saisit d'abord l'intervalle dans lequel il désire avoir les points de la fonction ainsi que le nombre de points voulue.
Le problemes c'est quand j'execute mon programme je n'ai pas les bonnes valeur qui s'affiche. Quelqu'un peut il me signaler ou se trouve l'erreur ?
 
1.#include <stdio.h>
2.
3.int main()
4 .{
5.    int nb_n,a;
6.    int cpt,cpt1;
7.    float born_min;
8.    float born_max;
9.    float x;
10.  float y;
11.  float pas;
12.  float som;
13.
14.    printf("Min? \n" );
15.    scanf("%f", &born_min);
16.    printf("Max? \n" );
17.    scanf("%f", &born_max);
18.    printf("nombre de points? \n" );
19.    scanf("%d", &nb_n);
20.    pas=((born_max-born_min)/nb_n);
21.    x=born_min;
22.    y=1;
23.    som=0;
24.    for(cpt=0;cpt<nb_n;cpt++)
25.      {
26.        a=1;
27.         for(cpt1=0;cpt1<20;cpt1++)
28.         {
29.          y=(x/a)*y;
30.          som=som+y;
31.          a++;
32.         }
33.         printf("%f %f \n",x, som);
34.         x=(x+pas);
35.        }
36.    system("pause" );
37.}


---------------
Hihi j'suis là ou pas?
Reply

Marsh Posté le 10-11-2004 à 02:27:24   

Reply

Marsh Posté le 10-11-2004 à 02:37:21    

t'as le droit d'utiliser i, j comme compteur de boucle :o
 
du reste c'est un problème d'algo. revois ton algorithme. fais tourner ton algo à la main.
 
 
mais attention que
((born_max-born_min)/nb_n);  
est un calcul entier et peut ne pas donner ce que tu veux (par exemple (10 - 5) / 3 va donner 1 et pas 1.6666...

Reply

Marsh Posté le 10-11-2004 à 02:46:23    

tu veux dire quoi par le fait que je peux utiliser i et j pour les boucles de compteur?
par contre pour le calcul du pas je suis sur de ce que j'ecris!
C'est un de mes tout premier programme alors faut etre indulgent avec le petit newbies que je suis  
 :hello:


---------------
Hihi j'suis là ou pas?
Reply

Marsh Posté le 10-11-2004 à 20:33:23    

il veut dire que cpt, cpt1 etc... c'est pas super lisible, car dans les standards de programmation classique, les compteurs de boucle s'appelle i, j, k...

Reply

Marsh Posté le 10-11-2004 à 21:36:35    

Ok merci  :jap:


---------------
Hihi j'suis là ou pas?
Reply

Marsh Posté le 11-11-2004 à 12:32:57    

Taz a écrit :

mais attention que
((born_max-born_min)/nb_n);  
est un calcul entier et peut ne pas donner ce que tu veux (par exemple (10 - 5) / 3 va donner 1 et pas 1.6666...


 
Suis pas d'accord ! Dans une opération, le calcul se fait dans le type de l'opérande le plus précis qui est présent dans le calcul. S'il y a des opérandes "int", "double" et "float", le calcul sera fait en "double".
"born_max" et "born_min" étant des float, le calcul sera flottant et "pas" contiendra la bonne valeur...
 
Juste que les parenthèses autour de l'opération ne sont pas obligatoires

Code :
  1. pas=(born_max - born_min) / nb_n;


Message édité par Sve@r le 11-11-2004 à 12:36:08
Reply

Marsh Posté le 11-11-2004 à 13:56:53    

non. la promotion se fait étape par étape et pas globalement. les opérateurs sont unaire ou binaire, pas plus. donc non

Reply

Marsh Posté le 11-11-2004 à 18:34:18    

Taz a écrit :

non. la promotion se fait étape par étape et pas globalement. les opérateurs sont unaire ou binaire, pas plus. donc non


Hum... l'opérateur "expr ?e1 :e2" est souvent cité comme opérateur "ternaire"...
Je n'ai pas testé (et je ne pourrai pas tester avant lundi) mais même étape par étape, il me semble que le calcul commencera par faire "b - a" en valeur flottantes et que le résultat restera mémorisé tel quel. Puis ce résultat sera divisé par un "int" mais l'opération restera (devrait rester) float non ???

Reply

Marsh Posté le 14-11-2004 à 21:25:34    

L'opération reste float


---------------
Hihi j'suis là ou pas?
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed