insérer trois boucles

insérer trois boucles - C - Programmation

Marsh Posté le 02-06-2008 à 10:05:48    

Bonjour,

 

J'écris un programme qui me permet de calculer une somme à partir de données d'un fichier d'entrée pour différentes valeurs à la fois de eps et de taun. Le problème, c'est que j'ai l'impression que lorsque le programme calcul la valeur de la somme pour la première valeur de eps, i le fait bien, mais lorsqu'il passe à la seconde valeur de eps, il part de la précédente valeur de la somme à la quelle il rajoute la nouvelle. Je ne sais pas si c'est très clair, peut être y-a-t'il un code qui permet de revenir à 0 que je ne connaît pas...

 

Merci d'avance,
Jyca

 

Voici le code de la partie du programme:

Code :
  1. for (taun=880; taun<883; taun+=1) {
  2. for (eps=0.8; eps<1; eps+=0.05) {
  3. for (int i=0; i<500; i++) {
  4. double tempt[500];
  5. double empt[500];
  6. double eempt[500];
  7.   fscanf(fpempt,"%lf %lf %lf\n",&tempt[i],&empt[i],&eempt[i]);
  8.   if(tempt[i]>400 && tempt[i]<501) {
  9.  
  10.   sum1+= empt[i]*exp((tempt[i]-400)/taun);
  11.   sum_1+= empt[i];
  12. esum1 += eempt[i]*eempt[i];
  13. // printf("valeur de sum.3 : %lf \n", );
  14. //printf("valeur de sum2 : %lf \n", sum1);
  15. //printf("valeur de tempt : %lf \n", tempt[i]);
  16.      }
  17. }
  18. //printf("la somme pour exp_empty est %lf et pour empty est: %lf +- %lf\n", sum1, sum_1, esum1);
  19. for(int j=0; j<1800; j++)
  20.    {
  21. double tleak[1800];
  22. double leak[1800];
  23. double eleak[1800];
  24.   fscanf(fpleak,"%lf %lf %lf\n",&tleak[j],&leak[j],&eleak[j]);
  25. if(tleak[j]>400 && tleak[j]<1001) {
  26.  
  27. sum2+= leak[j]*exp((tleak[j]-400)/taun)/eps);
  28. sum_2+=leak[j];
  29. esum2 += eleak[j]*eleak[j];
  30. }
  31. }
  32. //printf("taun: %lf  eps: %lf sum2: %lf\n", taun, eps, sum2);
  33. }
  34. esum1 = sqrt(esum1);
  35. esum2 = sqrt(esum2);
  36. return(0);
  37. }
 

Merci d'avance encore!!!!  ;)


Message édité par Elmoricq le 02-06-2008 à 10:11:47
Reply

Marsh Posté le 02-06-2008 à 10:05:48   

Reply

Marsh Posté le 02-06-2008 à 10:11:19    

Ce n'est pas du C++, je déplace donc dans "C".


Message édité par Elmoricq le 02-06-2008 à 10:11:30
Reply

Marsh Posté le 02-06-2008 à 10:25:42    

regarde bien la valeur retournée par fscanf. Tes 3 tableaux sont locaux à la boucle la plus intérieure: à chaque itération de cette boucle, ce sont de nouveaux tableau. Si tu veux qu'ils persistent, tu dois les déclarer plus à l'extérieur (à toi de choisir où selon ton besoin).

Reply

Marsh Posté le 02-06-2008 à 10:26:51    

toutes façons, avec ton implémentation actuelle, les tableaux sont inutiles: 3 double ça suffit, vu que tu fscanf immédiatement, la valeur précédente serait de toutes façons écrasée.

Reply

Marsh Posté le 02-06-2008 à 11:07:18    

fscanf me retourne bien les valeurs de mon fichier texte. Le problème persiste, à chaque valeur de eps, le prog m'ajoute la somme aux précédentes. A part ça, le calcul est correct. J'ai peur que cela vienne de mon sum+=... mais du coup je ne vois pas du tout comment faire...

Reply

Marsh Posté le 02-06-2008 à 11:26:30    

bah relis moi, tu m'a pas compris. contrôle le retour de fscanf et déclare/initialise tes variables là où c'est nécessaire.

Reply

Marsh Posté le 02-06-2008 à 11:40:28    

En effet, je ne t'ai pas compris... ça veut dire quoi "contrôle le retour de fscanf"? (on peut dire que je suis débutant en C...)

Reply

Marsh Posté le 02-06-2008 à 11:43:42    

man fscanf

 
Citation :

VALEUR RENVOYÉE
       Ces fonctions renvoient  le  nombre  d'éléments  d'entrées
       correctement assignés.  Ce nombre peut être plus petit que
       le nombre d'élements attendus, et même être nul, s'il y  a
       une  erreur  de  mise  en  correspondance.  La valeur zéro
       indique qu'aucune conversion n'a été faite  bien  que  des
       caractères  étaient  disponibles  en  entrée.  Typiquement
       c'est un caractère d'entrée invalide qui en est la  cause,
       par  exemple un caractère alphabétique dans une conversion
       `%d'.  La valeur EOF est renvoyée si une erreur d'entrée a
       eu  lieu  avant  toute  conversion, par exemple une fin de
       fichier. Si une erreur fin-de-fichier se produit après que
       les  conversions  aient commencé, le nombre de conversions
       réussies sera renvoyé.


Message édité par Elmoricq le 02-06-2008 à 11:44:08
Reply

Marsh Posté le 02-06-2008 à 14:37:30    

La fonction scanf renvoie bien le nombre d'éléments d'entrées correctement assignés...

Reply

Marsh Posté le 02-06-2008 à 14:49:51    

ça n'a rien à voir avec  le fait que j'utilise un "+=" dans la dernière boucle implémentée....?

Reply

Marsh Posté le 02-06-2008 à 14:49:51   

Reply

Marsh Posté le 02-06-2008 à 15:39:08    

vraiment personne...? pitiééééééé

Reply

Marsh Posté le 02-06-2008 à 16:28:26    

ça a à voir avec où sont déclarées tes variables et tes tableaux inutiles.

Reply

Marsh Posté le 02-06-2008 à 17:20:32    

merci beaucoup, le problème est résolu, et ça m'a bien fait réviser ces histoires de déclaration et d'initialisation! finalement c'est plutot sympatique par ici...

Reply

Sujets relatifs:

Leave a Replay

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