Bonsoir,
j'ai crée une fonction qui me crée une cellule à partir d'une image.
Bonsoir,
j'ai crée une fonction qui me crée une cellule à partir d'une image.
c'est pas possible de savoir a quel type appartient un objet,
a ta place, j'enleverai toutes tes structure NW SW NE SE,
et je rajouterai a la structure cell , le membre:
et ensuite quand tu crée un NW SW NE ou SE
Code : Sélectionner tout - Visualiser dans une fenêtre à part int type
tu met le type adequat !
plutot que d'essayer de chercher le type...
un moyen qui aurai pu etre possible, aurait été d'utiliser sizeof()...mais comme ils on tous la meme taille...c'est pas possible de les differencier...
PS: j'espere avoir compris ta question...
Salut,
En gros, il te "suffit" de rajouter, à ta structure, un pointeur de type
que tu initialise sous la forme (par exemple) de
Code : Sélectionner tout - Visualiser dans une fenêtre à part struct cellule *Pere;
que tu veilles, en "racine" de l'arbre, à initialiser sur NULL...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Noeud_qui_recoit_l_enfant->NE=nouveau_noeud; nouveau_noeud->Pere=Noeud_qui_recoit_l_enfant;
Pour le type, de fait, tu met un int Type (où 1=NE,2=NW,3=SE,4=SW, par exemple) et que tu pouras récupérer, via les enfants, sous la forme de
Il ne te restera alors plus qu'à utiliser typeparent dans un switch...case adapté à tes besoins
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2int typeparent=Noeud_Enfant->Parent->Type;
![]()
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Heuuu.... est-il nécessaire de préciser qu'il ne faudra en aucun cas faire un free sur l'élément Noeud->Parent
Normalement, c'est le parent qui libère d'abord la mémoire allouée àl'enfant avant de libérer sa propre mémoire... Toute tentative de faire autrement risque de faire perdre tout contact avec le reste de l'arbre... et donc, occasionner de sérieuses fuites mémoires![]()
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Dis toi bien que tu peux tres bien utiliser un code du genre de
Pour autant que tu sois sur qu'il y aie bien au moins quatre niveau au dessus de ton noeud d'origine... cela va de soit... (d'ailleurs, pour les valeurs de Type, il serait intéressant de prévoir une valeur de plus: 0=racine
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Noeud_D_Origine->Pere->Pere->Pere->Pere->SW)
Ceci dit, comme tu utilise des fonctions récursives, tu ne devrais pas avoir besoin de recourrir à cela...
exemple
Evidemment, dans Ce qu'il faut faire, tu peux prévoir un test qui renverrait 0 en cas d'échec...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 int FonctRecursive(const struct cellule *noeud) { if(noeud->NE!=NULL) { /*appel pour l'enfant NE */ if(FonctionRecursive(noeud->NE)==0) { /*la fonction a renvoyé une valeur d'echec... que faire :question:*/ } } if(noeud->NW!=NULL) { /*appel pour l'enfant NW */ if(FonctionRecursive(noeud->NW)==0) { /*la fonction a renvoyé une valeur d'echec... que faire :question:*/ } } if(noeud->SE!=NULL) { /*appel pour l'enfant SE */ if(FonctionRecursive(noeud->SE)==0) { /*la fonction a renvoyé une valeur d'echec... que faire :question:*/ } } if(noeud->SW!=NULL) { /*appel pour l'enfant SW */ if(FonctionRecursive(noeud->SW)==0) { /*la fonction a renvoyé une valeur d'echec... que faire :question:*/ } } /*arrivé ici, tous les enfants et enfants des enfants ont étés correctement gérés... il reste à gérer noeud */ /*Ce qu'il faut faire */ return 1; }
Si tu as du mal à comprendre la récursivité, tu peux aller jeter un oeil sur la ==>page qui leur est dédiée sur mon site <==, en espérant que cela t'aide à "fixer" un peu les choses![]()
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Partager