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

  FORUM HardWare.fr
  Programmation
  C++

  Pb : tableau[ ][ ] de taille non déclaré dans une fonction

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pb : tableau[ ][ ] de taille non déclaré dans une fonction

n°821019
lunarnet76
Posté le 12-08-2004 à 01:11:55  profilanswer
 

en fait g deja demandé ca, mais on ma répondu d'utiliser les pointeurs :
je cherche a faire ca :
 
int a[4][5]={...etc...}
int fonction(a){}
 
et je veux ne pas a avoir a donné la taille du tableau dans la fonction... car il faut toujours donner genre a[][56] et je veux que ca marche avec un tableau de n importe quel grandeur pas forcement 5... et surcharger la fonction c'est un peu con ...  
en fait mon but est de simplement remplir un tableau existant (vide et faisant parti des données membres d'une classe) par un remplis...  
 
mici

mood
Publicité
Posté le 12-08-2004 à 01:11:55  profilanswer
 

n°821026
lunarnet76
Posté le 12-08-2004 à 02:02:24  profilanswer
 

bon alors en fait g la classe:
class Matrice{
 private:
  int nc,nl;
  int num[MAXMATRICE][MAXMATRICE];
  int den[MAXMATRICE][MAXMATRICE];
};
 
et je veux une fonction membre qui permette de mettre le tableau a[2][3] ou b[6][7] dans num (l'array donnée membre) ... comment on fait???
parce que la fonction est du genre :
void Matrice::aa(int a[][]){
    num=aa;
}
mais ce #°§¢¬# d'argument de la fonction aa doit avoir sa deuxieme partie donc le [x] de a[][x] définit constant ...

n°821029
lunarnet76
Posté le 12-08-2004 à 02:11:17  profilanswer
 

Waouh g trouvé un truc vraiment tout con pour que ca marche, utilisé un tableau a une seule dimension ;-( pourquoi n'y est je pas pensé avant ...

n°821045
xterminhat​e
Si vis pacem, para bellum.
Posté le 12-08-2004 à 07:43:27  profilanswer
 

Le passage d'un tableau C par copie n'existe pas. Un passage par pointeur est plus approprié -> (int* a).
 
Tu t'embetes bcp, un simple std::vector fera l'affaire. Il existe une classe matrice dans boost:: d'ailleurs.


---------------
Cordialement, Xterm-in'Hate...
n°821047
Taz
bisounours-codeur
Posté le 12-08-2004 à 08:14:18  profilanswer
 

xterminhate a écrit :

Le passage d'un tableau C par copie n'existe pas. Un passage par pointeur est plus approprié -> (int* a).

par référence ça marche très bien

n°821333
lunarnet76
Posté le 12-08-2004 à 12:28:13  profilanswer
 

euh pour la classe deja toute fait ca me dit rien parce que mon but c justement de faire la classe compléte!!!!
mais sinon par pointeur je n'arrive pas a comprendre comment ca marche avec un tableau a 2 dimensions ... si c t possible de me donner un ptit exemple!!!!

n°822545
willynt
Posté le 13-08-2004 à 16:18:29  profilanswer
 

Ben ton pointeur est le début de ton tableau !
si tu as
int tab[4][4];
 
et une fonction
void ProcessTab( int* pTab );
 
tu appelles ProcessTab( tab );
c'est tout
 
et dans ta fonction, tu parcours le tableau à la main...
par example
for ( in i = 0 ; i < 4 ; i++ )
{
  for ( int j = 0 ; j < 4 ; j++ )
    tab+i*4+j te donne ton élément du tableau
}

n°822552
cris56
Posté le 13-08-2004 à 16:26:55  profilanswer
 

et void ProcessTab( int (*pTab)[4] ); ?


Message édité par cris56 le 13-08-2004 à 16:27:25
n°822594
xterminhat​e
Si vis pacem, para bellum.
Posté le 13-08-2004 à 17:16:55  profilanswer
 

void P..T..(int* pTab) est correct.


---------------
Cordialement, Xterm-in'Hate...
n°822632
cris56
Posté le 13-08-2004 à 17:44:37  profilanswer
 

oui mais  avec  
 
void ProcessTab( int (*pTab)[4] );  
(ou void ProcessTab( int pTab[][4] );  
 
tu peux indexer le tableau en 2d

mood
Publicité
Posté le 13-08-2004 à 17:44:37  profilanswer
 

n°822635
Taz
bisounours-codeur
Posté le 13-08-2004 à 17:45:32  profilanswer
 

c'est mieux les référence :o

n°822641
cris56
Posté le 13-08-2004 à 17:47:42  profilanswer
 

desolé, je sais jamais si on parle de c ou c++

n°822654
Taz
bisounours-codeur
Posté le 13-08-2004 à 17:57:53  profilanswer
 

C++

n°822782
xterminhat​e
Si vis pacem, para bellum.
Posté le 13-08-2004 à 19:29:56  profilanswer
 

Ok. Par défaut, void F..T..( int p[][4] ) est plus simple.


---------------
Cordialement, Xterm-in'Hate...
n°822786
Taz
bisounours-codeur
Posté le 13-08-2004 à 19:31:40  profilanswer
 

tu vois une différence ?

n°822790
xterminhat​e
Si vis pacem, para bellum.
Posté le 13-08-2004 à 19:43:23  profilanswer
 

A l'utilisation, c'est qd même plus pratique.


---------------
Cordialement, Xterm-in'Hate...
n°822795
Taz
bisounours-codeur
Posté le 13-08-2004 à 19:53:01  profilanswer
 

c'est quoi la différence ?

n°822797
xterminhat​e
Si vis pacem, para bellum.
Posté le 13-08-2004 à 19:55:43  profilanswer
 

Quelle différence, entre quoi et quoi ?


---------------
Cordialement, Xterm-in'Hate...
n°822799
cricri_
Posté le 13-08-2004 à 19:58:26  profilanswer
 

Bon, et si tu nous proposais ta solution Taz ? ;)

n°822806
Taz
bisounours-codeur
Posté le 13-08-2004 à 20:06:21  profilanswer
 

Taz a écrit :

c'est mieux les référence :o

n°822807
xterminhat​e
Si vis pacem, para bellum.
Posté le 13-08-2004 à 20:08:20  profilanswer
 

c'est pas un passage par référence, ce que j'ai filé en dernier ? On m'aurait menti ! J'aurais dit aucune différence...


Message édité par xterminhate le 13-08-2004 à 20:11:03

---------------
Cordialement, Xterm-in'Hate...
n°822901
el muchach​o
Comfortably Numb
Posté le 13-08-2004 à 22:22:25  profilanswer
 

xterminhate a écrit :

c'est pas un passage par référence, ce que j'ai filé en dernier ? On m'aurait menti ! J'aurais dit aucune différence...


 

Citation :

void ProcessTab( int (*pTab)[4] );  
(ou void ProcessTab( int pTab[][4] );  
 


 
pointeur...


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°822978
xterminhat​e
Si vis pacem, para bellum.
Posté le 13-08-2004 à 23:26:34  profilanswer
 

Une chose est sure, je me melange les pinceaux... j'aurais mieux fait de me taire :/ Le passage par référence d'un tableau s'ecrit comment alors ?


Message édité par xterminhate le 13-08-2004 à 23:27:11

---------------
Cordialement, Xterm-in'Hate...
n°822987
cris56
Posté le 13-08-2004 à 23:41:33  profilanswer
 

comme ca ?
 

Code :
  1. typedef double matrix_4x4 [4][4];
  2. void set_identity( matrix_4x4& m );

n°823017
xterminhat​e
Si vis pacem, para bellum.
Posté le 14-08-2004 à 01:14:53  profilanswer
 

Sans doute, je n'ai pas trouvé d'ecriture sans le typedef.


---------------
Cordialement, Xterm-in'Hate...
n°823026
lunarnet76
Posté le 14-08-2004 à 03:20:03  profilanswer
 

ouai en fait comme on doit utiliser le  
tab+i*4+j  
ben c comme si on avé un tableau a une dimension que l on transformé en 2 dimensions, ce que j ai fait, c juste une autre forme mais ca doit avoir de l'interet pour autre chose lol !! merci en tout cas o moins g une autre solution!  

n°823028
blackgodde​ss
vive le troll !
Posté le 14-08-2004 à 04:41:57  profilanswer
 

void fonction(type (&tab)[dimension]);


Message édité par blackgoddess le 14-08-2004 à 04:45:16

---------------
-( BlackGoddess )-
n°823052
xterminhat​e
Si vis pacem, para bellum.
Posté le 14-08-2004 à 09:55:11  profilanswer
 

Ok, merci.


---------------
Cordialement, Xterm-in'Hate...
n°823253
Taz
bisounours-codeur
Posté le 14-08-2004 à 19:12:30  profilanswer
 

Code :
  1. #include <cstddef>
  2. template<typename T>
  3. T mean(const T *a, size_t n)
  4. {
  5.   T s = T(0);
  6.   for(size_t i = 0; i < n; ++i)
  7.     s += a[i];
  8.   return s / n;
  9. }
  10. template<typename T>
  11. T mean(const T *a, size_t n, size_t m)
  12. {
  13.   T s = T(0);
  14.   for(size_t i = 0; i < n; ++i)
  15.     s += mean(&a[i *  m], m);
  16.   return s / n;
  17. }
  18. template<typename T, size_t N>
  19. inline T mean(const T (&a)[N])
  20. {
  21.   return mean(&a[0], N);
  22. }
  23. template<typename T, size_t N, size_t M>
  24. inline T mean(const T (&a)[N][M])
  25. {
  26.   return mean(&a[0][0], N, M);
  27. }
  28. #include <iostream>
  29. int main()
  30. {
  31.   double t1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  32.   double t2[][2] = { {1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10} };
  33.   std::cout << mean(t1) << '\n'
  34.     << mean(t2) << '\n';
  35. }


 
le mieux c'est encore de fournir toutes les versions. ici le calcul de la moyenne pour un vecteur et une matrice. on a les versions classiques à base de pointeur et les versions template qui permettent une syntaxe d'appel naturel. tout ça dans le but déviter de générer une définition pour chaque (N,) ou (N, M)

n°828288
Joel F
Real men use unique_ptr
Posté le 21-08-2004 à 11:27:28  profilanswer
 

tvmet et zou .... :sarcastic:


Message édité par Joel F le 21-08-2004 à 11:27:47
n°828290
Taz
bisounours-codeur
Posté le 21-08-2004 à 11:30:40  profilanswer
 

carrément, mais déjà que la plus part son pas près pour boost ... quoi que tu commences à t'y mettre :p

n°828294
Joel F
Real men use unique_ptr
Posté le 21-08-2004 à 11:45:12  profilanswer
 

ben je connaissais po avant :p

n°831501
lunarnet76
Posté le 25-08-2004 à 02:28:05  profilanswer
 

Code :
  1. template<typename T, size_t N, size_t M>
  2.   inline T mean(const T (&a)[N][M])
  3.   {
  4.       return mean(&a[0][0], N, M);
  5.   }


evidement avec ma chance ca marche pas...
bon comment je peux faire tout bétement en ayant une class Fr et une Matrice???

Code :
  1. void Matrice::assignertableau(Fr (&a)[][]){}


ca s'utilise comment???
Merci encore...


---------------
!jb!
n°831503
lunarnet76
Posté le 25-08-2004 à 02:56:30  profilanswer
 

ARRRGh... lol... ca va faire plus de 4h que je suis bloquer sur ce probleme :cry:  :cry:  :cry:


Message édité par lunarnet76 le 25-08-2004 à 03:00:56

---------------
!jb!
n°831510
Taz
bisounours-codeur
Posté le 25-08-2004 à 07:47:28  profilanswer
 

en faisant comme je t'ai montré

n°832066
blackgodde​ss
vive le troll !
Posté le 25-08-2004 à 17:25:52  profilanswer
 

s += mean(&a[i *  m], m);
 
=> tous les compilos implémentent les tableaux a plusieurs dimensions comme ca ?
( case1.1, case1.2, case1.3, case2.1, case2.2, case2.3 )


---------------
-( BlackGoddess )-
n°832083
Taz
bisounours-codeur
Posté le 25-08-2004 à 17:55:45  profilanswer
 

oui, je ne vois pas comment il pourrait en être autrement. réfléchis y (contiguité mémoire et ordre)

n°832088
el muchach​o
Comfortably Numb
Posté le 25-08-2004 à 17:58:17  profilanswer
 

En Fortran, c'est le premier indice qui s'incrémente en premier.


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°832238
Taz
bisounours-codeur
Posté le 25-08-2004 à 20:48:18  profilanswer
 

là n'est pas la question. mais vu les propriétés d'un tableau en C++ il ne pourrait en être autrement

mood
Publicité
Posté le   profilanswer
 


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

  Pb : tableau[ ][ ] de taille non déclaré dans une fonction

 

Sujets relatifs
Afficher les valeurs d'un tableau Excel sous forme de cercles ?Gtk# : Avoir un renderer différent en fonction du niveau dans l'arbre
Fonction "Val()"[Java] Problème de taille mémoire avec un JTree
Tableau XSL/FO PDFObtenir le Nombre de collones sans la fonction num_fields
Fonction Explode : histoire de paramètre[Debutant] exo comprenant tableau et structure
ASP erreur création d'un tableau[PHP] Accés dans un tableau d'objets...
Plus de sujets relatifs à : Pb : tableau[ ][ ] de taille non déclaré dans une fonction


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