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

  FORUM HardWare.fr
  Programmation
  C

  Type de donnée abtrait : Matrice

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Type de donnée abtrait : Matrice

n°1945645
aragus68
Posté le 29-11-2009 à 12:54:34  profilanswer
 

Bonjour,
 
Dans le cadre d'un projet de programmation en langage C, je dois définir le type de donnée abstrait "Matrix" pour pouvoir manipuler des matrices chainées. Voici le schéma d'une matrice 2*2 :
 
http://img7.hostingpics.net/pics/785964MATRIX.png
 
Voici ma déclaration du type :
 

Code :
  1. typedef struct cellElem
  2. {
  3. int row;
  4. int col;
  5. float value;
  6. struct cellElem* nextCol;
  7. struct cellElem* nextRow;
  8. }cellElement;
  9. typedef struct colElem
  10. {
  11. int colN;
  12. struct colElem* nextCol;
  13. struct colElem* prevCol;
  14. cellElement* col;
  15. }colElement;
  16. typedef struct rowElem
  17. {
  18. int rowN;
  19. struct rowElem* nextRow;
  20. struct rowElem* prevRow;
  21. cellElement* row;
  22. }rowElement;
  23. typedef struct
  24. {
  25.         int col;
  26.         int row;
  27.         colElement* cols;
  28.         rowElement* rows;
  29.         }matrix;
  30. typedef matrix* Matrix;

 
 
Le problème c'est que je n'arrive même pas à accéder à la valeur d'une case de la matrice ("value" dans la structure "cellElement" ).
 
Si par exemple je fais ça...
 

Code :
  1. int main(int argc, char* argv[])
  2. {
  3.      Matrix M;
  4.      M=(Matrix)malloc(sizeof(matrix));
  5.      M->cols->col->value=5.;
  6.      printf("%f", M->cols->col->value);
  7.      system("PAUSE" );
  8.    
  9. }


 
...le programme compile mais plante à l'exécution. Je dois donc avoir une erreur dans la déclaration du type ou dans le main. Je précise que je suis débutant.
 
Merci d'avance.

mood
Publicité
Posté le 29-11-2009 à 12:54:34  profilanswer
 

n°1945651
Anonymouse
Posté le 29-11-2009 à 13:12:00  profilanswer
 

aragus68 a écrit :

Bonjour,
 
Dans le cadre d'un projet de programmation en langage C, je dois définir le type de donnée abstrait "Matrix" pour pouvoir manipuler des matrices chainées. Voici le schéma d'une matrice 2*2 :
 
http://img7.hostingpics.net/pics/785964MATRIX.png
 
Voici ma déclaration du type :
 

Code :
  1. typedef struct cellElem
  2. {
  3. int row;
  4. int col;
  5. float value;
  6. struct cellElem* nextCol;
  7. struct cellElem* nextRow;
  8. }cellElement;
  9. typedef struct colElem
  10. {
  11. int colN;
  12. struct colElem* nextCol;
  13. struct colElem* prevCol;
  14. cellElement* col;
  15. }colElement;
  16. typedef struct rowElem
  17. {
  18. int rowN;
  19. struct rowElem* nextRow;
  20. struct rowElem* prevRow;
  21. cellElement* row;
  22. }rowElement;
  23. typedef struct
  24. {
  25.         int col;
  26.         int row;
  27.         colElement* cols;
  28.         rowElement* rows;
  29.         }matrix;
  30. typedef matrix* Matrix;

 
 
Le problème c'est que je n'arrive même pas à accéder à la valeur d'une case de la matrice ("value" dans la structure "cellElement" ).
 
Si par exemple je fais ça...
 

Code :
  1. int main(int argc, char* argv[])
  2. {
  3.      Matrix M;
  4.      M=(Matrix)malloc(sizeof(matrix));
  5.      M->cols->col->value=5.;
  6.      printf("%f", M->cols->col->value);
  7.      system("PAUSE" );
  8.    
  9. }


 
...le programme compile mais plante à l'exécution. Je dois donc avoir une erreur dans la déclaration du type ou dans le main. Je précise que je suis débutant.
 
Merci d'avance.


 
M->cols est Non affecté => Comportement indéfini => Segmentation Fault
 
Il faut donc que tu créée une fonction d'initialisation "initMatrix" par exemple pour initialiser ta structure.
 
Tu devrais tester le retour de la fonction malloc. Il n'est pas forcément pertinent de cacher des pointeurs derrière des typedef. Je trouve ça source de confusion.


Message édité par Anonymouse le 29-11-2009 à 21:43:48
n°1945690
aragus68
Posté le 29-11-2009 à 17:06:34  profilanswer
 

Citation :

Il n'est pas forcément pertinent de cacher des pointeurs derrière des typedef. Je trouve ça source de confusion.


 
Mais comment puis-je faire autrement tout en respectant le schéma donné plus haut ?

n°1946079
Anonymouse
Posté le 30-11-2009 à 21:45:50  profilanswer
 

aragus68 a écrit :

Citation :

Il n'est pas forcément pertinent de cacher des pointeurs derrière des typedef. Je trouve ça source de confusion.


 
Mais comment puis-je faire autrement tout en respectant le schéma donné plus haut ?


 
Utilise matrix* tout court.


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

  Type de donnée abtrait : Matrice

 

Sujets relatifs
XERCESC 2.8 - Récupérer le type défini dans le xsdPb acces base de donnée
[C] [resolu] lecture matrice alloué dynamiquementFormulaire de type "si bonne reponse, afficher xxx"
[Résolu] Tri d'une matriceProblème pour déclencher un input type=file
Décompte (timer) comme dans les jeux type ogame,etc...[C] pb pour passer une matrice en parametre d'un fonction
dessiner un rectangle de taille donné dans une image de taille donnéeRecuperer le type réel d'un fichier
Plus de sujets relatifs à : Type de donnée abtrait : Matrice


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