Probleme a la creation de matrices

Résolu
feanor04 Messages postés 2 Date d'inscription lundi 2 février 2004 Statut Membre Dernière intervention 31 mai 2006 - 31 mai 2006 à 12:53
feanor04 Messages postés 2 Date d'inscription lundi 2 février 2004 Statut Membre Dernière intervention 31 mai 2006 - 31 mai 2006 à 14:30
Bonjour a tous,


j'aurais besoin de vos lumieres pour le probleme suivant:

Je travaille en C (pas d'autre option) avec Eclipse (derniere version
je crois),  et j'utilise egalement la derniere version de gcc et
Cygwin (je sais ...)


Mon probleme est le suivant, j'ai besoin de travailler sur des matrices, mais elles semblent se chevaucher.

Voici le code:




type.h:

[...]

#define type_data int

[...]


 

assignation.c:

[...]

type_data  *MatrixA. *MatrixB;

[...]

taille = NbreLigne*NbreColonne;

MatrixA = (type_data *) malloc(taille*sizeof(type_data));

MatrixB = (type_data *) malloc(taille*sizeof(type_data));


Apres initialisation des matrices, tout se passe comme si les matrices se chevauchaient ainsi:

__________________

|    MatrixA               |

|                   
_______|________

|__________|______|                |

                    
|                            
|

                    

MatrixB           
|

                    
|______________|


Pour resoudre ce probleme j'ai du sur-dimensionner les matrices ainsi:

type.h:


[...]


#define type_data int

#define Pas 10


[...]



 


assignation.c:


[...]


type_data  *MatrixA. *MatrixB;


[...]


taille = NbreLigne*NbreColonne *Pas;


MatrixA = (type_data *) malloc(taille*sizeof(type_data));


MatrixB = (type_data *) malloc(taille*sizeof(type_data));

Avez vous une idee. En fait, sur un autre projet j'avais le meme
principe pour declarer des matrices, mais je n'avais alors aucun
probleme !


Feanor


NB:

je n'utilise pas la facon classique de declarer des matrices car leur
taille depend de donnees utilisateur et de plus, j'ai besoin de pouvoir
les passer en parametre de differentes fonctions. C'est la facon la
plus propre que j'ai trouve pour le faire.

2 réponses

HSylvio Messages postés 116 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 14 juin 2012
31 mai 2006 à 13:55
Ce n'est peut être pas la meilleure façon de procéder mais pourquoi ne fais tu pas une classe où tu déclares un tableau (une seule dimension donc) pour l'utiliser tel une matrice avec par exemple getElement(a,b){return tableau[a*sizeJ+b];}
La même chose avec des list pour subvenir à la taille variable des matrices, mais il faudra verifier la taille de ce que tu ajoutes chaque fois...
Ca marche plutôt bien, ne demande pas trop plus de calculs au cpu et tu peux transformer ta classe en matrice n-dimentionnelle sans trop de travail une fois qu'elle est faite.
Voila j'espere t'avoir donné de bonnes idées.
3
feanor04 Messages postés 2 Date d'inscription lundi 2 février 2004 Statut Membre Dernière intervention 31 mai 2006
31 mai 2006 à 14:30
C'est  deja la solution que j'ai choisie:

je declare un tableau a une dimension mais pouvant contenir autant d'entiers que de donnee a memoriser dans la matrice. 

A cote de ca, j'utilise une fonction pour calculer l'element du vecteur
correspondant a la donnee (i, j) de la matrice  => ce que vous
vous qppelez getElement.


Quand a utiliser des listes, (1) cela consommera  plus de place
(donnees + pointeurs), (2) les algorithmes de recherche sur des
tableaux sont plus performant.


Enfin, je fais du C pas du C++ ... donc pas de classe a proprement parle.


Merci pour ces idees, je continue a creuser!
3
Rejoignez-nous