Recherche dichotomique dans un fichier

Fermé
joujou98 - 20 déc. 2018 à 11:32
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 20 déc. 2018 à 14:08
Bonjour,

je viens d'écrire une fonction qui cherche un mot dans un fichier txt sous la stucture suivante ( mot:definition ) c'est comme un dictionnaire enfaite , j'ai pris le premier caractere de chaque ligne et je les ai stocké dans un tab tmp déclaré dynamiquement , aprés je veux faire la rech dicho sur ce tab mais ça na pas marché






long existe(char *mot,FILE *dico)
{ char *tmp=(char*)malloc(200*sizeof(char));
char ch1,ch2;
dico=fopen("ghilani.txt","r");
char line [ 128 ];
rewind(dico);
int tr=-1,i=0,j;
while(!feof(dico))
{
ch2=getc(dico);
fgets(line,128,dico);
printf("%c",ch2);
tmp[i]=ch2;
i++;
}
tmp[i]='\0';

j=i;
i=0;

while( tr ){
int k= (i+j)/2;

if(tmp[k]<mot[0])
{
i=k;
tr=-1;
}
else {j=k;
tr=-1;
}

if (tmp[k]==mot[0])
tr=1;

}
}





Configuration: Windows / Firefox 63.0
A voir également:

2 réponses

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 20 déc. 2018 à 13:36
Salut joujou98,

Si tu dois chercher un mot, pourquoi ne prends-tu qu'un caractère dans le fichier au début de chaque ligne et ne fais-tu une comparaison que du premier caractère du mot passé à la fonction ?

Sais-tu réellement que tes lignes ne font pas plus de 128 caractères ?

Est-ce un dictionnaire de mots de la langue française ? Peux-tu en donner un extrait (quelques lignes d'exemple à partir du début) ?

Ta fonction retourne un long selon son prototype. Là tu ne retournes rien. Que veux-tu retourner ?

Tu devrais améliorer ton style qui est très difficile à lire (et pour la coloration syntaxique sur le forum d'un code en langage C utilise la balise <code c> pas juste <code>). Vois :

https://fr.wikipedia.org/wiki/Style_d%27indentation#Style_K&R
https://www.cas.mcmaster.ca/~carette/SE3M04/2004/slides/CCodingStyle.html ou, mieux, lis le livre de Kernighan et Ritchie ...

Dal
0
c'est déjà précisé j'ai besoin d'une recherche dichotomique
je sais que ma fonction retourne un long, je veux retourner la position de ce mot dans le fichier
la ligne n'est pas un problème mais la recherche dicho j'ai pas su la faire c ça qui minteresse
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 20 déc. 2018 à 14:12
Tu ne réponds pas à mes questions, mais c'est toi qui vois.

Ce n'est pas en prenant seulement le premier caractère de chaque mot que tu vas faire une recherche dichotomique.

Tu dois :
- charger tous les mots du dictionnaire (qui sont dans l'ordre alphabétique, puisque c'est un dictionnaire)
- prendre le mot du milieu du dictionnaire et voir si le mot que tu cherches est avant ou après (tu dois donc comparer des mots) et pour cette comparaison il y a une fonction standard dans le langage C que tu devrais utiliser :
strcmp()
voir : http://www.cplusplus.com/reference/cstring/strcmp/
- répéter l'opération en prenant le mot à la moitié de la partie dans laquelle le mot devrait se trouver jusqu'à ce que tu tombes sur le mot ou qu'il ne reste plus rien à diviser en deux

Bon courage :-)
0