Projet C : Logiciel de devinette [Résolu]

psgkiki 43 Messages postés mercredi 9 juin 2004Date d'inscription 17 août 2010 Dernière intervention - 29 avril 2007 à 16:45 - Dernière réponse : Cphil51 88 Messages postés jeudi 22 juin 2006Date d'inscription 24 septembre 2007 Dernière intervention
- 30 avril 2007 à 23:55
Bonjour a tous,

J'ai un projet à faire en C et je ne vois pas trop comment commencer. J'attends de vous quelques petits conseils pour commencer ce projet..

Voila le sujet ::

L'objectif est de realiser un logiciel qui devine le nom d'un animal décrit par un enfant. Le logiciel pose des questions à l'enfant et conclut dès qu'il peut en donnant le nom de l'animal.
Les animaux sont supposés organisés en classes, elles-mêmes organisées en hiérarchie. Ainsi, on part d'une classe qui contient tous les animaux, puis l'ordinateur pose une question. En fonction de la réponse à cette question, l'ordinateur détermine  une classe d'appartenance de l'animal plus réduite, et il réitère le processus jusqu'à pouvoir répondre.

Voila, donc je sais que je vais devoir utiliser les arbres n-aire pour la classification des animaux dont les feuilles contiennent des noms d'animaux, tandis que les noeuds internes contiendront les questions à au plus n réponses permettant de scinder en n parties l'ensemble des animaux. Chaque sous-arbre correspondra à une réponse à la question contenue dans le noeud racine.

Voila, j'arrive pas à voir comment représenter cet arbre, comment les coder (structures...) donc j'ai besoin de votre aide, d'aide de professionnels.

Merci beaucoup
Afficher la suite 

Votre réponse

6 réponses

Cphil51 88 Messages postés jeudi 22 juin 2006Date d'inscription 24 septembre 2007 Dernière intervention - 29 avril 2007 à 17:33
+3
Utile
Bonjour. Tu peut faire un truc du genre :

typedef struct myNode{
    int             id_question;          // id de la question
    int             n_sub_node;         // nombre de sous noeuds
    myNode* sousNoeuds[];      // pointeeur sur un tableau de sous noeuds (si nombre de sous noeuds variable)
} tree_node_t;

Dans ton code tu fais par exemple:

myNode * node;
node = malloc(sizeof(myNode));                                  // alloue un noeud (vérifie le résultat de l'alloc, pas comme ici...)
node->id_question = quelque_chose;
node->n_sub_node = 25;                                              // on a 25 sous noeuds (par exemple)
node->sousNoeuds = malloc(sizeof(myNode) * 25)); // alloue les 25 sous noeuds (penser aussi a vérifier l'alloc)

et après tu parcour ton arbre tranquillement avec des pointeurs.

Le code que j'ai mis ici est surement plein d'erreurs puisque je l'ai fais a l'arrache ;p. Je cherche juste a te motrer "grosso-modo" un modèle de structure. Maintenant, c'est a toi de faire quelques recherches. Il doit y avoire pas mal d'exemples de code utilisant des arbres sur ce site.

Bonne chance dans ton travail :p.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Cphil51
acx01b 281 Messages postés dimanche 7 septembre 2003Date d'inscription 8 juillet 2014 Dernière intervention - 29 avril 2007 à 17:38
0
Utile
salut je ne suis pas trop d'accord avec l'arbre moi je verrais plutôt ça:

typedef struct {
char **valeurs;
char *question;
} propriete;

tu construis plein de propiétés comme ça par exemple:

propriete couleur;
char *t[5] = {"rouge","jaune","vert","bleu",NULL};
couleur.valeurs = t;
couleur.question = "quelle est la couleur de l'animal ?\n";

pour poser la question tu fais

printf("%s\nvaleurs possibles: ",couleur.question);
int i = 0;
while(couleur.valeurs[i]) {
printf("%d: %s ",i,couleur.valeurs[i]);
i++;
}

tu enregistres dans un tableau les réponses données tant que le nombre d'animaux qui correspondent aux réponses données est supérieur à 1
Commenter la réponse de acx01b
psgkiki 43 Messages postés mercredi 9 juin 2004Date d'inscription 17 août 2010 Dernière intervention - 29 avril 2007 à 17:56
0
Utile
Merci à vous 2 pour votre aide.

Je vois un peu plus clair. La prof veut que l'on utilise les arbres. J'ai pas le choix. Par contre, elle nous a conseillé de mettre toutes les questions dans un fichier car il y en a plusieurs. Moi j'avais pensé de mettre dans un fichier chaque animal avec leurs caractéristiques mais est ce que c'est possible ?

en fait le schéma de l'arbre sera le suivant :

question 1 : Est ce qu'il vole?

                                                                                           /                       \
                                                                                        oui                       non
                                                                            (peroquet,aigle...)         (poisson,chat,chien....)
                                                                                        |                                 |
                                                                      question 2 :                            question 2 :
                                                                      /   |   |   |   |   \                           /   |   |   |   |   \

etc...

Mais par exemple, pour la question 1, l'enfant répond OUI. Donc en fait, dans mon fichier ou j'ai tous les animaux, je supprime tous les animaux dont la caractéristiques Vol est Non.

Est ce que je peux faire comme cela ?
Commenter la réponse de psgkiki
Cphil51 88 Messages postés jeudi 22 juin 2006Date d'inscription 24 septembre 2007 Dernière intervention - 30 avril 2007 à 10:50
0
Utile
Il te faudrat sauvegarder une structure en arbre dans ton fichier. Je pense que faire un fichier différent par animaux serait plus simple a faire que tout dans un seul fichier.

Quand l'application est lancée, tu construit ton arbre en mémoire, et tu le modifie en fonction des réponses (libération des branches inutiles au fil des réponses...). Ton programme serait ainsi plus rapide.
Commenter la réponse de Cphil51
psgkiki 43 Messages postés mercredi 9 juin 2004Date d'inscription 17 août 2010 Dernière intervention - 30 avril 2007 à 11:32
0
Utile
Merci bien. Tu n'as pas un exemple pour sauvegarder une structure en arbre dans un fichier car là je ne voit pas commment faire.
Commenter la réponse de psgkiki
Cphil51 88 Messages postés jeudi 22 juin 2006Date d'inscription 24 septembre 2007 Dernière intervention - 30 avril 2007 à 23:55
0
Utile
Si possible prend un fichier par noeud. Je ne sais pas trop comment faire pour sauvegarder l'arbre dans un seul fichier...
En fait je n'ai jamais manipulé a fonc les arbres, mais il doit y avoir des exemples sur le NET pour ce genre de problèmes.
Commenter la réponse de Cphil51

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.