??tableau et arbre??

??tableau et arbre?? - C - Programmation

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

Reply

Marsh Posté le 01-03-2005 à 14:04:55   

Reply

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...:o


---------------
Can't buy what I want because it's free -
Reply

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!!
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


 
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 :
  1. typedef struct s_noeud {
  2.     struct tableau info;
  3.     struct s_noeud *gauche;
  4.     struct s_noeud *droite;
  5. } t_noeud;
  6. typedef struct {
  7.     t_noeud *racine;
  8. } t_arbre;


 
Ensuite...
 


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

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];        

Reply

Marsh Posté le 01-03-2005 à 15:30:48    

jans a écrit :

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];


 
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!


Message édité par Emmanuel Delahaye le 01-03-2005 à 15:32:06

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 01-03-2005 à 15:46:44    

jans a écrit :

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];


 
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.


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

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..

Reply

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...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 03-03-2005 à 23:09:19    

jans a écrit :



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..


Les objets pointés ont-ils été créés? On ne voit pas ton code, difficile de t'aider...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 09-03-2005 à 07:19:34    

jans a écrit :

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..


 
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 ?"


Message édité par Sve@r le 09-03-2005 à 07:20:24

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed