??tableau et arbre?? - C - Programmation
Marsh Posté le 01-03-2005 à 14:06:24
Surtout ne nous donne aucune info sur ton 'arbre' et la manière que tu as d'insérer tes éléments, et encore moins le message d'erreur exact, hein...
Marsh Posté le 01-03-2005 à 14:13:50
jans a écrit : en fait j'essaye de ranger les variables d'un tableau dans un arbre mais j'ai toujours un message comme quoi c'est incompatible!! |
Oui, faut que tu déclares ta structure de noeud de l'arbre et, éventuellement, ta structure d'arbre (si tu veux gérer plusieurs arbres à la fois)
Ce pourrait être par exemple
Code :
|
Ensuite...
Marsh Posté le 01-03-2005 à 14:47:34
moi j'ai fait:
typedef struct arbre
{
float b;
char a;
struct tableau tab[100];
struct arbre *sag;
struct arbre *sad;
}arbre;
et c'est quand je fait par exemple l'instruction suivante que j'ai le message d'incompatibilité des types:
arbre * aux;
aux->sag=tab[cpt];
Marsh Posté le 01-03-2005 à 15:30:48
jans a écrit : moi j'ai fait: |
Secouage de neurone basique...
1 - Quel est le type de aux->sag ?
2 - Quel est le type de tab[cpt] ?
3 - Sont-ils identiques ?
4 - Si la réponse est non, c'est qu'il y a un bug. Tu cherches à enfoncer une vis avec un marteau... Il faut se mettre d'accord et le cast n'est pas la solution!
Marsh Posté le 01-03-2005 à 15:46:44
jans a écrit : moi j'ai fait: |
Emmanuel a été assez direct. Je vais être un peu plus souple
1) ta structure que tu nommes "arbre" caractérise en fait un noeud de ton arbre et non ton arbre lui-même. Le fait même que tu lui aies donné ce nom montre que tu ne connais pas trop bien le principe d'un arbre.
Cette url http://www.csse.monash.edu.au/~llo [...] /Sort/Heap te montre une page contenant un dessin d'arbre.
2) quand on crée un arbre, on a comme but de ranger un élément distinct par noeud. Quand on voit ta structure, on a l'impression que tu as envie de stocker les 100 éléments dans un seul noeud.
Essaye de faire qq dessins sur une feuille pour que tu arrives bien à te représenter ce qu'est un arbre. Ensuite, la programmation ira très facilement.
Marsh Posté le 03-03-2005 à 23:00:38
je croyais avoir mieux compris..j'ai fait les déclarations suivantes:
typedef struct t_noeud
{
float b;
char a;
struct arbre *sag;
struct arbre *sad;
}t_noeud;
t_noeud * noeud
je n'ai plus de problemes d'incompatibilité des types,je n'ai aucune erreur. mais à l'execution mais j'ai le message access violation..quand je fais noeud->sag->b=tabocc[i].b; (je sais que ça marche quand on fait noeud->b=tabocc[i].b) mais moi je veux lui dire d'aller dans le sag..
C'est peut-etre encore une question stupide,et je prend encore le risque d'avoir des remarques désobligeantes de ce cher Emmanuel mais bon, là je vois pas du tout..
Marsh Posté le 03-03-2005 à 23:07:24
jans a écrit : je prend encore le risque d'avoir des remarques désobligeantes de ce cher Emmanuel |
Si tu préfères qu'on te tienne la main pour aller pisser, ce sera sans moi...
Marsh Posté le 03-03-2005 à 23:09:19
jans a écrit :
|
Les objets pointés ont-ils été créés? On ne voit pas ton code, difficile de t'aider...
Marsh Posté le 09-03-2005 à 07:19:34
jans a écrit : je croyais avoir mieux compris..j'ai fait les déclarations suivantes: |
Pour que "noeud->sag->b" existe, il faut que
1) la variable "noeud" pointe vers un élément valide de ton arbre (alloué par "malloc" )
2) la variable "noeud->sag" pointe aussi vers un élément valide
En général, quand on veut remplir et placer un noeud
1) on alloue le noeud avec malloc
2) on remplit ses éléments et on veille bien à ce que les pointeurs gauche et droite soient à "0" parce que cette valeur servira de sentinelle lorsqu'on fera des recherches ultèrieures
3) on place le nouveau noeud dans l'arbre
Cette dernière manipulation se traduit par
a) rechercher le noeud "n" qui contiendra le nouveau noeud créé "new"
b) selon que le nouveau noeud va à gauche ou droite du noeud trouvé, on remplit le pointeur gauche ou droite "n->sag=new" ou "n->sad=new"
Ce schéma simpliste te permet de ne pas avoir de soucis du style "n->sag->b existe-t-il ?"
Marsh Posté le 01-03-2005 à 14:04:55
en fait j'essaye de ranger les variables d'un tableau dans un arbre mais j'ai toujours un message comme quoi c'est incompatible!!
mon tableau est de la forme:
struct tableau
{
char a;
float b;
};
struct tableau tab[100];
faut-il que je le déclare quelque chose en plus pour pouvoir ranger les valeurs de mon tableau dans les noeuds de l'arbre??
merci