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

  FORUM HardWare.fr
  Programmation
  C++

  matrice multidimenssionnelle

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

matrice multidimenssionnelle

n°2238498
etudoc
Posté le 22-09-2014 à 11:26:03  profilanswer
 

Bonjour à tous,
 
j'ai une fonction à plusieurs paramétrés f(k,t, y, w), je dois déclarer cette fonction comme une matrice à plusieurs paramètres (ou un tableau multidimensionnel).
est possible de l'écrire de la façon suivante en c++:

Code :
  1. double f[k][t][y][w];/cpp]
  2. et l'initialiser de la manière suivante:
  3. [cpp]f[0][0][0][0]=0;


 
merci de m'aider sur ce petit pb et m'orienter vers des liens qui peuvent m'aider.
 
merci d'avance pour vos réponses.


---------------
etudoc
mood
Publicité
Posté le 22-09-2014 à 11:26:03  profilanswer
 

n°2238499
theshockwa​ve
I work at a firm named Koslow
Posté le 22-09-2014 à 11:48:50  profilanswer
 

en général, en C++, on évite les tableaux C.

 

Ce que tu veux faire est tout à fait possible, de la manière dont tu le décris, mais attention à la taille de tes données : tu risques de faire assez facilement exploser ta pile avec des tableaux de ce genre.

Message cité 1 fois
Message édité par theshockwave le 22-09-2014 à 11:49:13

---------------
last.fm
n°2238503
etudoc
Posté le 22-09-2014 à 12:01:55  profilanswer
 

theshockwave a écrit :

en général, en C++, on évite les tableaux C.
 
Ce que tu veux faire est tout à fait possible, de la manière dont tu le décris, mais attention à la taille de tes données : tu risques de faire assez facilement exploser ta pile avec des tableaux de ce genre.


 
 
merci pour ta réponse.
chaque paramètre de ma fonction est de taille 36!!
 
Ya t-il une autre manière de procéder?
 
on peut déclarer une matrice à 2 dimensions comme un vecteur de vecteur, est ce possible de déclarer ma fonction comme un vecteur de vecteur de vecteur de vecteur??!!
désolée si je dis des bêtises, car je suis débutante en C++!


---------------
etudoc
n°2238512
theshockwa​ve
I work at a firm named Koslow
Posté le 22-09-2014 à 12:59:25  profilanswer
 

ta mémoire peut être considérée de manière linéaire. Quand tu fais des tableaux de tableaux de tableaux, au final, tu restes avec une succession d'adresses utilisées et c'est une poignée de multiplications et d'additions pour trouver l'adresse qui correspond à tes coordonnées.
Tu pourrais tout à fait te contenter d'un vector<double> que tu redimensionnes à 36*36*36*36 et faire ce petit peu de maths par toi-même.
L'avantage de vector, c'est que tes données vont être allouées sur le tas, et non pas sur la pile.
 
Sinon, si ton compilateur n'est pas trop vieux, alors tu peux sans doute utiliser std::array pour faire le boulot. Tu auras toujours besoin de faire attention à la taille de ta pile, par contre.
 
Apparamment, tu n'es pas à l'aise avec la pile et le tas. Les variables que tu déclares dans le corps d'une fonction vont prendre de la mémoire sur la pile. Si tu veux utiliser le tas, tu dois passer par des mécanismes d'allocation dynamique manuellement (new et delete) ou automatiquement (std::unique_ptr avec std::make_unique, ou std::shared_ptr avec std::make_shared)


---------------
last.fm
n°2238517
etudoc
Posté le 22-09-2014 à 13:09:57  profilanswer
 

theshockwave a écrit :

ta mémoire peut être considérée de manière linéaire. Quand tu fais des tableaux de tableaux de tableaux, au final, tu restes avec une succession d'adresses utilisées et c'est une poignée de multiplications et d'additions pour trouver l'adresse qui correspond à tes coordonnées.
Tu pourrais tout à fait te contenter d'un vector<double> que tu redimensionnes à 36*36*36*36 et faire ce petit peu de maths par toi-même.
L'avantage de vector, c'est que tes données vont être allouées sur le tas, et non pas sur la pile.
 
Sinon, si ton compilateur n'est pas trop vieux, alors tu peux sans doute utiliser std::array pour faire le boulot. Tu auras toujours besoin de faire attention à la taille de ta pile, par contre.
 
Apparamment, tu n'es pas à l'aise avec la pile et le tas. Les variables que tu déclares dans le corps d'une fonction vont prendre de la mémoire sur la pile. Si tu veux utiliser le tas, tu dois passer par des mécanismes d'allocation dynamique manuellement (new et delete) ou automatiquement (std::unique_ptr avec std::make_unique, ou std::shared_ptr avec std::make_shared)


 
 
merci bcp pour toutes tes explications.


---------------
etudoc
n°2238529
gilou
Modérateur
Modzilla
Posté le 22-09-2014 à 14:33:52  profilanswer
 

Quand c'est un tableau de valeurs numériques, il n'y a aucun mal a utiliser la pile pour un gros tableau multidimensionnel, a condition qu'il ne soit pas instancié à de multiple reprises.
Il faudrait en savoir un peu plus sur ton code et l'utilisation dudit tableau.
Par contre, tu risques de dépasser les limites mémoires par défaut de ton compilateur, mais vu la taille de ton tableau (15 a 20 Mo?) et celle des mémoires vives des bécanes modernes, il suffira juste d'augmenter la taille de la pile, ce qui se fait avec une option de ton compilateur.
 
Un des intérêts des tableaux à la C en C++, c'est qu'ils peuvent être de taille fixe, mais variable entre deux appels:

Code :
  1. #include <iostream>
  2. int test(int i, int j) {
  3.     int tableau[i][j];
  4.     for (auto k = 0; k < i; ++k) {
  5.         for (auto l = 0; l < j; ++l) {
  6.             tableau[k][l] = k + l;
  7.         }
  8.     }
  9.     for (auto k = 0; k < i; ++k) {
  10.         for (auto l = 0; l < j; ++l) {
  11.             std::cout << tableau[k][l];
  12.         }
  13.         std::cout << std::endl;
  14.     }
  15.     return 0;
  16. }
  17. int main ()
  18. {
  19.     test(2,2);
  20.     std::cout << std::endl;
  21.     test(2,3);
  22.     std::cout << std::endl;
  23.     test(3,2);
  24.     return 0;
  25. }


En sortie:
01
12
 
012
123
 
01
12
23
 
A+,

Message cité 1 fois
Message édité par gilou le 23-09-2014 à 12:41:14

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2238535
theshockwa​ve
I work at a firm named Koslow
Posté le 22-09-2014 à 15:01:43  profilanswer
 

 


Je crois que tu as confondu pile et tas dans ton message  [:petrus75]

 

Edit : c'est vil, d'éditer les quotes dans les messages des autres :p

Message cité 2 fois
Message édité par theshockwave le 22-09-2014 à 15:27:31

---------------
last.fm
n°2238537
gilou
Modérateur
Modzilla
Posté le 22-09-2014 à 15:14:16  profilanswer
 

theshockwave a écrit :


 
 
Je crois que tu as confondu pile et tas dans ton message  [:petrus75]

Corrigé. Mentalement, j'utilise que stack et heap, et quand je pense stack, et que je veux franciser, 3 fois sur 4, je me fais avoir avec les voyelles: stack, son a, d'ou mon tas fautif (et heap, son i, d'ou un pile fautif luis aussi) :D
A+,
 


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2238609
gilou
Modérateur
Modzilla
Posté le 23-09-2014 à 12:40:31  profilanswer
 

theshockwave a écrit :


 
 
Je crois que tu as confondu pile et tas dans ton message  [:petrus75]
 
Edit : c'est vil, d'éditer les quotes dans les messages des autres :p

Ah zut, c'est involontaire, je croyais l'avoir corrigé dans le mien :o  
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

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

  matrice multidimenssionnelle

 

Sujets relatifs
créer une image à partir d'une matricelibrairie CImg : créer une image à partir d'une matrice
Assembleur matriceréliser une interface de matrice avec netbeans
Rendre la géométrie d'une matrice compréhensible à un programmeMatrice, extraire par index
comment remplir une matrice à partir d'un vecteurréceptionner un matrice de c++ et la mettre dans une matrice en java
initialisation d'une matrice en c++erreur de segmentation sur matrice
Plus de sujets relatifs à : matrice multidimenssionnelle


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