[debutant C++] [Urgent] Tableau 2D nombre de colonne inconnu

Tableau 2D nombre de colonne inconnu [debutant C++] [Urgent] - C++ - Programmation

Marsh Posté le 24-02-2006 à 16:24:22    

Comment créer un tableau 2 dimension avec la version 6 de Visual C++ quand on ne connait pas le nombre de colonne mais que celui-ci nous est demandé au début du programme?

Reply

Marsh Posté le 24-02-2006 à 16:24:22   

Reply

Marsh Posté le 24-02-2006 à 16:48:43    

tableau à taille dynamique -> std::vector
http://www.sgi.com/tech/stl/Vector.html

Reply

Marsh Posté le 24-02-2006 à 16:59:46    

Code :
  1. ...
  2. const int LIGNE = 100;
  3. ...
  4. cin >> COL;
  5. int tab[LIGNE][COL];


 
un truc dans le genre si j'ai bien compris ce que tu veux


---------------
http://www.blastmanu.info
Reply

Marsh Posté le 24-02-2006 à 17:08:37    

oui c'est ça qu'il me faut mais dans la déclaration je fais comment pour déclarer tab[Nbli][Nbco]?comme Nbco n'est pas une constante?

Reply

Marsh Posté le 24-02-2006 à 17:14:47    

et alors ? tu le déclare pas en tant que constante ou alors tu fais ca
 

Code :
  1. ...
  2. cin >> taille;
  3. const int COL = taille;
  4. int tab[LIGNE][COL];


 
note :
utiliser la STL est beaucoup mieux (cf réponse de sketler)

Message cité 1 fois
Message édité par blastman le 24-02-2006 à 17:17:10

---------------
http://www.blastmanu.info
Reply

Marsh Posté le 24-02-2006 à 17:29:45    

j'ai pas encore fait la STL merci beaucoup pour cette aide jvais l'essayer

Reply

Marsh Posté le 24-02-2006 à 17:38:52    

blastman a écrit :

et alors ? tu le déclare pas en tant que constante ou alors tu fais ca
 

Code :
  1. ...
  2. cin >> taille;
  3. const int COL = taille;
  4. int tab[LIGNE][COL];




 
oui mais const ou pas si la taille ne peut pas etre resolu à la compilation (essayes donc d'initialiser le tableau) c'est du vla et ce n'est pas standard


Message édité par skelter le 24-02-2006 à 17:39:15
Reply

Marsh Posté le 24-02-2006 à 17:43:00    

int NMAX;
 cout<<"combien de restaurants ont été visités?";
 cin>>NMAX;
 
 const int NbLi=3;
 const int NbCo=NMAX;
 int Tab[NbLi][NbCo];
 int L,C;
 
La ligne en rouge pose pobleme : j'ai comme erreur :
 
.cpp(18) : error C2057: expected constant expression
.cpp(18) : error C2466: cannot allocate an array of constant size 0
.cpp(18) : error C2087: '<Unknown>' : missing subscript
Error executing cl.exe.
 
Comment le résoudre?

Reply

Marsh Posté le 24-02-2006 à 17:50:41    

peut-être en déclarant un :
 
int** Tab;
 
et en l'allouant après ?

Reply

Marsh Posté le 24-02-2006 à 17:51:41    

vector< vector<int> > Tab(3, vector<int>(NMAX)),

Reply

Marsh Posté le 24-02-2006 à 17:51:41   

Reply

Marsh Posté le 24-02-2006 à 17:52:38    

o6six a écrit :

int NMAX;
 cout<<"combien de restaurants ont été visités?";
 cin>>NMAX;
 
 const int NbLi=3;
 const int NbCo=NMAX;
 int Tab[NbLi][NbCo];
 int L,C;
 
La ligne en rouge pose pobleme : j'ai comme erreur :
 
.cpp(18) : error C2057: expected constant expression
.cpp(18) : error C2466: cannot allocate an array of constant size 0
.cpp(18) : error C2087: '<Unknown>' : missing subscript
Error executing cl.exe.
 
Comment le résoudre?


 
c'est ce que j'avais dis, la solution de blastman dépend du compilateur (pas standard)


Message édité par skelter le 24-02-2006 à 17:54:24
Reply

Marsh Posté le 15-03-2006 à 14:10:27    

si tu est toujours intérésse voici deux propositions
1- tu peut déclarer un tableau de taille maximale dépendant du domaine de ton travail (100,1000 ou autre ..) et n'utiliser qu'une partie de ce tableau tel que (for i=0; i<ncol;i++) {traitement} aprés avoir lu ncol  
2- ou bien l'alocation dynamique tel que proposée par xxxx mais là tu ne peut pas profiter de double indxation le tableau sera d'une seule dimension et T[i,j] devient T[i*ncol+j]
et bien sure l'alocation sefait par maloc ou caloc ou bien new tu doit revoir l'aide pour la syntaxe correcte.
merci de me répendre si ca marche ou non

Reply

Marsh Posté le 17-03-2006 à 19:36:47    

int **tab;
 
cin>>nbLigne
tab = new int *[nbLigne];
 
//ensuite on initialise chaque ligne  
cin>>NbCol;
tab[0]= new int[NbCol]
....
Cette solution te permet à la fois: initialiser dynamiquement nbLigne  
et initialiser chaque ligne avec un nombre colonne different
 
N'oublie pas à liberer le memoire avec  delete


Message édité par zen 68 le 17-03-2006 à 19:38:47
Reply

Marsh Posté le 18-03-2006 à 14:04:27    

Taz a écrit :

vector< vector<int> > Tab(3, vector<int>(NMAX)),


Astucieux et compact.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed