Bonjour
J'ai un TP à rendre dans 2 semaines et je suis toujours bloquée. Je n'arrive pas à bien comprendre ce qui nous est demandé là.
Est-ce que vous pouvez m'aider??
![]()
Bonjour
J'ai un TP à rendre dans 2 semaines et je suis toujours bloquée. Je n'arrive pas à bien comprendre ce qui nous est demandé là.
Est-ce que vous pouvez m'aider??
![]()
Bonjour
Chouette projet. Il t'apprend à manipuler les listes chainées et les recherches qui vont avec.
Donc d'après ce que moi je comprends, il te faut créer, pour chaque mot français, une liste chainée contenant la signification de ce mot. Cette signification sera écrite de façon à ce que chaque mot soit écrit dans un maillon de la liste.
Exemple: maison; batiment construit pour servir d'habitation aux personnes
Donc pour le mot "maison", sa liste contiendra "batiment", "construit", "pour", "servir", "de", "habitation", "à", "personne"
Ensuite, un second ensemble contiendra le mot en français et le mot en anglais
Exemple:
- maison, home
- batiment, building
- construit, built
- pour, to
- servir, serve
- de, of
- habitation, inhabitation
- etc
Le client de ton traducteur tapera "home". Ca amènera alors sur "maison". De "maison" ça récupèrera tous les mots de sa définition et chaque mot de sa définition ("batiment", "construit", etc) sera traduit en anglais (en utilisant le second ensemble) ce qui donnera alors "home: building built to serve of inhabitation to people"
Voilà. C'est pas un super traducteur mais son rôle n'est pas de traduire réellement mais surtout t'apprendre à manipuler les structures, les tableaux et les listes. Perso je penserais déjà au fait qu'un mot français peut avoir plusieurs significations (voir maison dnas le larousse) et j'utiliserais alors pour chaque mot non pas une liste chainée mais un tableau de listes.
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Merci pour votre réponse![]()
Donc si j'ai bien compris la structure utilisée sera un enregistrement de 4 champs??
Mot_Ang, Mot_Fr, LLC_Sign_Fr et LLC_Sign_Ang. Tout ça dans un tableau??
Ou est-ce qu'il faut créer un autre tableau dont chaque case contient deux champs: l'un pour les mots de la signification en français et l'autre son correspondant en anglais, et à chaque recherche il faut parcourir ce tableau pour trouver la traduction??
Ben c'est à toi de découper tes éléments pour pouvoir effectuer les meilleures manipulations possibles. Par exemple moi, je créerais mes structures ainsi
Code c : Sélectionner tout - Visualiser dans une fenêtre à part
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 #define CAR_MAX (100) // Structure associant mot français et mot anglais typedef struct { char fr[CAR_MAX + 1]; char en[CAR_MAX + 1]; } t_traduc; // Structure pour gérer un mot dans une liste chainée typedef struct s_noeud { t_traduc *mot; // Chaque noeud stockera un pointeur vers le mot français et sa traduction anglaise struct s_noeud *next; } t_noeud; // Structure pour gérer une liste chainée typedef struct { t_noeud *racine; size_t nb_elem; } t_liste; // J'aime bien définir un type dédié à la liste elle-même - Ca allège les paramètres envoyés aux fonctions d'insertion et suppression et ça facilite l'évolutivité // Structure pour gérer les définitions d'un mot typedef struct { t_traduc *mot; // Comme pour le noeud, un pointeur vers le couple mot français/mot anglais t_liste def[10]; // Parce qu'un mot peut avoir plusieurs définitions (on va dire 10 max) } t_larousse;
Bon c'est juste une idée sur le vif. Peut-être qu'on peut regrouper ensemble certains items mais vu d'ici à mon avis ce serait un bon point de départ...
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Tu te fourvoies:Il y a, en plus, un pointeur vers la liste chaînée "Définition"
- maison, home, pointeur
- batiment, building, pointeur
- construit, built, pointeur
- pour, to, pointeur
- servir, serve, pointeur
- de, of, pointeur
- habitation, inhabitation, pointeur
- etc
Justement je me demande si tu as le vrai mot ou alors un pointeur vers ton dictionnaire![]()
Édit: Le problème du pointeur c'est qu'il ne peut pas rester fixe (ou alors il faut allouer un tableau statique) et qu'il faut faire un système "double chaînage" pour qu'on puisse modifier le pointeur d'un mot vers toutes les listes (c'est très lourd). Donc plutôt associer un id avec un mot et mettre cet id au lieu du pointeur
Donc
Soit "bâtiment" -> "construit" -> "pour" -> "servir" -> "de" -> "habitation" -> "à" -> "personne"
Soit pointeur vers mot "bâtiment" -> pointeur vers mot "construire" (*) -> pointeur vers mot "pour" -> pointeur vers mot "servir" -> pointeur vers mot "de" -> pointeur vers mot "habitation" -> pointeur vers mot "à" -> pointeur vers mot "personne"
* -> à voire pour la conjugaison
C'est aussi une façon de voir les choses. Toi tu pars du mot avec sa traduction et tu embrayes directement sur la définition de ce même mot, alors que moi je stocke de façon plus atomique d'un coté le mot et sa traduction et de l'autre le mot et sa définition.
Mais bon, mon exemple n'était qu'un point de départ pour la réflexion
Oui, c'est ainsi que je vois ma structure "t_larousse". Elle contient un pointeur vers la traduction "maison/home" et 10 définitions possibles de ce mot "maison", chaque définition étant codée sous forme d'une liste chainée de mots.
PS: j'ai corrigé mes structures. Au lieu de restocker le mot et sa traduction à plusieurs endroits, je ne le stocke qu'une fois et les autres structures n'ont que des pointeurs vers ce mot. C'est sûr, en mémoire ça va se croiser dans tous les sens mais si c'est bien programmé de façon bien atomique (une fonction pour une chose et une chose par fonction) ça ne devrait pas poser de soucis...
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
C'est dans l'énoncé"contiendra le mot et son synonyme en Anglais, en plus d'un pointeur..."
Le problème vient de où sont stockées les traductions(c'est ta structure t_traduc): dans un tableau fixe, dans une liste chaînée, dans un tableau dynamique (soyons fous un arbre) ...
Parce que si les traductions sont déplacées suite à une opération de ta structure de stockage (ajout, suppression d'une traduction ou réservation pour X traductions ou autre) tes pointeurs seront invalides et c'est le Bronx pour les mettre à jour (je parlais d'un système de "double-chaînage").
Je proposais un id au lieu d'un pointeur, mais c'est vrai qu'avec un pointeur c'est un accès direct à la traductionet non pas une recherche d'un id ou d'un mot.
Oui je vois ce que tu veux dire. Evidemment dans mes structures il manque un lien entre le mot lui-même ("maison") et ses définitions. Mais bon, encore une fois c'était juste un brouillon pour servir de point de départ de réflexion. Le lien peut très bien se faire de façon logicielle (exploration de toutes les listes jusqu'à trouver celle qui commence par "maison". Et bon après-tout c'est pas non plus mon TP quoi
[edit] Dommage, ce topic m'intéressait mais je semble être le seul.
Je pense avoir trouvé les bonnes structures
Code c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 #define NB_CAR (100) // Structure gérant un noeud dans une liste chainée typedef struct s_noeud { struct s_traduc *mot; struct s_noeud *next; } t_noeud; // Structure gérant la liste chainée elle-même typedef struct { size_t nb_elem; t_noeud *first; } t_liste; // Structure gérant une traduction typedef struct s_traduc { char fr[NB_CAR + 1]; char en[NB_CAR + 1]; t_liste def[10]; } t_traduc;
Ainsi chaque mot ("maison", "batiment", etc) accède directement à ses 10 définitions possibles. Et chaque définition est un début de liste chainée où chaque noeud contient l'adresse d'un mot.
J'étais embêté de devoir créer un pointeur vers une structure s_traduc pas encore définie mais ça n'a pas gêné le compilo. J'ai même tenté de modifier le nom de la structure "s_traduc" utilisée comme pointeur dans mon type "t_noeud" et là non plus ça ne l'a pas gêné. Et même pas pour afficher sizeof(t_noeud). Ca doit être le même principe qui permet de créer un noeud (avec un next pointant vers la structure en cours d'écriture) mais bon, dans ce cas là la structure est quand-même écrite (son nom existe déjà) alors que dans ce cas ci, la structure est écrite bien plus tard dans le code. Mais bon, il s'y retrouve et c'est l'essentiel.
Bon moi ce TP m'intéresse et je vais le faire à mes moments perdus. Si un intervenant (habitué s'entend !!!) veut que je le lui file une fois terminé, il me MP...
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Partager