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

  FORUM HardWare.fr
  Programmation
  C++

  [C] Retourner un tableau d'int dans une fonction

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Retourner un tableau d'int dans une fonction

n°192926
Poulou
Posté le 09-08-2002 à 13:46:54  profilanswer
 

Bonjour à tous,
J'aimerai qu'une fonction retourne un tableau d'int du type : "int tab[4][6]". Evidemment ce n'est pas possible de faire un "int [4][6] nomfonction(..,...)" donc comment puis-je le réaliser ?
Merci

mood
Publicité
Posté le 09-08-2002 à 13:46:54  profilanswer
 

n°192930
tomlameche
Et pourquoi pas ?
Posté le 09-08-2002 à 13:56:06  profilanswer
 

Poulou a écrit a écrit :

Bonjour à tous,
J'aimerai qu'une fonction retourne un tableau d'int du type : "int tab[4][6]". Evidemment ce n'est pas possible de faire un "int [4][6] nomfonction(..,...)" donc comment puis-je le réaliser ?
Merci




en renvoyant un poiteur genre int ** nomFonction(), ça devrai fonctionner.

n°192939
El_gringo
Posté le 09-08-2002 à 14:07:13  profilanswer
 

tomlameche a écrit a écrit :

 
en renvoyant un poiteur genre int ** nomFonction(), ça devrai fonctionner.




 
Ouais, bien sur.
 
Par contre , n'éspères pas faire ça :

Code :
  1. int [4][6] TonTableau;
  2. TonTableau = NomDeFonction();


Quand tu déclares un tableau de cette manière, le pointeur TonTableau est constant.
Par contre tu peux faire :

Code :
  1. int** hTonTableau = NomDeFonction();


Par la suite, j'pense que tu peux accèder aux différents éléments de hTonTableau comme si t'avais déclaré ton tableau en statique (avec les indices entre crochets quoi !)


Message édité par El_gringo le 09-08-2002 à 14:07:34
n°192943
LetoII
Le dormeur doit se réveiller
Posté le 09-08-2002 à 14:10:31  profilanswer
 

El_Gringo a écrit a écrit :

 
 
Ouais, bien sur.
 
Par contre , n'éspères pas faire ça :

Code :
  1. int [4][6] TonTableau;
  2. TonTableau = NomDeFonction();


Quand tu déclares un tableau de cette manière, le pointeur TonTableau est constant.
Par contre tu peux faire :

Code :
  1. int** hTonTableau = NomDeFonction();


Par la suite, j'pense que tu peux accèder aux différents éléments de hTonTableau comme si t'avais déclaré ton tableau en statique (avec les indices entre crochets quoi !)




 
non ça passe pas. Y a une syntaxe particulière pour les pointeurs sur tableau multicolone (on en a déjà parlé ici) mais je sais plus laquelle


---------------
Le Tyran
n°192953
kjus
Posté le 09-08-2002 à 14:29:31  profilanswer
 

de toutes facons, un tableau [4][6] équivaut en mémoire a un tableau [24]
 
donc tu peux faire

Code :
  1. int *mon_tableau;
  2. mon_tableau=ma_fonction();
  3. puis :
  4. mon_tableau[CASE+COLONNE*6] // pour y accéder.


evidemment essaye de pas faire d'erreur c la merde pour debugguer..

n°192958
El_gringo
Posté le 09-08-2002 à 14:31:15  profilanswer
 

heu... c quoi que t'appels CASE ?

n°192966
Poulou
Posté le 09-08-2002 à 14:38:46  profilanswer
 

Sur les indications de letoii j'ai cherché un topic qui en parlait et effectivement c'est celui-ci :
http://forum.hardware.fr/forum2.ph [...] h=&subcat=
 
J'ai donc dans ma fonction appelante :

déclaration : int (*tableau)[4][6];
allocation : tableau=(int(*)[4][6](malloc(sizeof(int)*4*6));
appel de la fonction : fonction_appelée(tableau)
lecture avec : (*tableau)[x][y]


et dans ma fonction appelée qui modifie le tableau

déclaration : fonction_appelée(int (*mon_tableau)[4][6])


 
Ca fonctionne sans problèmes et sans warning comme cela. Des remarques ?

n°193336
Musaran
Cerveaulté
Posté le 10-08-2002 à 05:50:02  profilanswer
 

Code :
  1. int (*tableau)[4][6] ;//seule déclaration possible
  2. tableau= (int(*)[4][6])malloc(sizeof(int)*4*6) ;//allocation C
  3. tableau= new int[][4][6] ;//allocation C++
  4. (*tableau)[1][1]= 1 ;//accès au tableau
  5. tableau[0][1][1]=1  ;//accès au tableau également

Pour réellement pointer sur un tableau, il faut donc simuler un tableau fictif de 1 case le contenant.
 
On peut transmettre un tableau par valeur en argument/retour de fonction en l'englobant dans une structure:

Code :
  1. #include <stdio.h>
  2. struct tabdedans{
  3. int tab[4][6] ;
  4. };
  5. tabdedans fonc(tabdedans arg){
  6. return arg ;
  7. };
  8. int main (){
  9. tabdedans stab= {0} ; //remplissage à 0 de la structure, donc du tableau
  10. stab.tab[0][0]= 1 ;
  11. printf("%d\n", fonc(stab).tab[0][0] ) ;//limpide !
  12. return 0;
  13. }


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°2223412
mwawm
Posté le 28-03-2014 à 10:45:01  profilanswer
 

Bonjour  :hello: ;
 
Si vous voulez bien me donner une idée, en fait j'ai une question presque identique à celle_ci, et j'ai essayé d'appliquer vos consignes mais ça n'a pas marché :pfff: !
Ma fonction K_eq contient une boucle for(i=1;i<=nnode;i++), qui me calcule un tableau des doubles. Or quand je fais appel à la fonction dans le main, je n'obtient que les valeurs d'une seule itération.
 
Objectif: quand je fais appel à la fonction K_eq, je dois récupérer toutes les valeurs de K_M=K_eq(i,1), toutes les valeurs de K_m=K_eq(i,2) et toutes les valeurs de K_geo=K_eq(i,3)=K_eq(i,4).
 
Cas1:normalement return ne récupère qu'une seule valeur, donc quand je l'ai mise dans la boucle, il m'affiche les valeurs de K_M, K_m et K_geo de la première itération et elle sort. Donc j'ai pensé à la faire sortir de la boucle.
 
Cas2:en dehors de la boucle, je sais pas quoi mettre entre les crochés de mon tableau K, si je mets return (K[i]), il m'affiche que des zéro (K_M=K_m=K_geo=0), et c'est normal car pour lui i en dehors de la boucle n'est qu'un simple entier. Si je mets la taille du tableau, c'est à dire je veux toutes les valeurs de mes paramètres return (K[nodmax]), il m'affiche la valeur moyenne de tous les K (K_M=K_m=K_geo=valeur moyenne).
 
J'espère que j'étais suffisamment claire pour que vous puissiez m'aider!
Merci  :)  

n°2223448
honrisse
Posté le 29-03-2014 à 00:55:24  profilanswer
 

mwawm a écrit :

Bonjour  :hello: ;
 
Si vous voulez bien me donner une idée, en fait j'ai une question presque identique à celle_ci, et j'ai essayé d'appliquer vos consignes mais ça n'a pas marché :pfff: !
Ma fonction K_eq contient une boucle for(i=1;i<=nnode;i++), qui me calcule un tableau des doubles. Or quand je fais appel à la fonction dans le main, je n'obtient que les valeurs d'une seule itération.
 
Objectif: quand je fais appel à la fonction K_eq, je dois récupérer toutes les valeurs de K_M=K_eq(i,1), toutes les valeurs de K_m=K_eq(i,2) et toutes les valeurs de K_geo=K_eq(i,3)=K_eq(i,4).
 
Cas1:normalement return ne récupère qu'une seule valeur, donc quand je l'ai mise dans la boucle, il m'affiche les valeurs de K_M, K_m et K_geo de la première itération et elle sort. Donc j'ai pensé à la faire sortir de la boucle.
 
Cas2:en dehors de la boucle, je sais pas quoi mettre entre les crochés de mon tableau K, si je mets return (K[i]), il m'affiche que des zéro (K_M=K_m=K_geo=0), et c'est normal car pour lui i en dehors de la boucle n'est qu'un simple entier. Si je mets la taille du tableau, c'est à dire je veux toutes les valeurs de mes paramètres return (K[nodmax]), il m'affiche la valeur moyenne de tous les K (K_M=K_m=K_geo=valeur moyenne).
 
J'espère que j'étais suffisamment claire pour que vous puissiez m'aider!
Merci  :)  


 
Je n'ai pas compris l'énoncé, le mieux serait de poster le code en plus.
Vu que la discussion traite de comment retourner un tableau 2D, voilà un exemple en C++ en espérant que ça pourra aider :
 

Code :
  1. #include <iostream>
  2. using std::cout;
  3. using std::endl;
  4. //Prend en entrée un tableau tab et ses dimensions et retourne un tableau
  5. //avec chaque élément au carré
  6. int** tableau_au_carre(int** tab, int nb_lignes, int nb_colonnes)
  7. {
  8. int** tableau = new int*[nb_lignes];
  9. for(int i = 0; i<nb_lignes; i++)
  10. {
  11.  tableau[i] = new int[nb_colonnes];
  12.  for(int j = 0; j<nb_colonnes; j++)
  13.  {
  14.   tableau[i][j] = tab[i][j] * tab[i][j];
  15.  }
  16. }
  17. return tableau;
  18. }
  19. int main()
  20. {
  21. int nb_lignes = 10;
  22. int nb_colonnes = 4;
  23. int** tableau = new int*[nb_lignes];
  24. for(int i = 0; i<nb_lignes; i++)
  25. {
  26.  tableau[i] = new int[nb_colonnes];
  27. }
  28.    
  29. //Remplissage du tableau
  30. for(int i = 0; i<nb_lignes; i++)
  31. {
  32.  for(int j = 0; j<nb_colonnes; j++)
  33.  {
  34.   tableau[i][j] = i*nb_colonnes + j;
  35.  }
  36. }
  37. int** tableau_carre = tableau_au_carre(tableau, nb_lignes, nb_colonnes);
  38. tableau_carre[0][0] = -99; //modification de la case{0,0}
  39. //Affichage tableau
  40. for(int i = 0; i<nb_lignes; i++)
  41. {
  42.  for(int j = 0; j<nb_colonnes; j++)
  43.  {
  44.   cout<<tableau[i][j]<<" ";
  45.  }
  46.  cout<<endl;
  47. }
  48. cout<<endl;
  49. cout<<endl;
  50. //Affichage tableau_carre
  51. for(int i = 0; i<nb_lignes; i++)
  52. {
  53.  for(int j = 0; j<nb_colonnes; j++)
  54.  {
  55.   cout<<tableau_carre[i][j]<<" ";
  56.  }
  57.  cout<<endl;
  58. }
  59. for(int i = 0; i<nb_lignes; i++)
  60. {
  61.  delete tableau[i];
  62.  delete tableau_carre[i];
  63. }
  64. delete[] tableau;
  65. delete[] tableau_carre;
  66. system("pause" );
  67. return 0;
  68. }


mood
Publicité
Posté le 29-03-2014 à 00:55:24  profilanswer
 

n°2223648
mwawm
Posté le 01-04-2014 à 11:05:27  profilanswer
 

Bonjour :)
 
Merci de votre aide honrisse  :jap:  
C'est juste que je ne veux afficher qu'un vecteur!
Ma fonction contient deux arguments, le premier pour la boucle for et le deuxième pour que je choisisse le K que je veux, soit K_M=K_eq(i,1), ou K_m=K_eq(i,2) ou K_geo=K_eq(i,3)=K_eq(i,4).
J'ai réussi à calculer toutes les valeurs de mes K (nnode valeurs), mais quand je fais appel à la fonction dans le main, je n'obtient qu'une seule valeur pour tous les K! Je pense que cela provient de mon return(K[nodmax]), mais je n'y ai pas encore trouvé le remède  :??:  
Voici la quasi totalité de mon code
 
Merci  :ange:  
 

Code :
  1. #include<stdlib.h>
  2. #include<stdio.h>
  3. #include<math.h>
  4. #define nodmax 40903
  5. #define nnode 1111
  6. #define Vfwarp 0.504
  7. #define fiber_radius 8.7e-6
  8. #define pi 3.141592654
  9. int i;
  10. double x[nodmax];
  11. int nf;
  12. double K_geo, K_M, K_m, K[nodmax];
  13. double S, A_M, A_m, L_M, L_m, Smax, Smin, Smoy, wh, A,Tp, c;
  14. double k, a, b;
  15. double K_eq(int,int);
  16. double K1,K2,K3,K4;
  17. int main () {
  18. for (i=1;i<=nnode;i++){
  19.  K1=K_eq(i,1);
  20.  K2=K_eq(i,2);
  21.  K3=K_eq(i,3);
  22.  K4=K_eq(i,4);
  23.  printf("K1=%.20f K2=%.20f K3=%.20f K4=%.20f K5=%.20f \n",K1,K2,K3,K4);
  24.  system("pause" );
  25. }
  26.      return (0);
  27. }
  28. double K_eq(int i, int i_tow) {
  29. .
  30.         .
  31.         .
  32.     for(i=1;i<=nnode;i++) {
  33.        K_M=....; // les valeurs de K_M, K_m et K_geo changent en fonction de i
  34.        K_m=....; // c à d que pour chaque i on a une valeur des K
  35.        K_geo=....;// ce qui donne un tableau de valeurs pour chaque K
  36.        if (i_tow==1){
  37.          K[i]=K_M;
  38.        }
  39.        else if (i_tow==2){
  40.          K[i]=K_m;
  41.        }
  42.        else if (i_tow==3){
  43.          K[i]=K_geo;
  44.        }
  45.        else if (i_tow==4){
  46.          K[i]=K_geo;
  47.        }
  48.        else {
  49.         K[i]=0;
  50.         printf("Error in assigning tow index, i_tow=%d\n",i_tow);
  51.        }
  52. }
  53. return (K[nodmax]);
  54. }


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

  [C] Retourner un tableau d'int dans une fonction

 

Sujets relatifs
Pb d'exportation d'une fonction API d'une dllpasser une fonction en paramètre dans une fonction c'est possible ?
[HTML, JS] Faire une fonction javascript qui detecte les espaces[java] equivalent d'un tableau de structure mais en java.
fonction js script que renverse une chaine de caracteretri d'un tableau multi-dimensionnel .. besoin d'aide..
comment supprimer un rang d'un tableau a 3 dimentions ???Probleme avec la fonction UPDATE
[VB(A)]question de tableau...[C] Equivalent a la fonction select()
Plus de sujets relatifs à : [C] Retourner un tableau d'int dans une fonction


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