IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Arbres Lexicographiques


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 28
    Par défaut Arbres Lexicographiques
    Voila je travaille sur les arbres lexicographiques et j'ai un probleme de fonction.
    Mon arbre représente un dictionnaire les element sont des char .
    La structure de mon arbre est la suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct noeud {
    	ELEMENT etiq;
    	struct noeud * ag, * ad ;
    } NOEUD;
    	/* un arbre binaire est un pointeur sur son Noeud racine  */
    typedef  NOEUD* DICO  ;
    La fonction qui me pose probleme est une fonction de recherche qui recherche un mot dans mon dictionnaire(arbre) et qui me renvoie 1 si celui ci y est et 0 sinon .
    Sauf que la ma fonction ne trouve aucun mot dans l'arbre meme ceux qui y sont
    je travaille avec des TDA ELEMENTS et LEXICO mais je ne peux pas tout vous mettre mais si quelqu'un voit d'ou vient mon erreur ca m'aiderai beaucoup . Vous pouvez me poser des questions si il manque quelquechose

    La fin d'un mot est représentée par '*' , et l'absence de mot par '~' .

  2. #2
    Membre émérite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par défaut
    Ca ressemble à l'épreuve d'Informatique qui est tombée à Polytechnique ce vendredi lol...

    Moi j'voudrais savoir comment il fonctionne ton dictionnaire ?

    ELEMENT c'est quoi ?

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 28
    Par défaut
    ELEMENT est un char
    je rentre mes mots de cette facon
    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
    DICO DicoLire(DICO A) {
    	char c;
    	char buffer[50];
    	int i=0,cpt=0;
    	FILE *fichier;
     
    	if ((fichier = fopen("dico.txt", "r"))!= NULL)
    	{
    	while((c = fgetc(fichier)) != EOF)
    	{
    		if( (c == ' ' || c == '\n') && ( i > 0 ) )
    		{
    			buffer[i] = '*';
    			i++;
    			buffer[i] = '\0';
    		A=DicoInserer(buffer,A);
    		cpt++;
    		}
    		else if( c != '\n' && c != ' ' )
    		{
    			buffer[i] = c;
    			i++;
    		}
    	}
    		buffer[i] = '*';
    		i++;
    		buffer[i] = '\0';
    		A= DicoInserer(buffer,A);
    		cpt++;
           }
    	fclose(fichier);
    	printf("\nIl y a actuellement %d mots dans le dictionnaire\n",cpt);
    }

    Ma fonction de recherche me fait planter mon programme en fait
    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
    int DicoRechercher (char *x, DICO a) { 
    /* retourne 1 si le mot x dans le dictionnaire et 0 sinon */ 
    int i=0;
       	if( ElementIdentique(x[i], '\0') )
       		return 1;
       	else
       	{   		
    			if( ElementIdentique(a->etiq, x[i]) ){
    			i++;
    				return DicoRechercher(x, ArbinGauche(a));}
    			else if( a->etiq < x[i] )
    				return DicoRechercher(x, ArbinDroit(a));
    			else
    				return 0;
       	}
    }

  4. #4
    Membre émérite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par défaut
    Dangereux le fait que tu contrôles pas le dépassement de tampon.

    Sinon ça me dit pas comment ton arbre représente un dictionnaire.

    Un truc en français, pas en C pour le moment.

    Ya juste insérer le mot dans le dictionnaire, et moi si j'sais pas comment il marche ton dictionnaire, je peux pas chercher dedans .

    EDIT : hey t'as édité !

    EDIT 2 : ElementIdentique(c,b) il dit oui si c == b ?

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 28
    Par défaut
    Je ne sais pas trop comment t'expliquer ca

    Un mot est un chemin allant de la racine ( ou d'un fils droit ) a une feuille .
    Deux noeuds de l'arbre reliés par
    - une relation gauche correspondant a des lettres consécutives d 'un mot
    - une relation droite correspondant a des lettres alternatives pour former deux mots distincts .

    le '*' sert de marqueur de fin de mot
    le '~' sert de marqueur de fin de parcours a droite dans l'arbre .

    Aie je sais pas si j'ai été clair


    [EDIT] oui pour elementIdentique

    Et oui j'ai editer car j'ai changer un peu ma fonction de recherche je l'ai mis en dessous

    Je tente un dessin
    a
    |
    m-r--~
    | |
    o t--~
    | |
    u *
    | |
    r ~
    |
    *
    |
    ~

    Avec a chaque fois vers la droite si il n'y as pas d'alternatives un ~

  6. #6
    Membre émérite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par défaut
    Oui d'accord c'est bien ce que je me disais =), c'est le même arbre qu'on a eu à étudier.

    Mets plutôt un pointeur vers NULL au lieu d'un noeud qui contient '~'.

    Bon laisse moi réfléchir à tes fonctions, j'vais regarder ça de plus près.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Arbre lexicographique acyclique
    Par cpolos dans le forum Langage
    Réponses: 0
    Dernier message: 22/02/2011, 12h38
  2. Arbre lexicographique
    Par moufmouf dans le forum Langage
    Réponses: 24
    Dernier message: 18/02/2011, 17h15
  3. Réponses: 1
    Dernier message: 03/01/2009, 14h17
  4. Construction d'un arbre lexicographique
    Par ColonelHati dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 03/02/2007, 08h40
  5. [Tableaux] [api] Arbre lexicographique
    Par Husqvarna dans le forum Langage
    Réponses: 4
    Dernier message: 30/09/2005, 13h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo