Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1726 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Retour d'une fonction [DEBUTANT]

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Retour d'une fonction [DEBUTANT]

n°962516
sylvainlel​eu
Posté le 26-01-2005 à 10:02:34  profilanswer
 

Bonjour,
Je cherche à faire en C une fonction qui me renvoie plusieurs valeurs?
Avez vous une idée comment je peux faire ?
 
En fait c'est le calcul des mensualités d'un remboursement, et la fonction doit pouvoir renvoyer l'ensemble des valeurs des remboursements.
 
Merci d'avance.
A+


Message édité par sylvainleleu le 26-01-2005 à 12:46:56
mood
Publicité
Posté le 26-01-2005 à 10:02:34  profilanswer
 

n°962520
black_lord
Truth speaks from peacefulness
Posté le 26-01-2005 à 10:12:15  profilanswer
 

tu peux pas. Achète un K&R :)
 


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°962521
blackgodde​ss
vive le troll !
Posté le 26-01-2005 à 10:12:32  profilanswer
 

renvoit une structure / une liste chainée si tu ne connais pas a l'avance le nombre d'éléments
 
(ou passe la par adresse à la fonction)

n°962536
sylvainlel​eu
Posté le 26-01-2005 à 10:23:31  profilanswer
 

Je connais le nombre d'éléments.
Sinon c'est quoi un K&R ?

n°962542
push
/dev/random
Posté le 26-01-2005 à 10:32:32  profilanswer
 
n°962543
black_lord
Truth speaks from peacefulness
Posté le 26-01-2005 à 10:32:47  profilanswer
 

un K&R c'est kernigan et ritchie. LE bouquin à avoir pour commencer.
 
[:benou_grilled]


Message édité par black_lord le 26-01-2005 à 10:33:03

---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°962604
blackgodde​ss
vive le troll !
Posté le 26-01-2005 à 11:58:56  profilanswer
 


 
int tab[5];
 
void clear(char *p);
 
 :pt1cable:

n°962660
Emmanuel D​elahaye
C is a sharp tool
Posté le 26-01-2005 à 13:04:27  profilanswer
 

BlackGoddess a écrit :

int tab[5];
 
void clear(char *p);
 
 :pt1cable:


Ah! Y'en a au moins un qui suit!
 
Merci, corrigé.
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°962804
sylvainlel​eu
Posté le 26-01-2005 à 14:53:23  profilanswer
 

Merci bcp pour vos réponses.
Voici le résultat de mes essais :

Code :
  1. int const MAXPERIODES=1200;
  2. float Tableau_des_versements[5][MAXPERIODES];
  3. int calcul_du_tableau_des_versements ( float *t, float M, float T, float D )
  4. {
  5.    int i,j;
  6.    for (i=0;i<5;i++)
  7.    {
  8.     for (j=0;j<MAXPERIODES;j++)
  9.     {
  10.      t[i][j]=0;
  11.     }
  12.    }
  13. }


Cela ne fonctionne pas .. Où est ce que je me suis trompé ?


Message édité par sylvainleleu le 26-01-2005 à 15:13:52
n°962814
sylvainlel​eu
Posté le 26-01-2005 à 15:03:11  profilanswer
 

Il me fait une erreur " la valeur indicée n'est ni un tableau ni un pointeur" à la compilation... je ne comprends pas pourquoi il attend un tableau ou un pointeur comme indice :??:

mood
Publicité
Posté le 26-01-2005 à 15:03:11  profilanswer
 

n°962853
blackgodde​ss
vive le troll !
Posté le 26-01-2005 à 15:48:04  profilanswer
 

l'exemple du site n'est pas tres clair a ce sujet ... un pointeur peut etre accédé comme un tableau a une dimension, c'est ce qu'utilise l'exemple ... cela ne fonctionne pas avec un tableau a 2 dimensions par contre
 
float *t => tu peux ecrire t[x], mais pas t[x][y]

n°962866
sylvainlel​eu
Posté le 26-01-2005 à 16:04:16  profilanswer
 

Alors comment puis-je passer un tableau à 2 dimensions comme paramètre à une fonction ?

n°962885
black_lord
Truth speaks from peacefulness
Posté le 26-01-2005 à 16:22:03  profilanswer
 

j'espère que je dis pas une connerie mais **t :)
 
(je suis jamais sur de moi en C)


Message édité par black_lord le 26-01-2005 à 16:22:28

---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°962907
blackgodde​ss
vive le troll !
Posté le 26-01-2005 à 16:43:05  profilanswer
 

float **t;
 
l'appelant doit l'allouer correctement :  

Code :
  1. t = malloc(X*sizeof(float*));
  2. for(int i=0; i<X; i++)
  3.   t[i] = malloc(Y*sizeof(float));

n°962909
blackgodde​ss
vive le troll !
Posté le 26-01-2005 à 16:45:46  profilanswer
 

il y a peut-etre une ecriture pour passer en paramètre un tableau à 2 dimensions ... sinon une structure peut t'aider :
 

Code :
  1. struct donnees
  2. {
  3.   float t[X][Y];
  4. };
  5. void f(struct donnees *param);

n°962955
Emmanuel D​elahaye
C is a sharp tool
Posté le 26-01-2005 à 17:36:18  profilanswer
 

black_lord a écrit :

j'espère que je dis pas une connerie mais **t :)


Non.


Message édité par Emmanuel Delahaye le 26-01-2005 à 17:39:16

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°962960
Emmanuel D​elahaye
C is a sharp tool
Posté le 26-01-2005 à 17:38:54  profilanswer
 

BlackGoddess a écrit :

il y a peut-etre une ecriture pour passer en paramètre un tableau à 2 dimensions ...



void f(int x[X][Y]);
 
void f(int x[][Y]);



---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°963707
allawos
Posté le 27-01-2005 à 13:48:31  profilanswer
 

Un truc qui se fait en traitement d'image :
au lieu de déclarer un tableau à 2 dimensions, tu utilise un tableau à une seule dimension mais donc tu connais le nombre de lignes et nombre de colonnes.
 
Par exemple :
 

Code :
  1. //définition de la taille du tableau :
  2. #define NB_LIN=640;
  3. #define NB_COL=480;
  4. // ta fonction :
  5. int calcul_du_tableau_des_versements ( float *t )
  6. {
  7.                 int i,j;
  8.                 for (i=0;i<NB_LIN;i++)
  9.                 {
  10.                     for (j=0;j<NB_COL;j++)
  11.                     {
  12.                       //traitement de la cellule (i,j) du tableau                   
  13.                        t[i*NB_COL+j]=0;
  14.                     }
  15.                 }
  16. return 0;
  17. }
  18. int main(void)
  19. {
  20. float case;
  21. // allocation du tableau
  22. float * t = (float *)malloc(NB_LIN*NB_COL*sizeof(float));
  23. //appel de ta fonction  
  24. calcul_du_tableau_des_versements ( float *t );
  25. //acces à la case i=12, j=14 du tableau
  26. case=t[12*NB_COL+14];
  27. return 0;
  28. }


Message édité par allawos le 27-01-2005 à 13:49:53
n°963734
sylvainlel​eu
Posté le 27-01-2005 à 14:15:32  profilanswer
 

Je veux bien mais il y a un problème dans ton raisonnement :
Si je prends les cases[6;3] et [3;7] elles pointent toutes les 2 vers la case t[5280] donc cela ne fonctionne pas dsl
A+

n°963750
allawos
Posté le 27-01-2005 à 14:34:56  profilanswer
 

hein ? Je pense que tu te plantes ...
 
Si tu vois le tableau d'une seule dimension, en fait, tu as chaque ligne, les unes à la suite des autres (chaque ligne ayant une taille de NB_COL).
 
donc pour accéder au début de la ligne i, t'es d'accord, que tu avance dans ton tableau à une dimension, de i*NB_COL.
 
Ensuite, pour accéder à la colonne j, ben t'ajoute j ... d'ou i*NB_COL+j.
 
Je vois pas comment tu as raisonné ... ???
 
pour NB_COL=480
 
case(6,3)=tab[6*NB_COL+3]=tab[6*480+3]=tab[2883]
case(3,7)=tab[3*NB_COL+7]=tab[3*480+7]=tab[1447]
 
... tu vois ?

n°963755
sylvainlel​eu
Posté le 27-01-2005 à 14:36:37  profilanswer
 

Sorry j'ai fait t[6*640+3*480]
Mea culpa ...

n°963759
black_lord
Truth speaks from peacefulness
Posté le 27-01-2005 à 14:40:15  profilanswer
 


t'es sur ?


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°963779
lsdYoYo
gravity powered
Posté le 27-01-2005 à 15:12:54  profilanswer
 

int calcul_du_tableau_des_versements(float (*t)[MAXPERIODES]);
Les parenthèses sont nécessaires à cause de la priorité des opérateurs :
- float *t[N] : déclare N pointeurs sur des float
- float (*t)[N] : déclare 1 pointeur sur un tableau de float avec N colonnes
 
Devant la lourdeur de la syntaxe, et pour prendre de meilleurs habitudes, il vaut mieux passer par une structure :

Code :
  1. typedef struct
  2. {
  3. float per[MAXPERIODES];
  4. } versement;
  5. versement Tableau_des_versements[5];
  6. int calcul_du_tableau_des_versements(versement *tab)
  7. {
  8. int i,j;
  9. for(i=0;i<5;i++)
  10.     for(j=0;j<MAXPERIODES;j++)
  11.         tab[i].per[j]=0;
  12. }

n°963782
Emmanuel D​elahaye
C is a sharp tool
Posté le 27-01-2005 à 15:20:59  profilanswer
 


Un T ** en parametre, c'est ok pour un tableau de pointeurs. Ca permet de simuler un tableau à 2 dimensions (utilisation de [i][j]), mais le tableau en question n'est pas linéaire. Il pourrait même avoir des lignes vides (NULL).
 
Pour un vrai tableau à deux dimensions, je le répète, le paramètre doit être de la forme 'T p[X][Y]' ou 'T p[][Y]'
 
Ca peut aussi être pointeur sur tableau : 'T (*p)[X][Y]' (je ne suis pas sûr de la syntaxe), mais ça complique le code et la maintenance... Par contre, la taille réelle est transportée...


Message édité par Emmanuel Delahaye le 27-01-2005 à 15:25:05

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°963783
black_lord
Truth speaks from peacefulness
Posté le 27-01-2005 à 15:22:31  profilanswer
 

ok :jap:


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Retour d'une fonction [DEBUTANT]

 

Sujets relatifs
ouvrir un formulaire en fonction d'une valeurProbleme passage de paramètres et fonction include
Fonction qui regroupe plusieurs valeurs[VB6] [Débutant] Tester la Validité des Informations
minWG, question de débutant[C++]débutant
[c] Boucle (Debutant)[c-gcc] Boucle (debutant)
[C] tableau [Debutant]fonction mail en local
Plus de sujets relatifs à : Retour d'une fonction [DEBUTANT]


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR