Dictionnaire

eclaador Messages postés 1 Date d'inscription jeudi 31 mai 2012 Statut Membre Dernière intervention 31 mai 2012 - 31 mai 2012 à 12:49
NHenry Messages postés 15114 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 4 mai 2024 - 31 mai 2012 à 14:22
Sujet
Ce mini-projet vise à réaliser un dictionnaire anglais qui inspire largement sa forme d'un arbre n-aires (n=26) où les noeuds représentent les lettres composant les différents mots. Un exemple est fourni en fin de document.
Types utilisés
1. type dictionnaire (dico):
- tableau de 26 pointeurs vers noeud (car on a 26 lettres dans l'alphabet).
2. type noeud contient:
- champ lettre.
- champ prec (pointeur vers le noeud précèdent; les noeuds pointés directement par les pointeurs de t de dico valent NULL).
- champ tab: tableau de 26 pointeurs vers noeud.
- champ sens: chaine de caractères (tableau de 200 caractères) ; sens du mot se terminant sur ce noeud, sinon chaine vide "\0".
- champ syn: variable de type synonyme
3. type synonyme
- champ mot (20 caractères)
- champ p pointeur vers le noeud du dictionnaire qui contient le sens de ce synonyme, c.-à-d. le noeud correspondant à la dernière lettre de ce mot).
Ci-dessous une représentation graphique des différents champs constituant un noeud :
Remarque :
D'autres types de données peuvent être définis en vue de leur nécessité.
Page 2 de 3
Fonctions demandées
1. creerDico : crée et retourne un dictionnaire vide dont le tableau de pointeur est initialisé à NULL partout.
2. existe : fonction qui vérifie l'existence d'un mot donné dans un dictionnaire donné. Noter bien qu'il ne suffit pas de trouver tous les noeuds correspondants au lettres successives de ce mot pour dire qu'il existe, mais il faut, en plus, s'assurer que le dernier noeud contienne un sens (chaine non nulle), sinon son existence revient au fait qu'il soit un préfixe d'un autre mot dans le dictionnaire. Si le mot existe dans le dictionnaire (a un sens), cette fonction retourne un pointeur vers le noeud contenant le sens (noeud correspondant à la dernière lettre de ce mot), sinon la fonction retourne NULL.
3. ajouterMot : ajoute un mot donné à un dictionnaire donné (création et lien des différents noeuds correspondants et remplissage du sens donné de ce mot dans le dernier noeud). Retourne 1 en cas de réussite et 0 en cas d'échec (échec : mot existe déjà c.-à-d. il a déjà un sens dans le dictionnaire). Évidemment, cette fonction s'en sert de la fonction existe.
4. changerSens : change le champ sens correspondant à un mot qui existe déjà dans le dictionnaire.
5. rechercher : fonction qui recherche et retourne le sens d'un mot dans le dictionnaire. Évidemment, cette fonction s'en sert de la fonction existe.
6. getMot : fonction qui, à partir d'un pointeur vers un noeud dans le dictionnaire, retourne le mot (chaine de caractères) se terminant par ce noeud. (Utiliser le pointeur prec dans chaque noeud pour faire un parcours en arrière).
7. setSyn : fonction qui prend en paramètre deux mots déjà existants dans le dictionnaire et indique (met à jour la valeur dans le champ syn) que chacun d'eux est le synonyme de l'autre.
8. effacerMot : fonction qui efface un mot du dictionnaire. Dans ce cas, il faut libérer tous les noeuds utilisés auparavant uniquement pour ce mot. (Avant de libérer chaque noeud, vérifier qu'il ne fait pas partie d'autre mots dans le dictionnaire, qui eux doivent continuer à exister. Il faut aussi supprimer le lien de synonymie.
9. imprimer: fonction qui affiche tous les mots du dictionnaire avec leurs sens, et leurs synonymes éventuels. Cet affichage doit se faire dans l'ordre alphabétique (ordre naturel du dictionnaire).
10. liberer : fonction qui libère le dictionnaire entier de la mémoire tas.
11. sauvegarder: qui écrit le dictionnaire entier dans un fichier XML, dans le but de la charger plutard.
12. charger : qui reconstruit un dictionnaire à partir d'un fichier XML.
Astuce
Pour savoir l'indice de la case correspondant à une lettre dans le tableau de pointeur, il suffit de faire indice = lettre - 'a'. Par exemple l'indice de la case correspondante à la lettre 'c' est indice='c'-'a'=2, car les indices commencent par 0.
Page 3 de 3
Exemple détaillé
Ci-dessous, une représentation graphique d'un dictionnaire contenant 3 mots :
- ball : A solid or hollow sphere or ovoid.
- bay : Inlet of the sea where the land curves inward. (syn : cove)
- cove : A small sheltered bay.(syn : bay)
On donne ainsi le contenu du fichier XML représentant ce dictionnaire :
<dico> <l> <l> <sens> A solid or hollow sphere or ovoid. </sens> </l> </l> <y> <sens> Inlet of the sea where the land curves inward. </sens> <syn> cove </syn> </y> <c> <o> <v> <e> <sens> A small sheltered bay. </sens> <syn> bay </syn> </e> </v> </o> </c> </dico>

2 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
31 mai 2012 à 13:50
Bonjour,
C'est quoi, en fait cet exposé ?
S'il est l'exposé de ce ce que tu veux faire : relis donc le règlement de ce forum puis reviens avec :
- uniquement l'exposé d'une seule question technique, spécifique et isolée
- accompagnée du code que tu as tenté
Nous ne somme en aucun cas là pour faire ton devoir, ni pour mener ton projet de A à Z, sur la base d'un exposé de tes desideratas (va au supermarché pour cela). Ici : nous sommes des développeurs et non des pourvoyeurs d'application. Et nous aidons des développeurs (ils ne viennent pas nous dire ce qu'ils veulent, mais nous exposent une difficulté précise dans la mise en oeuvre de ce qu'ils veulent. Ils nous disent ce qu'ils ont tenté d'écrire. Penses-tu être un développeur ?).


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
NHenry Messages postés 15114 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 4 mai 2024 159
31 mai 2012 à 14:22
Bonjour,

Lis le point 1 de ma signature :

"tableau de 26 pointeurs"
Tu fais du VB ou du C/C++ ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
Rejoignez-nous