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

  FORUM HardWare.fr
  Programmation
  C

  [C] Allocation dynamique et recuperation de donnees

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Allocation dynamique et recuperation de donnees

n°724933
JamesPatag​eule
Posté le 13-05-2004 à 17:29:25  profilanswer
 

Bonjour a tous,
Probleme en programmation C avec les listes chainnees ...
 
Je m'explique:
-Nous avons differentes structures qui definissent des formes simples(cercle,point,ligne,triangle,rectangle et ellipse).
-Le tout est un logiciel de dessin style paint.
-L'utilisateur peux tracer des formes grace au clic souris car nous le gerons.
-Mais le probleme est pour reussir a creer une liste doublement chainee qui enregistre les formes crees par l'utilisateur ainsi que les coordonnees des formes(pour les tracer).
 
=>BUT:Enregistrer les operations de l'utilisateur au fur et a mesure qu'il les fait.De plus il faut pouvoir annuler la derniere forme tracee d'un des 6 types(carre,point, ...).
 
Merci de votre aide , la liste chainee etant une idee personnelle, si quelqu'un connait un meilleur moyen il est le bienvenu.

mood
Publicité
Posté le 13-05-2004 à 17:29:25  profilanswer
 

n°724947
Taz
bisounours-codeur
Posté le 13-05-2004 à 17:40:09  profilanswer
 

non cai bien

n°724976
JamesPatag​eule
Posté le 13-05-2004 à 17:53:23  profilanswer
 

Merci beaucoup mais j'aurais besoin d'aide pour mettre en place cette liste doublement chainee...
 
merci  ;)

n°724980
Moktar1er
No one replies...
Posté le 13-05-2004 à 17:54:57  profilanswer
 

:heink:
comme une liste chaînée
mais avec 2 pointeurs au lieu d'un [:spamafote]

n°725004
Taz
bisounours-codeur
Posté le 13-05-2004 à 18:09:22  profilanswer
 

pour quoi doublement ? tu peux également utilisé une simple pile

n°725067
Taz
bisounours-codeur
Posté le 13-05-2004 à 18:56:09  profilanswer
 

moi je te conseille d'utiliser un simple tableau comme un buffer circulaire (à taille fixe donc)
 
dedans tu ranges ça
 

Code :
  1. enum Type { CERCLE, CARRE, ...};
  2. struct Element
  3. {
  4.   Type type;
  5.   union
  6.    { 
  7.       Cercle cercle; // ou carrément des pointeurs
  8.       Carre carre;   // à toi de voir
  9.   };


 
 
un exemple que j'ai déjà donné

Code :
  1. #include <stdio.h>
  2. #include <string.h>
  3. enum Type
  4.   {
  5.     INTEGER,
  6.     REAL,
  7.     STRING
  8.   };
  9. struct Var
  10. {
  11.   enum Type type;
  12.   union
  13.   {
  14.     int i;
  15.     double f;
  16.     char str[128];
  17.   } data;
  18. };
  19. void Var_init_with_integer(struct Var *v, int i)
  20. {
  21.   v->type   = INTEGER;
  22.   v->data.i = i;
  23. }
  24. void Var_init_with_real(struct Var *v, double f)
  25. {
  26.   v->type   = REAL;
  27.   v->data.f = f;
  28. }
  29. void Var_init_with_string(struct Var *v, const char *s)
  30. {
  31.   v->type   = STRING;
  32.   strncpy(v->data.str, s, sizeof v->data.str);
  33.   v->data.str[ sizeof v->data.str - 1 ] = '\0';
  34. }
  35. void Var_print(const struct Var *v)
  36. {
  37.   switch(v->type)
  38.     {
  39.     case INTEGER:
  40.       printf("Var %d\n", v->data.i);
  41.       break;
  42.     case REAL:
  43.       printf("Var %f\n", v->data.f);
  44.       break;
  45.     case STRING:
  46.       printf("Var %s\n", v->data.str);
  47.       break;
  48.    
  49.     default:
  50.       printf("Var UNKNOW\n" );
  51.      
  52.     }
  53. }
  54. int main()
  55. {
  56.   struct Var v;
  57.   Var_init_with_integer(&v, 42);
  58.   Var_print(&v);
  59.   Var_init_with_real(&v, 69.69);
  60.   Var_print(&v);
  61.   Var_init_with_string(&v, "TazForEver" );
  62.   Var_print(&v);
  63. }


 

n°725076
Taz
bisounours-codeur
Posté le 13-05-2004 à 18:57:51  profilanswer
 

à la limite, tu peux même faire des macros/fonctions pour accéder au bon champ, genre VAR_REAL(V) ((V).f)

n°725299
JamesPatag​eule
Posté le 13-05-2004 à 22:59:37  profilanswer
 

j'ai un jeu: CHERCHER L'ERREUR !!!!
 
-code:

Code :
  1. //debut de liste chainée
  2.   pnt=(struct _globale*)malloc(sizeof(struct _globale));
  3.     if(tete==NULL)
  4.       {
  5.  tete=pnt;
  6.  queue=pnt;
  7.  courant=pnt;
  8.       }
  9.     else
  10.       {
  11.  pnt->type_de_la_forme=POINT;
  12.  pnt->forme_figure.point.x1=x;
  13.  pnt->forme_figure.point.y1=y;
  14.  pnt->suivant=NULL;
  15.  pnt->precedent=queue;
  16.  queue->suivant=pnt; //!!  l'erreur survient a cette ligne ;)
  17.  queue=pnt;
  18.  afficherPoint(x,y);                                       //fin de liste chaine
  19.       }


 
/*sachant que l'on utilise un union et des pointeurs*/
 
-message d'erreur:
 

Code :
  1. error: dereferencing pointer to incomplete type


 
merci de votre aide

n°725301
Taz
bisounours-codeur
Posté le 13-05-2004 à 23:00:56  profilanswer
 

déjà on a pas les types
 
et
 
    pnt=(struct _globale*)malloc(sizeof(struct _globale));
      queue=pnt;  
 
      pnt->suivant=NULL;
      queue->suivant=pnt;
 
 
tu vois l'erreur là ?

n°725315
JamesPatag​eule
Posté le 13-05-2004 à 23:11:24  profilanswer
 

Code :
  1. typedef struct _point
  2. {
  3.   int x1;
  4.   int y1;
  5.   int couleur;
  6. }point;
  7. typedef struct _ligne
  8. {
  9.   struct _point point1;
  10.   struct _point point2;
  11.   int couleur;
  12. }ligne;
  13. typedef struct _triangle
  14. {
  15.   struct _point point1;
  16.   struct _point point2;
  17.   struct _point point3;
  18.   int couleur;
  19. }triangle;
  20. typedef struct _cercle
  21. {
  22.   struct _point point1;
  23.   int rayon;
  24.   int couleur;
  25. }cercle;
  26. typedef struct _rectangle
  27. {
  28.   struct _point point1;
  29.   struct _point point2;
  30.   int couleur;
  31. }rectangle;
  32. typedef struct _ellipse
  33. {
  34.   struct _point point1;
  35.   int rayon1;
  36.   int rayon2;
  37.   int couleur;
  38. }ellipse;
  39. union _forme
  40. {
  41.   struct _point point;
  42.   struct _ligne ligne;
  43.   struct _triangle triangle;
  44.   struct _cercle cercle;
  45.   struct _rectangle rectangle;
  46.   struct _ellipse ellipse;
  47. };
  48. typedef struct _globale
  49. {
  50.   int type_de_la_forme;
  51.   int remplir;
  52.   union _forme forme_figure;
  53.   struct glb *suivant;
  54.   struct glb *precedent;
  55. }glb;


 
c'est ca que tu voulais????
 
pour ce qui est de la redirection vers le NULL, il faut voir que je crée un nouveau maillon, et que son suivant pointe vers le NULL.
ensuite je me sert de la queue pour pointer vers ce nouveau maillon et enfin je passe la queue à la fin ;)

mood
Publicité
Posté le 13-05-2004 à 23:11:24  profilanswer
 

n°725318
Taz
bisounours-codeur
Posté le 13-05-2004 à 23:15:25  profilanswer
 

int type_de_la_forme; -> utilise une enum !
 
utilise des majuscules au début de tes noms de types !
et si tu fais des typedef utilise les !
 
sinon ça ne me dit rien d'autre


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

  [C] Allocation dynamique et recuperation de donnees

 

Sujets relatifs
Comment réupérer des donnéesRécupération de fichiers FTP par ligne de commande
2 questions sur access (aide et feuille de données)Recherche d'un champ sur une base de données Oracle
initialisation d'une base de données Oracleimporter des données SQL Server vers VB Excel
Exporter des données vers excel[CSS] mise en page et largeur dynamique
Récupération de données dans Access 
Plus de sujets relatifs à : [C] Allocation dynamique et recuperation de donnees


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