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

  FORUM HardWare.fr
  Programmation
  C++

  tableau a 2 dimensions!!!!!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

tableau a 2 dimensions!!!!!

n°1537873
hamoudasaf​ira1
Posté le 03-04-2007 à 15:14:35  profilanswer
 

salut,
j'ai un petit problème. j'ai un tableau de 2 dimensions je voudrai lui affecté des valeurs en double[3], mais ça plante pourqoui????
 
VolumeGradient[i][0]=Gradient[0];
VolumeGradient[i][1]=Gradient[1];
VolumeGradient[i][2]=Gradient[2];
 
et c'est comme ça que j'affecte mon tableau et ça plante ???????????
merci pour vos aides

mood
Publicité
Posté le 03-04-2007 à 15:14:35  profilanswer
 

n°1537876
_darkalt3_
Proctopathe
Posté le 03-04-2007 à 15:15:47  profilanswer
 

Ca alors et ton tableau est de quel type ??????????????????
Et pourquoi t'utilises pas  des std::vector ??????!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


---------------
Töp of the plöp
n°1537898
hamoudasaf​ira1
Posté le 03-04-2007 à 15:28:18  profilanswer
 

double **VolumeGradient;
VolumeGradient=new double [NbredesPoints];
for(int i=0; i<NbredesPoints;i++)
VolumeGradient[i]=new double [3];
 
c'est comme ça que je déclare le tableau VolumeGradient et que je l'alloue.
pour Gradient c'est un double Gradient[3], tout simplement

n°1537900
_darkalt3_
Proctopathe
Posté le 03-04-2007 à 15:30:49  profilanswer
 

- ouvres un livre de c++
ou
- utilises des std::vector


---------------
Töp of the plöp
n°1537915
hamoudasaf​ira1
Posté le 03-04-2007 à 15:38:01  profilanswer
 

le problème ne vient pas que je ne sais pas utiliser le C++ mais c'est un problème de calcul je pense ou bien d'affectation je ne sais pas, mais j'aimerai entrer dans des std::vector et des trucs comme ça, parce que premiérement je ne l'ai jamais utiliser et 2ément la déclaration est bonne comme ça.

n°1537917
_darkalt3_
Proctopathe
Posté le 03-04-2007 à 15:41:00  profilanswer
 

non


---------------
Töp of the plöp
n°1537925
hamoudasaf​ira1
Posté le 03-04-2007 à 15:49:30  profilanswer
 

pourquoi non ?????? si on peut faire la déclaration d'un tableau à 2 dimensions de cette manière même si elle est trop fiable mais on pourrai la faire comme même, vous voulez m'aider à fair erésourdre ce problème ou pas???
je veux vous mettre le code là ou ça plante et j'espère que vous trouverez la faille. c'est là ou je vous ai mais la fléche.
[cpp]if(W=1)//Ha(p)=H(p) implique non-feature vertices, donc Va(p)=gradient de volume
   {
    -->VolumeGradient[i][0]=Gradient[0];
    VolumeGradient[i][1]=Gradient[1];
    VolumeGradient[i][2]=Gradient[2];
   }
   else
   {
    VolumeGradient[i][0]=signum*Eha[i][0];//calcul de Va
    VolumeGradient[i][1]=signum*Eha[i][1];
    VolumeGradient[i][2]=signum*Eha[i][2];
   }

n°1537932
MagicBuzz
Posté le 03-04-2007 à 15:55:01  profilanswer
 

tab[x][y] c'est pas un tableau à 2 dimensions, c'est un tableau à 1 dimension de tableaux à 1 dimension.
 
rien n'implique ici par exemple que max(y) sera identique pour chaque valeur de x.
 
un tableau à 2 dimensions, c'est ça : tab[x, y] <- après, cette syntaxe n'est pas supportée par tous les langages, et occupe bien plus de mémoire si tu n'as pas l'intension de remplir toutes les "cases". par contre, l'adressage d'une valeur est bien plus rapide, puisqu'on travail avec des offset de taille fixe.


Message édité par MagicBuzz le 03-04-2007 à 15:55:49
n°1537938
_darkalt3_
Proctopathe
Posté le 03-04-2007 à 15:59:37  profilanswer
 

hamoudasafira1 a écrit :

double **VolumeGradient;
VolumeGradient=new double [NbredesPoints];


Règle ton compilateur parce que ca c'est une erreur.
 
Pour la suite les types sont mauvais;
J'imagine que tu veux faire un tableau à trois dimensions de vecteurs3d. Or là tu *tentes* de faire un tableau à deux dimensions de doubles.
 
Regarde comment on gère les tableaux, regarde comment on gère les std::vector, vas boire une bière et reprend ton bordel.


---------------
Töp of the plöp
n°1537939
Taz
bisounours-codeur
Posté le 03-04-2007 à 15:59:51  profilanswer
 

hamoudasafira1 a écrit :

double **VolumeGradient;
VolumeGradient=new double [NbredesPoints];
for(int i=0; i<NbredesPoints;i++)
VolumeGradient[i]=new double [3];
 
c'est comme ça que je déclare le tableau VolumeGradient et que je l'alloue.
pour Gradient c'est un double Gradient[3], tout simplement


superbement inefficace. Creuse toi la tête et fait tout ça en un seul new

mood
Publicité
Posté le 03-04-2007 à 15:59:51  profilanswer
 

n°1537940
MagicBuzz
Posté le 03-04-2007 à 16:01:12  profilanswer
 

pkoi tu veux absolument l'obliger à bosser avec une lib externe ? rien n'empêche de travailler en C++ sans utiliser la moindre lib...

n°1537942
MagicBuzz
Posté le 03-04-2007 à 16:02:05  profilanswer
 

sinon, question stupide, C++ sait pas gérer de vrais tableaux à 2 dimensions ? new double[nbredespoints, 3] ?

n°1537944
_darkalt3_
Proctopathe
Posté le 03-04-2007 à 16:05:38  profilanswer
 

MagicBuzz a écrit :

pkoi tu veux absolument l'obliger à bosser avec une lib externe ? rien n'empêche de travailler en C++ sans utiliser la moindre lib...


Parce que stl c'est standard, livré avec et fait pour pas s'emmerder à gérer des tableaux, etc.
C'est un peu plus haut niveau, et préférable à mon sens.


---------------
Töp of the plöp
n°1537946
hamoudasaf​ira1
Posté le 03-04-2007 à 16:09:10  profilanswer
 

je sais comment la faire en un seule new c'est de la faire comme ça:
TableFunction=new double [NbredesPoints][3];
mais ça n'empêche pas que je pourrai la faire de cette maniére ok, mais je la fais comme ça pour qu'il parcourir tous les points.
for(int i=0;i<Nbredespoints;i++)
 TableFunction=newdouble[3];
 
pour ça aussi l'allocation n'est pas trop efficace je sais mais ça marché avant et ça dois marché maintenant mais vous éloignez un peur du problème j'ai utilisé le debogueur pour parcourir tout le calcul il y pas de soucis sauf dans cette ligne là ou j'affecte le tableau?????? pourqoui???

n°1537959
_darkalt3_
Proctopathe
Posté le 03-04-2007 à 16:25:23  profilanswer
 

parce queee :fou: !!!!!!!!!!!!!!!!!!
 
Défini une classe vecteur3d, fait ton tableau de la même manière, et affecte des vecteur3d, ca ira bcp mieux.


---------------
Töp of the plöp
n°1537982
hamoudasaf​ira1
Posté le 03-04-2007 à 16:57:37  profilanswer
 

t'énerve pas tu me fais peur  :p  
je crois savoir d'ou vient le problème.
on fait le tableau VolumeGradient est un membre de ma classe, et je l'ai mis comme paramétre dans ma méthode pour l'utiliser dans ma duexième méthode dans cet class, et ce qu'il faut pas faire puisque s'il est un membre de ma classe je n'aurai pas besoin de le mettre en paramétre voilà!!! je pense que ça vient de là

n°1537989
_darkalt3_
Proctopathe
Posté le 03-04-2007 à 17:01:41  profilanswer
 

hamoudasafira1 a écrit :

t'énerve pas tu me fais peur  :p
je crois savoir d'ou vient le problème.
on fait le tableau VolumeGradient est un membre de ma classe, et je l'ai mis comme paramétre dans ma méthode pour l'utiliser dans ma duexième méthode dans cet class, et ce qu'il faut pas faire puisque s'il est un membre de ma classe je n'aurai pas besoin de le mettre en paramétre voilà!!! je pense que ça vient de là

 

[:ciler]
[:totoz]

 
_darkalt3_ a écrit :

- ouvres un livre de c++


Message édité par _darkalt3_ le 03-04-2007 à 17:13:54

---------------
Töp of the plöp
n°1538414
Taz
bisounours-codeur
Posté le 04-04-2007 à 14:47:00  profilanswer
 

std::vector<std::tr::array<double, 3> >  
 
TableFunction=new double [NbredesPoints][3];
 
ça marche pas ça.
maintenant, si tu faisais un typedef double[3] ça donnerait quoi ...

n°1538621
Joel F
Real men use unique_ptr
Posté le 04-04-2007 à 19:52:43  profilanswer
 

MagicBuzz a écrit :

sinon, question stupide, C++ sait pas gérer de vrais tableaux à 2 dimensions ? new double[nbredespoints, 3] ?


 
paske vector<vector<double>> c'est suffisant, portable, standard et fiable :o

n°1538644
GrosBocdel
Posté le 04-04-2007 à 20:21:18  profilanswer
 

Joel F a écrit :

paske vector<vector<double>> c'est suffisant, portable, standard et fiable :o


 
Bah pourtant, j'ai déjà eu un problème où faire un vecteur[1].push_back(toto) a mis un sacré bordel dans vecteur[2]
Vous êtes certains que c'est sûr ce truc?
 
edit : situation où aucune taille prédéfinie n'a été pré réservée aux vecteurs.
re edit question : que fait-il de l'adresse de départ de vecteur[2] lorsque vecteur[1] doit passer par là?

Message cité 1 fois
Message édité par GrosBocdel le 04-04-2007 à 20:25:38
n°1538688
joneal
Posté le 04-04-2007 à 22:07:10  profilanswer
 

ton probleme est ici :
 

Code :
  1. double **VolumeGradient;
  2. VolumeGradient=new double* [NbredesPoints];
  3. for(int i=0; i<NbredesPoints;i++)
  4. VolumeGradient[i]=new double [3];


 

n°1538797
_darkalt3_
Proctopathe
Posté le 05-04-2007 à 09:44:48  profilanswer
 

Ouais mais faut laisser les tableaux aux gens qui font du C :o


---------------
Töp of the plöp
n°1538828
Joel F
Real men use unique_ptr
Posté le 05-04-2007 à 10:43:12  profilanswer
 

GrosBocdel a écrit :


edit : situation où aucune taille prédéfinie n'a été pré réservée aux vecteurs.


 
aprés se servir correctement des trucs ca aide :o
 
vecteur[x] n'est pas défini si la taille du vecteur n'est pas précisée :o
 
donc
 

Code :
  1. vector<vector<double>> a;
  2. for(int i =0;i<4;i++)
  3. {
  4.   vector<double> b;
  5.   a.push_back(b);
  6. a[2].push_back(6.7575);


 
fonctionne, mais  
 

Code :
  1. vector<vector<double>> a;
  2. a[2].push_back(6.7575);


 
ne marche pas pour des raisons évidentes :o

Message cité 1 fois
Message édité par Joel F le 05-04-2007 à 10:43:46
n°1538832
Taz
bisounours-codeur
Posté le 05-04-2007 à 10:57:33  profilanswer
 

Joel F a écrit :

paske vector<vector<double>> c'est suffisant, portable, standard et fiable :o


mais objectivement pas très efficace. Puisqu'on a un langage qui permet de traiter ce genre de problème, autant le faire.

n°1538865
Joel F
Real men use unique_ptr
Posté le 05-04-2007 à 11:52:11  profilanswer
 

Taz a écrit :

mais objectivement pas très efficace. Puisqu'on a un langage qui permet de traiter ce genre de problème, autant le faire.


 
on est d'accord :jap: Mais bon, en première approximation ca suffit bien :)

n°1539163
GrosBocdel
Posté le 05-04-2007 à 18:47:34  profilanswer
 

Joel F a écrit :

aprés se servir correctement des trucs ca aide :o
 
vecteur[x] n'est pas défini si la taille du vecteur n'est pas précisée :o
 
donc
 

Code :
  1. vector<vector<double>> a;
  2. for(int i =0;i<4;i++)
  3. {
  4.   vector<double> b;
  5.   a.push_back(b);
  6. a[2].push_back(6.7575);


 
fonctionne, mais  
 

Code :
  1. vector<vector<double>> a;
  2. a[2].push_back(6.7575);


 
ne marche pas pour des raisons évidentes :o


 
Je ne te parle pas du vecteur extérieur, mais des vecteurs intérieurs.
Je te dis que si vecteur[0] dépasse une certaine taille à force de push_back que tu n'avais pas réservés d'avance, il peut arriver qu'il aille gentiment écraser les valeurs de vecteur[1] sans prévenir.
 

n°1539233
Joel F
Real men use unique_ptr
Posté le 05-04-2007 à 20:32:23  profilanswer
 

tu dois te vautrer quelque part :o
Vu comment le vector est implenté, y a 0 raisons que cela arrive.

n°1541577
Taz
bisounours-codeur
Posté le 11-04-2007 à 18:45:57  profilanswer
 

tiens d'ailleurs, on fait un comment un new/new[] de tableau sans typedef ?

n°1541632
el muchach​o
Comfortably Numb
Posté le 11-04-2007 à 21:00:13  profilanswer
 

Taz a écrit :

mais objectivement pas très efficace. Puisqu'on a un langage qui permet de traiter ce genre de problème, autant le faire.


Tiens, Joel F, si tu n'as pas encore vu, il y a qq chose qui pourrait t'intéresser.

n°1542181
Joel F
Real men use unique_ptr
Posté le 12-04-2007 à 17:51:01  profilanswer
 

j'en avais entendu parler ^^ c'est sur mon backburner pour les mois qui viennent :)  
 
L'avantage est de passer par des representations plus souple que les templates :D  c'ets tellement beau que j'en pleur presque ;)
 
Merci du lien en tout cas :D

n°1542344
++fab
victime du syndrome IH
Posté le 13-04-2007 à 01:31:19  profilanswer
 

Taz a écrit :

tiens d'ailleurs, on fait un comment un new/new[] de tableau sans typedef ?


 
Avec new, ça doit donner ça :
int (*f1)[10] = new ( int [1][10] ) ;
int (**f2)[10] = new ( int (*)[10] ) ;
int (***f3)[10] = new ( int (**)[10] ) ;
etc...
 
Par contre, avec new[], j'y arrive pas, là, de suite :/

n°1542482
Taz
bisounours-codeur
Posté le 13-04-2007 à 11:26:12  profilanswer
 

ouais ben moi aussi je sèche sur le new[]

mood
Publicité
Posté le   profilanswer
 


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

  tableau a 2 dimensions!!!!!

 

Sujets relatifs
Problème avec tableau dynamique à deux dimensionstableau a deux dimensions d'objets
[RESOLU]Trier un tableau a deux dimensionsProbleme Urgent C tableau a deux dimensions
[Javascript] Tableau à plusieurs dimensionsfree() sur tableau dynamiques à 4 dimensions
[PHP]Tableau à 2 dimensionsRéalisé un tableau dynamique en 2 dimensions
Tableau à 2 dimensions tailles inconnuesProbleme tableau 2 dimensions + structure en C
Plus de sujets relatifs à : tableau a 2 dimensions!!!!!


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