rabzouze | theshockwave a écrit :
awww ... je me suis fourvoyé en relisant ton code ... Je me suis fait avoir par le typedef ... désolé
Erm, pour éviter les ennuis, soit tu remplaces Arbre par Noeud dans ce fichier, soit tu ajoutes en début de fichier (ou dans arbre.h) :
Code :
- typedef Noeud Arbre;
|
(auquel cas tu devras garder en tête la différence qu'il y a à mettre une majuscule à Arbre ou non, ce qui n'est pas terrible pour la lisibilité)
pour créerArbre, il faut que cette fonction puisse modifier l'argument qu'on lui passe dans le contexte de la fonction appelante. Il faut donc passer un pointeur sur le pointeur d'arbre que tu désires modifier :
Code :
- void creerArbre(Noeud **a)
- {
- Arbre p=NULL;
- p = malloc(sizeof(Noeud)); // pas de cast sur un malloc
- p->lettre =' '; // a toi de voir en fonction de l'énoncé
- p->fdroit=NULL;
- p->fgauche=NULL;
- *a=p;
- }
|
j'en profite pour te refaire ta fonction estVide() :
Code :
- int estVide(Noeud *a)
- {
- return a == NULL;
- }
|
Pour la fonction d'insertion, j'espère que tu as saisi le principe en l'écrivant ... En tout cas, on ne fait pas un strcmp pour voir si on a atteint la fin, mais on regarde simplement si la valeur pointée est nulle. Attention aux déréférencements, par contre : tu changes le type. Tu dois bien voir que p est du même type que morse, donc si tu déréférence p au moment où tu le passes en paramètre à ta fonction, alors tu n'as pas le type attendu
Ensuite, modifier morse directement ne modifiera pas les données du contexte appelant, donc créer une variable p ne sert pas vraiment
Code :
- void insereMorse(Noeud* a, char* morse, char car)
- {
- if(*morse==0) // si morse pointe sur le caractère de fin de chaine
- a->lettre=car;
- else
- {
- if (*morse=='.')
- {
- if (estVideA(a->fdroit))
- creerArbre(a->fdroit);
- insereMorse(a->fdroit, p+1, car);
- }
- else
- {
- if (estVideA(a->fgauche))
- creerArbre(a->fgauche);
- insereMorse(a->fgauche, p+1, car);
- }
- }
- }
|
et maintenant, pour la fonction elle-même, j'ai de gros doute sur la manière dont tu parcours ta liste (et d'ailleurs, tu n'as toujours pas répondu à ma question à ce sujet : où est la définition de Liste ?)
|
Excuse je rempli ma liste a partir d'un fichier je v tenvoyé le code que j'ai reussi a faire pour la liste juste un soucis avec le ajout kant je le fait a part tu verra c un pe brouillon mais ca fontionne
fichier typeliste.h
Code :
- #ifndef TYPELISTE_H
- #define TYPELISTE_H
- #include <stdio.h>
- #include <stdlib.h>
- struct element
- {
- char c;
- char *morse;
- struct element* suiv;
- };
- typedef struct element Element;
- typedef Element* Liste;
- #endif
|
fichier liste.c
Code :
- #include "liste.h"
- boolean estVide(Liste l)
- {
- if (l==NULL) return vrai;
- else return faux;
- }
- void Ajouter(char c,char *m,Liste *l)
- {
- Liste p=NULL;
- Liste q=NULL;
- if (estVide(*l)==vrai)
- {
- p= (Liste) malloc(sizeof(Element));
- p->c=c;
- p->morse=(char *)malloc((strlen(m)+1)*sizeof(char));
- strcpy(p->morse,m);
- p->suiv=NULL;
- *l=p;
- }
- else
- {
- p=Precedent(c,*l);
- q= (Liste) malloc(sizeof(Element));
- q->c=c;
- q->morse=(char *)malloc((strlen(m)+1)*sizeof(char));
- strcpy(q->morse,m);
- q->suiv=p->suiv;
- p->suiv=q;
- }
- }
- Liste InitListe(char *Fcode)
- {
- FILE *fp;
- char c;
- char ligne[100];
- char car;
- int j;
- char *code;
-
- Liste l = NULL;
- fp=fopen(Fcode,"r" );
- if(fp==NULL) printf("Fichier existe pas\n" );
- else
- {
- printf("Initliste" );
- c=fscanf(fp,"%c %s\n",&car,ligne);
- while(c!=EOF)
- {
- j=strlen(ligne)+1;
- code=(char*) malloc(sizeof(char)*j);
- strcpy(code, ligne);
-
- /***Ajoute sur liste ****/
- Ajouter(car,code,&l);
- /***************************/
- printf("Initliste Ajouter" );
- c=fscanf(fp,"%c %s\n",&car,ligne);
- }
- fclose(fp);
- }
- Afficher_liste(l);
- return l;
- }
- Liste Precedent(char c,Liste l) // renvoi l'element precedent c
- {
- Liste q,prec;
- prec=l;
- q=l->suiv;
- while(q!=NULL && ((char)q->c) < ((char)c))
- {
- prec=q;
- q=q->suiv;
- }
- return prec;
- }
- int position(char c,char* m,Liste l)
- {
- int i=0;
- while (l!=NULL)
- {
- if (c==l->c && strcmp(l->morse,m)==0) return i;
- i++;
- l=l->suiv;
- }
- return -1;
- }
- void Afficher_liste(Liste l)
- {
- int k;
- Liste p = l;
- while(l)
- {
- printf("Element : %c %s ",l->c,l->morse);
- k = position(l->c,l->morse,p);
- if (k==-1) printf("Element n'existe pas" );
- printf(" (%d)\n",k);
- l=l->suiv;
- }
- }
- char RechercheLettreListe(char *m,Liste l)
- {
- Liste p = l;
- while(p)
- {
- if (strcmp(p->morse,m)==0) return p->c;
- p=p->suiv;
- }
- return '0';
- }
- char* RechercheMorseListe(char c,Liste l)
- {
- Liste p = l;
- while(p)
- {
- if (p->c==c) return p->morse;
- p=p->suiv;
- }
- return NULL;
- }
- void suprAvecLettre(char c,Liste *l)
- {
- Liste p,prec;
- if (estVide(*l)==faux)
- {
- p=*l;
- if (p->c==c)
- {
- p=*l;
- *l=p->suiv;
- free(p);
- }
- else
- {
- prec=Precedent(c,*l);
- if (((prec->suiv==NULL)) || (prec->suiv->c)!=c )
- {
- printf("La lettre tapé n'est pas dans la liste" );
- }
- else
- {
- p=prec->suiv;
- prec->suiv=p->suiv;
- free(p);
- }
- }
- }
- else
- {
- printf("La Liste est vide" );
- }
- }
- void TraduireEnMorse(Liste l,char *Fsource,char *Fdest)
- {
- /*****Travaile sur fichier code*///
- FILE *Fcode;
- char *c;
- char ligne[100];
- int i;
- char *recupMorse;
- /**********************************/
-
-
- /******Fichier convert****************/
- FILE *FenMorse;
- /******************************/
-
- Fcode=fopen(Fsource,"r" );
- FenMorse=fopen(Fdest,"w" );
-
- if(Fcode==NULL) printf("Fichier existe pas\n" );
- else
- {
- while((c=fgets(ligne,100,Fcode))!=NULL)
- {
- i=0;
- // while((ligne[i]!='\0') && (i<strlen(ligne)))
- while(ligne[i]!='\0')
- {
- if(ligne[i]==' ')
- {
- fprintf(FenMorse," * " );
-
- }
- else if (ligne[i]=='\n')
- {
- fprintf(FenMorse,"\n" );
- }
- else
- {
- recupMorse = RechercheMorseListe(ligne[i],l);
- fprintf(FenMorse,"%s$",recupMorse);
-
- }
- i++;
- }
-
- }
- }
- fclose(Fcode);
- fclose(FenMorse);
-
- }
|
fichier qui teste princliste.c
Code :
- #include "liste.h"
- #define FICHIER "code.txt"
- #define FICHIER2 "Traduit.txt"
- #define FICHIER3 "ConvertMorse.txt"
- main()
- {
- Liste l = InitListe(FICHIER);
- Afficher_liste(l);
- TraduireEnMorse(l,FICHIER2,FICHIER3);
- }
|
Il ya aussi le fichier liste.h mais bon tu sait que j'y ai mit seulement les entetes de fonctions voila mnt tu as tout ce que j'ai si tu ne compren pas di le moi pr la liste pr l'arbre par contre jai un blocage mais je verrai Tiens moi o courant si ca ne tiens pas la route |