Skip to content
Snippets Groups Projects
Commit 730e7869 authored by Skyx's avatar Skyx
Browse files

Principes et tests

parent e1af2797
No related branches found
No related tags found
No related merge requests found
Showing
with 186 additions and 30 deletions
File added
File added
File added
File added
File added
File added
File added
File added
File added
File added
hello;bonjour
bye;au revoir
sorry;pardon
hello;ola
hello;buenas dias
bonjour;ola
bye;adios
au revoir;adios
......
......@@ -8,7 +8,6 @@
/* */
/* En sortie: Un entier représentant l'indice de la table majeur */
/* -------------------------------------------------------------------- */
unsigned int hash_string(const char *str)
{
unsigned int hash = 5381; /* fonction de hachage de D.J. Bernstein*/
......
......@@ -15,9 +15,81 @@
int main(int argc, char **argv)
{
int choix=0;
char fichier[50];
char fichier[50], test;
Table* table = CreerTable();
puts("Souhaitez vous lancer des test ? (y/N)");
fscanf(stdin,"%c", &test);
if(test == 'y') {
puts("----------------- CHARGEMENT -----------------");
puts("Chargement: Fichier vide");
strcpy(fichier, "src/dico.txt");
printf("Code de retour de chargement : %d\n", Chargement(table, fichier));
AfficherTable(table);
puts("Chargement: Cas général");
strcpy(fichier, "src/francais.txt");
printf("Code de retour de chargement : %d\n", Chargement(table, fichier));
AfficherTable(table);
puts("----------------- FIN CHARGEMENT -----------------");
LibererTable(table);
table = CreerTable();
puts("----------------- RECHERCHE -----------------");
puts("Recherche: table vide");
printf("Résultat de la recherche : %p\n", (void*)Recherche(table, "toto"));
Chargement(table, fichier);
puts("Recherche: en entrée un mot qui n’existe pas dans la table");
printf("Résultat de la recherche : %p\n", (void*)Recherche(table, "toto"));
puts("Recherche: en entrée un mot qui existe (ex: hello)");
printf("Résultat de la recherche : %s\n", Recherche(table, "hello")->valeur);
puts("Recherche: en entrée un mot qui existe à la fin d’une liste chaînée (ex: good)");
printf("Résultat de la recherche : %s\n", Recherche(table, "good")->valeur);
puts("----------------- FIN RECHERCHE -----------------");
LibererTable(table);
table = CreerTable();
puts("----------------- TRADUCTION -----------------");
if(argc < 2){
printf("\nVous n'avez pas écrit en argument les mots à traduire !\n");
}
else {
puts("Traduction: table vide");
Traduction(table, argv);
Chargement(table, fichier);
puts("Traduction: Mot existant dans le début d’une liste chaînée, fin d'une liste chaînée et inexistant");
Traduction(table, argv);
}
puts("----------------- FIN TRADUCTION -----------------");
LibererTable(table);
table = CreerTable();
puts("----------------- AFFICHAGE -----------------");
puts("Affichage: table vide");
AfficherTable(table);
strcpy(fichier, "src/espagnol.txt");
Chargement(table, fichier);
puts("Affichage: Table avec plusieurs cellules par liste chaînée");
AfficherTable(table);
puts("----------------- FIN AFFICHAGE -----------------");
LibererTable(table);
}
else {
if(argc < 2){
printf("\nVous n'avez pas écrit en argument les mots à traduire !\n");
}
......@@ -44,7 +116,7 @@ int main(int argc, char **argv)
LongMoy(table);
}
}
LibererTable(table);
}
return 0;
}
fonction CreerTable()
Je déclare une variable d'itération i
J'initialise ma table à NIL
J'alloue la taille de ma table
si l'allocation n'a pas échoué alors
pour i de 0 à HASH_MAX - 1 par pas de 1 faire
J'initalise ma table majeur à l'indice i à NIL
fin pour
J'initalise le compteur de la table à 0
fin si
retourner la table
FIN
procédure Chargement(E/S: table, E: fichier)
Je déclare un descripteur de fichier,
un code de retour,
un tableau de 100 caractères pour la lecture du fichier,
un pointeur de caractères temporaire clé et valeur,
une cellule temporaire pour l'ajout à la table
J'ouvre le fichier en lecture
si l'ouverture a échoué alors
on affiche un message d'erreur
on met un code d'erreur dans le code de retour
sinon
on lit une ligne
tant qu'on n'atteint pas la fin du fichier faire
si la fin de la ligne lu est un retour chariot alors
le remplacer par NULL
fin si
on parse dans la ligne la clé
puis la valeur
on crée une nouvelle cellule composé de la clé et valeur lues
on incrémente le compteur de la table
On insère la cellule temporaire au bon hash
On lit une autre ligne
fin tant que
On met un code de retour positif
On ferme le fichier
fin si
retourner code
FIN
procédure Recherche(E/S: table, E: cle)
On déclare un pointeur courant
On place le pointeur courant sur le hash de la clé
Tant qu'on peut parcourir la liste et que la clé courant n'est pas identique à celle passé en paramètre faire
Le pointeur courant devient le suivant
fin tant que
retourner cour
FIN
procédure AfficherTable (E: table)
On déclare une variable d'itération i
pour i de 0 à 28 par pas de 1 faire
On affiche la liste de la table majeur à l'indice i
fin pour
FIN
procédure Traduction(E: table, mots)
On déclare un pointeur courant cour
On déclare une variable d'itération i initialisée à 0
tant qu'il reste des mots à lire faire
on recherche le mot courant et on affecte le résultat dans cour
si on trouve un résultat alors
on affiche le résultat
sinon
on affiche rien
fin si
on incrémente i
fin tant que
FIN
procédure LongMoy(E: table)
On déclare la variable pour la moyenne
moy prend la valeur du compteur de la table divisé par HASH_MAX
On affiche le résultat
FIN
procédure LibererTable(E: table)
On déclare une variable d'itération i
Si la table != NIL alors
pour i de 0 à HASH_MAX - 1 par pas de 1 faire
On appelle la fonction LibererListe pour la liste de la table majeure à l'indice i
fin pour
fin si
On libère la table
FIN
\ No newline at end of file
......@@ -173,7 +173,6 @@ void LibererTable(Table * table) {
for(i = 0; i < HASH_MAX; ++i) {
LibererListe(table->table_majeur[i]);
}
table->compteur = 0;
}
free(table);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment