Appel d'une fonction

Appel d'une fonction - C++ - Programmation

Marsh Posté le 05-08-2012 à 14:10:23    

Salut !
J’ai  une fonction " int calcul_somme (int * ptr,  int nb_el) " et je veux qu’à chaque appel de cette fonction je sauvegarde les valeurs de *ptr  et  nb_el  pour les utiliser lors de l’appel suivant jusqu’à un nombre n d’appels déterminé.
Mais je n’arrive pas à sauvegarder les nouvelles valeurs à chaque appel (à chaque appel  la fonction prend les valeurs initiales ) ni à connaître et gérer le nombre d’appel de la fonction.  

Reply

Marsh Posté le 05-08-2012 à 14:10:23   

Reply

Marsh Posté le 05-08-2012 à 15:23:25    

Ta question me donne l'impression que tu n'as pas cerné exactement l'énoncé. Vraisemblablement, tu voudrais itérer sur tes valeurs à l'extérieur de ta fonction, mais une fonction avec ce prototype a pour rôle d'itérer sur les valeurs.


---------------
last.fm
Reply

Marsh Posté le 05-08-2012 à 16:22:57    

Une connerie du genre:

Code :
  1. int calcul_somme (int * ptr,  int nb_el)
  2. {
  3.      static int lastptr = 0;
  4.      static int lastnb = 0;
  5.      static int nbfois = 10;
  6.      int ret = lastptr+lastnb;
  7.      if (nbfois==0)
  8.         return *ptr+nb_el;
  9.      lastptr = *ptr;
  10.      lastnb = nb_el;
  11.      nbfois--;
  12.      return ret;
  13. }


ca te convient pas? (en dehors des calculs faitaisistes!)


---------------
Seul Google le sait...
Reply

Marsh Posté le 05-08-2012 à 16:57:15    

breizhbugs a écrit :

Une connerie du genre:

Code :
  1. int calcul_somme (int * ptr,  int nb_el)
  2. {
  3.      static int lastptr = 0;
  4.      static int lastnb = 0;
  5.      static int nbfois = 10;
  6.      int ret = lastptr+lastnb;
  7.      if (nbfois==0)
  8.         return *ptr+nb_el;
  9.      lastptr = *ptr;
  10.      lastnb = nb_el;
  11.      nbfois--;
  12.      return ret;
  13. }


ca te convient pas? (en dehors des calculs faitaisistes!)


 [:bvampire]


---------------
last.fm
Reply

Marsh Posté le 05-08-2012 à 18:00:53    

Lu comme ça on dirait presque que tu veux faire une fonction récursive en fait non ? :o


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
Reply

Marsh Posté le 06-08-2012 à 01:39:01    

Non ce n'est pas une fonction récursive.
Je m'explique encore: si j'ai pas exemple un tableau tab de 100 éléments et  je veux à chaque appel de ma fonction calculer la somme de 10 éléments de ce tableau c'àd  
1/ lors du 1er appel je fais la somme des 10 premiers éléments et j'ai comme valeur de retour cette somme et je sauvegarde dans ptr l'adresse de tab[0]
2/ si je fais un 2eme appel de cette je ferais la somme des 10 deuxièmes éléments (sans avoir à le préciser au complilateur) et j'ai comme valeur de retour cette somme et je sauvegarde dans ptr l'adresse de tab[9]  
ainsi de suite  
et à partir du 10 ème appel j'afficherai un msg d'erreur.

Reply

Marsh Posté le 06-08-2012 à 21:32:26    

dans ce cas, il y a deux possibilités :
- utiliser des variables statiques (mais ce n'est pas terrible)
- ajouter des variables de sauvegarde de contexte
 
Je ne vais donc parler que du deuxième point. Le prototype de la fonction pourrait être :

Code :
  1. int calcul_somme( int* tableau,int nb_elems,int **last_pos_pp);


 
un exemple d'appel pourrait être le suivant

Code :
  1. int* sav_pos_p=NULL;
  2. do{
  3.     int res;
  4.     res = calcul_somme(tableau,nb_elem,&sav_pos_p);
  5.     // gérer le reste
  6. } while( sav_pos_p!=NULL);


 
La fonction va juste contrôler l'état du pointeur à chaque appel pour savoir d' où "repartir". Il faut juste mettre null dans le pointeur quand le tableau a été entièrement traité ou alors sauvegarder le pointeur d'où repartir au prochain appel si il reste des éléments à traiter.
 
je te laisse chercher un peu pour le code de la fonction
 
@+


Message édité par dreameddeath le 07-08-2012 à 00:23:49
Reply

Marsh Posté le 06-08-2012 à 23:42:04    

Merci ^^

Reply

Sujets relatifs:

Leave a Replay

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