-
22/12/2010 - 17h50 aydi
comment creer une matrice plus que 2 dimension en c++?
bonsoir,
je veux créer une matrice à n dimensions.
par exemple en matlab lorsque je veux créer(initialiser) plusieurs matrices de nombre inconnu (n) de taille chacun (l,m) donc je fais comme ça
k = zeros(l,m,n);
lorsque je veux obtenir la matrice 3 de taille (l,m) juste j'écris k(l,m,3);
sa semble au feuilles de cahiers l'une sur l'autre. juste je connais le numéro de page(n) donc je peux accéder au page voulu(matrice de taille (l,m))
je veux faire ça en c++.
Merci d'avance.
-
22/12/2010 - 18h36 bzh_nicolas
Re : comment creer une matrice plus que 2 dimension en c++?
Une matrice d'entier statique à 3 dimension par exemple te donnera : Code: int maMatrice[taille_dimension1][taille_dimension2][taille_dimension3]; pour un tableau dynamique à 3 dimension ça va donner quelque chose du genre : Code: int ***maMatrice;
int ind1, ind2;
maMatrice = new int** [taille_dimension1];
for(ind1=0 ; ind1 < taille_dimension1 ; ind1++)
{
maMatrice[ind1] = new int* [taille_dimension2];
for (ind2=0 ; ind2 < taille_dimension2 ; ind2++)
{
MaMatrice[ind1][ind2] = new int [taille_dimension3];
}
} Pour la supprimer, j'ai un doute
je crois que Code: delete[][][] maMatrice; fonctionne (mais j'ai pas testé)
sinon il faut parcourir avec les boucles imbriquées : Code: for (ind1=0 ; ind1 < taille_dimension1 ; ind1++)
{
for (ind2=0 ; ind2 <taille_dimension2 ; ind++)
{
delete [] maMatrice[ind1][ind2];
}
delete [] maMatrice[ind1];
}
delete [] maMatrice; -
23/12/2010 - 00h29 Marthi
Re : comment creer une matrice plus que 2 dimension en c++?
Ou alors, faire appel a la STL : Code: std::list<int, std::list<int, int>> myVar; Faut utiliser les methode qui vont avec, c'est sur :
.push_back() pour ajouter, .append() pour chercher.
-
23/12/2010 - 10h32 aydi
Re : comment creer une matrice plus que 2 dimension en c++?
-
24/12/2010 - 13h18 aydi
Re : comment creer une matrice plus que 2 dimension en c++?
bonsoir,
j'ai appliqué votre methode de creartion de tableau statique dans une strcture. car j'ai besion d'une fonction qui peut retourner un tableau. avec des dimensions faible sa marche mais lorsque j'augmente la taille du tableau il apparait une erreur.
Unhandled exception at 0x004afb37 in exercice.exe: 0xC00000FD: Stack overflow.
comment je peux resoudre ce probleme. stack averflow
j'ai besoin d'un tableau comme ca et meme parfois plus: {
int tab[112][128][123];
};
avec matlab sa marche sans probleme
pourquoi avec visual c++ non?
Merci d'avance
-
24/12/2010 - 13h46 Jack
Re : comment creer une matrice plus que 2 dimension en c++?
Les variables statiques étant stockées dans la pile, tu occupes donc rien que pour le tableau plus de 7 Mo, ce qui me semble beaucoup pour la pile.
Il va donc surement falloir travailler avec des tableaux dynamiques qui vont eux se retrouver dans le tas.
A+
Dernière modification par Jack ; 24/12/2010 à 13h49.
-
24/12/2010 - 17h22 aydi
Re : comment creer une matrice plus que 2 dimension en c++?
 Envoyé par Jack Les variables statiques étant stockées dans la pile, tu occupes donc rien que pour le tableau plus de 7 Mo, ce qui me semble beaucoup pour la pile.
Il va donc surement falloir travailler avec des tableaux dynamiques qui vont eux se retrouver dans le tas.
A+ Merci tout d'abord.
voila mon code.
comment je peux le corrigé. Code: #include <math.h>
#include<stdio.h>
#include<stdlib.h>
typedef struct tabdedans{
int tab[112][128][123];
};
//2 eme FONCTION
tabdedans fonc2(tabdedans arg,int r,int m,int n)
{
int i,j,k;
double x=n*m*r;
for(int k=0;k<123;k++)
{
for(int i=0;i<112;i++)
for(int j=0;j<128;j++)
{
arg.tab[i][j][k]=x+arg.tab[i][j][k] ;
}
}
return arg;
}
//fin fonc2
tabdedans fonc(tabdedans arg,int rayonmin,int ny)
{
int mx=3;
for(int j=0;j<123;j++)
{
arg=fonc2(arg,rayonmin+j,mx,ny);
}
return arg ;
}
//findeclaration fonction qui retourne un tableau
int main()
{
tabdedans stab= {0},stab1 ; //remplissage à 0 de la structure, donc du tableau
// stab=(tabdedans) malloc(sizeof(tabdedans));
stab=fonc(stab,3,9);
for(int k=0;k<123;k++)
{
for(int i=0;i<112;i++)
for(int j=0;j<128;j++)
{
printf("satb[%d][%d][%d]=%d\n",i,j,k,stab.tab[i][j][k]) ;//limpide !
}
}
return 0;
} | | |