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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
| #include<ctype.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/*
Fonction de recherche dichotomique.
*/
int dichotomie(char dico[][LONG_MOT], char mot[], int nbMots)
{
int i = 0; /* Indice de debut. */
int j = nbMots; /* Indice de fin. */
int k = 0; /* Indice de milieu. */
int trouve = 0; /* Boleenne (faux si pas trouve.) */
while (!trouve && ((j - i) > 1) )
{
k = (i + j) / 2;
if (strcmp (dico[k], mot) == 0)
trouve = 1;
if (strcmp (dico[k], mot) > 0)
j = k ;
else
i = k ;
}
if (dico[i] == mot)
return (i);
else
return (-1);
}
int main (int argc, char *argv[])
{
FILE *fiDico = fopen ("dico.dat", "r");
ret = EXIT_SUCCESS ;
int nbMots = 0; /* Valeur pour le nombre de mots. */
int resultat; /* Retour de la fonction. */
char ligne[LONG_MOT] = " "; /* Stockage des lignes des fichiers. */
char dico[MAX_MOTS][LONG_MOT] = { " " }; /* Dico. */
char mot[26] = " " ; /* Mot a rechercher. */
if (fiDico != NULL)
{
/* Lecture du fichier et stokage dans le tableau "dico". */
while (nbMots < MAX_MOTS && fgets (ligne, LONG_MOT, fiDico) != NULL)
{
strcpy (dico[nbMots], ligne);
nbMots++;
}
fclose (fiDico);
fiDico = NULL;
fputs ("\nTapez le mot a rechercher dans le dictionnaire : ", stdout);
fflush (stdout);
fgets (mot, sizeof mot, stdin);
if (mot[strlen(mot) - 1] == '\n')
mot[strlen(mot) - 1] = '\0';
/* Recherche dans dico. */
resultat = dichotomie (dico, mot, nbMots);
if (resultat != -1)
{
fprintf (stdout, "Ce mot se trouve déjà en position %d du dico.\n", resultat);
}
else
{
fprintf (stdout, "Ce mot n'est pas dans le dictionnaire!\n");
}
}
else
{
printf ("Clash de \"dico.dat\".");
ret = EXIT_FAILURE;
}
fprintf (stdout, "Appuyez sur une touche...");
getch ();
return ret;
} |
Partager