cs_jomanix
Messages postés3Date d'inscriptionjeudi 4 novembre 2004StatutMembreDernière intervention20 novembre 2004
-
10 nov. 2004 à 20:24
cs_jomanix
Messages postés3Date d'inscriptionjeudi 4 novembre 2004StatutMembreDernière intervention20 novembre 2004
-
20 nov. 2004 à 11:15
Comme je ne vois pas l'arbre au milieu de la foret je m'en remet a vous
C'est un dictionnaire et pour l'instant je ve juste afficher mon arbre bianaire. Mais le programme fonctione correctement pour une liste de 5 mots, puis au dela il me fait un access violation.
A part ça, toujours au niveau de ton "écriture", on ne met d'habitude que les constantes en majuscules, donc on créerais plutôt une structure Noeud et non NOEUD.
Ensuite, tu mets :
struct noeud *suivant[26];
Donc si je traduis, un pointeur vers un tableau de 26 autres noeuds...tu ne voulais pas plutôt faire juste un pointeur vers le noeud suivant??
Ensuite :
void insertion(char mot_a_inserer[80],NOEUD *p)
Je remplacerais le "char mot_a_inserer[80]" par un "char* mot_a_inserer" voire un "const char* mot_a_inserer", sinon pour quelqu'un qui voudra compiler ton prog en C++ (ce que je te conseille de faire d'ailleurs), ça va couiller...vu qu'en général on ne passe pas un tableau d'exactement 80 caractères non? ;)
Ensuite, tu peux condenser :
int indice,i;
indice=0;
en int indice=0, i;
"lettre=mot_a_inserer[indice];
CODE_ASCII=lettre;" -> ta variable "lettre" te sert après? sinon c'est redondant...
Bon pour la suite j'ai la flemme de chercher à comprendre le code...faudrait que tu corriges pas mal de trucs comme ça, et surtout que tu mettes des commentaires ;)
Et puis aussi j'ai vu un malloc() mais pas de free() correspondant : c'est un memory leak, faut éviter, tu gaspilles de la mémoire...
---------------------------------------------------------
Patience et longueur de temps font plus que force ni que rage....
Coucous flingueurs 3D : http://www.freewebs.com/cf3d/
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 12 nov. 2004 à 09:35
ton problème vient de ton tableau sur les noeuds suivant :
struct noeud *suivant[26];
le 26 c'est pour les 26 lettres de l'alphabet je suppose ?
les indices du tableau vont de 0 à 25 et toi tu essaye d'y accéder par les codes ASCCi des lettres (de 65 à 90)
for (i=65;i<=90;i++)
nouveau->suivant[i]=NULL;
=> plante irrémédiablement
si lettre est entre 'A' et 'Z', l'indice est lettre-'A'
si lettre est entre 'a' et 'z', l'indice est lettre-'a'
cs_jomanix
Messages postés3Date d'inscriptionjeudi 4 novembre 2004StatutMembreDernière intervention20 novembre 2004 12 nov. 2004 à 16:21
c'est exactement ce dont je me suis rendu compte
comme apparemment un tableau commence de 0 à n.
Dans mon cas je suis obligé de prendre l'ascii de ma lettre et de lui retranche 64. Comme je ne gere que des majuscules.
Le C fait directement la converstion lettre en ASCCII
c'est a dire que si je passe tableau['A'] cela representerais la 64eme case de mon tableua? c'est ce que je'ai cru comprendre lors de mes recherches.
Merci de vos reponses et de vous etre attarde sur le sujet.
Funto66
Messages postés1267Date d'inscriptionmercredi 1 janvier 2003StatutMembreDernière intervention28 février 20074 13 nov. 2004 à 13:26
Et puis je le répète mais pense à mettre un free() qui correspond à ton malloc()...
---------------------------------------------------------
Patience et longueur de temps font plus que force ni que rage....
Coucous flingueurs 3D : http://www.freewebs.com/cf3d/
cs_jomanix
Messages postés3Date d'inscriptionjeudi 4 novembre 2004StatutMembreDernière intervention20 novembre 2004 20 nov. 2004 à 11:15
Voila l'ensemble de mon programme de gestion de mon arbre qui regroupe une fonction de recherche d'un mot dans l'arbre une fonction pour tout mettre en majuscules et une fonction pour inserer mes noeuds. et une fonction pour détruire l'arbre.
Le programme fonctionne correctement
Mais j'ai du mal a utiliser les pointeurs du coup j'ai fait passer en argument dans mes fonctions de recherche, un int indice si quelqu'un avait le courage de regarder sans se bruler les yeux. merci
/*
**++
** FUNCTIONAL DESCRIPTION:
**
** fonction qui change la casse du mot extrait de la liste, afin que tous
** les mots soient en majuscule.
**
** FORMAL PARAMETERS:
**
** en entree elle recoit le mot extrait du fichier texte
**
** RETURN VALUE
** en sortie elle renvoit le meme mot en majuscule
**
**--
*/
/*
**++
** FUNCTIONAL DESCRIPTION:
**
** fonction insertion qui insere un noeud dans l arbre n aire si le noeud
** n existe pas deja
**
** FORMAL PARAMETERS:
**
** en entree elle recoit le mot a inserer ainsi que la position courante
** du pointeur dans l arbre
**
**--
*/
//Appelle recursif de la fonction insertion: cela correspond a une descente
//dans l arbre
if(mot_a_inserer[indice+1]=='\0')
courant->fin_de_mot=1;
insertion(mot_a_inserer,courant,indice);
}
}
/*
**++
** FUNCTIONAL DESCRIPTION:
**
** fonction recherche qui permet de parcourir l'arbre
**
** FORMAL PARAMETERS:
**
** en entree elle recoit le mot a rechercher ainsi que la position courante
** du pointeur dans l arbre
**
**--
*/
//Voici la fonction qui permet de desallouer l'ensemble dees //espaces memoires cree, elle parcours tout mon arbre et une fois //arrive sur un noeud de fin elle le supprime
void effacer_arbre(NOEUD *courant)
{
NOEUD *racine;
int i;
for(i=ASCII_A-CTE_CAR;i<=ASCII_Z-CTE_CAR;i++)
{
if(courant->suivant[i]!=NULL)
effacer_arbre(courant->suivant[i]);
}
free(courant);