abdelkaderg54
Messages postés63Date d'inscriptiondimanche 18 mars 2007StatutMembreDernière intervention27 avril 2013
-
2 mai 2007 à 02:57
emmatopiak
Messages postés149Date d'inscriptionmercredi 28 mars 2007StatutMembreDernière intervention17 mai 2007
-
4 mai 2007 à 21:46
Salut à tous , ben voilà j'été entrain de faire un petit programme en c++
Il s'agit de deffirentes fonctions pour manipuler un arbre binnair de recherche mais le problemme c'est que je ne sais pas comment crée un arbre en c++ pour tester ces derniers sachant que l'implumantation est chainée ..
Voilà la strructure que j'ai consu en c++
typedef struct noeud
{
char info;
int cle; // la clé ça consernne l'ordre dans l'arbre pour toute cle plus grande que la racine les noeuds viennent sur l'adroit et pour le vice-versa les noeuds seront sur l'agauch//
struct noeud *fg;
struct noeud *fd;
}NOEUD,Arber;
Et voilà les fonction que j'ai ecri jusqu'à present:
}
ExtraireMax( a->fd);
}
/*****************************************************/
Il m'etais dificile de ecrire un programme qui crée un arbre pour vue que l'implumantation est chainnée , quelqu'un a une idée ?
Et merci..
Allé salut
emmatopiak
Messages postés149Date d'inscriptionmercredi 28 mars 2007StatutMembreDernière intervention17 mai 20072 2 mai 2007 à 09:32
Salut,
Ton code est pas indenté, déjà.
Ensuite:
-AjouterNoeud(Arber *a,NOEUD *n) <---- probleme ici
- Donc il faut Arbre ** a, et pas Arbre * a
- Changer tout le reste en fonction de ca forcement du coup ca va changer peut-etre AjouterNoeud aussi, qui prendrait deux etoiles.
@++
Ps: sinon Ton code est bien apparemment mais il faudra que tu l'indentes c'est plus facile a lire.
Corrige les fautes d'ortographe aussi, notamment Arbre au lieu de Arber
** Mais l'erreur principale c'est ce AjouterNoeud(Arbre ** a, Noeud * n)
Car c'est ca qui fait que tu peux pas creer un arbre
abdelkaderg54
Messages postés63Date d'inscriptiondimanche 18 mars 2007StatutMembreDernière intervention27 avril 2013 2 mai 2007 à 11:39
salut
Merci pour ta reponse mais c'est pas que je cherche exatement .
Car cette arbre que je veux créer est une arbre binnaire de recherche les element sont ordonnés selon un critère "les cle inferieur a celle de la racine viennent sur l'agauche par contre qui sont superieurs seront sur l'adroit ".
j'espére que tu as une sollution pour ça?
Salut
emmatopiak
Messages postés149Date d'inscriptionmercredi 28 mars 2007StatutMembreDernière intervention17 mai 20072 2 mai 2007 à 22:44
Salut,
Ce que je te disais, c'est que ton programme ne marcherait certainement pas si tu le testais car tu as des bugs que je t'ai dit. Maintenant, le principe d'arbre de recherche, tu sembles l'avoir bien implemente, mais ca t'aiderait d'avoir un code qui marche pour le tester. Et puis ca aiderait d'avoir un code indenté pour le lire aussi. En deux mots :
1) corrige les erreurs que je t'ai dit
2) indente ton code, je regarderais, mais je pense que c'est pas mal ton arbre de recherche sinon
abdelkaderg54
Messages postés63Date d'inscriptiondimanche 18 mars 2007StatutMembreDernière intervention27 avril 2013 3 mai 2007 à 01:22
Salut ...
Alors merci encore ..
ben là jé suis ...j'utulise la fonction Insérernoeud et çà marche mais il reste un problem avec le contraire "supprimmer la racine" j'ai cré une qui s'excute normalement ("pas de faute de syntaxe") ...
alors le problem etape par etape c'est que :
1/D'abord j'ai cre une arbre
2/j'ai appellé la fonction affiche(infixe postfixe ou prefixe)..oa fonctionne normalement , l'affichage est bon .
3/j'appell e la fonction supprimmer racine 'excutation normale '
4/là i l uara problem "j'appelle la fonction affiche a nouveau le compilateur m'envoi un message incomprehenssible pour moi" ...le message est le suivant:
********
Exception non gérée : System.AccessViolationException: Tentative de lecture ou d
'écriture de mémoire protégée. Cela indique souvent qu'une autre mémoire est end
ommagée.
à affich_infixe_croissant(noeud* a) dans c:\documents and settings\gued\mes d
ocuments\visual studio 2005\projects\essai\essai\essai.cpp:ligne 180
à affich_infixe_croissant(noeud* a) dans c:\documents and settings\gued\mes d
ocuments\visual studio 2005\projects\essai\essai\essai.cpp:ligne 180
à main() dans c:\documents and settings\gued\mes documents\visual studio 2005
\projects\essai\essai\essai.cpp:ligne 278
Appuyez sur une touche pour continuer...********
T'auras pas une idée sur ça!?
Vous n’avez pas trouvé la réponse que vous recherchez ?
emmatopiak
Messages postés149Date d'inscriptionmercredi 28 mars 2007StatutMembreDernière intervention17 mai 20072 3 mai 2007 à 12:17
Salut,
Oui, il y'a segfault.
Donc, le probleme que tu as est un probleme de memoire, tu dois mal gerer tes pointeurs a un moment ou à un autre. Pour le resoudre, il faudrait que:
1) tu colles tout ton code corrigé (il n'y a pas de fonction supprimerRacine dans le code que tu as indiqué)
2) tu mets pas tout le code comme un gros bloc mais une instruction par ligne, et des espaces entre les fonctions, sinon on ne s'y retrouve pas
Donc.
C'est normal que tu aies ce genre d'erreurs, on ne peut pas faire un programme parfait des le debut avec les pointeurs
Bon courage
@++
abdelkaderg54
Messages postés63Date d'inscriptiondimanche 18 mars 2007StatutMembreDernière intervention27 avril 2013 4 mai 2007 à 02:29
Salut.....
Alors merci infiniment pour ta reponse et pour le code de mon programme le voilà complet:
// essai.cpp : fichier projet principal.
#include
<stdafx.h>#include
<stdio.h>#include
<malloc.h>/*DECLARATION DES TYPES*/
typedef
struct noeud{
int cle;
struct noeud *fg;
struct noeud *fd;}NOEUD,Arber;
/* Declaration de Type NOEUD et Arber*/typedef
enum BOOLEEN { FAUX=0, VRAI=1 };
/*Declaration du type BOOLEEN*//*****************************************************************************************/
/*Principe de la Fonction: initialisation d'une arbre */
emmatopiak
Messages postés149Date d'inscriptionmercredi 28 mars 2007StatutMembreDernière intervention17 mai 20072 4 mai 2007 à 10:14
Salut,
Rapide survol et déjà:
Initialisation : marche pas, il faut un arbre ** a; et faire *a = NULL en parametres
-ou retourner un arbre *
Puis ajouterNoeud : marche pas pour les memes raisons..
Puis extraireMax : marche pas pour les memes raisons..
Puis supprimerRacine.
Puis insererNoeud marchera pas, etc
En fait toutes les fonctions ne marcheront pas.
@++
abdelkaderg54
Messages postés63Date d'inscriptiondimanche 18 mars 2007StatutMembreDernière intervention27 avril 2013 4 mai 2007 à 16:01
Salut ...
J'ai compilé le code et j'i pas trouver d'erreur par contre quand j'ai mi qu'est ce que tu m'as di , tats d'erreur me sont affichées ...
mais pour le fait qu'il ya as d'erreur et la fonction ne fait pas ce que je demande ,je crois le problem est dans les instructions eux memes .....(l'algorithme de la fonction est faux)..
emmatopiak
Messages postés149Date d'inscriptionmercredi 28 mars 2007StatutMembreDernière intervention17 mai 20072 4 mai 2007 à 21:46
Salut,
Tu décris un exemple typique. Ton code compile mais ne marche pas. Moi je te propose d'y faire des changements pour que ça marche, mais tu me dis que ça ne compile pas. C'est parce qu'il faut changer plusieurs trucs, il suffit pas de rajouter une étoile. Enfin à toi de voir, de toutes façons ton code n'est toujours pas indenté c'est une horreur à lire, mais je t'ai dit comment résoudre ton problème. Je le redis une dernière fois.
Quand tu passes un "int i" en paramètres, changer "i" dans la fonction n'aura aucun effet à l'extérieur
Quand tu passes un "arbre * a" en paramètres, changer "a" dans la fonction n'aura aucun effet à l'extérieur
Si tu veux que ça ait un effet, il faut passer "arbre ** a" et modifier "*a"
Car là tu ajoutes un noeud dans la fonction et dès que tu en sors le noeud a disparu, ou bien pire
Bon courage pour ton programme, mais si tu l'indentes pas (avec des espaces) et si tu fais pas ces modifications, oui, ca marchera pas même si ton algo est bon..
@++