begin process at 2012 05 28 22:41:19
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Général

 > 

Construction d'un arbre à partir d'un fichier


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Construction d'un arbre à partir d'un fichier

lundi 7 mai 2007 à 12:08:56 | Construction d'un arbre à partir d'un fichier

psgkiki

Bonjour a tous,

Ma question est comment construire un arbre contenant des données stockées dans un fichier. C'est pour un logiciel de devinette d'animaux.

Dans mon fichier, exemple.txt :

A1(chat,4,oui,...)
A2(dauphin,0,non...)
A3(serpent,0,non...)
A4(chien,4,non...)
A5(corbeau,2,non...)
...

J'ai déclaré une structure animal

typedef struct animal_s
{
char[20] nom; (chat)
int nbpatte; (4)
char[3] moustache; (mammifère)
...
}animal;

En fait le but du jeu c'est ,pour chaque question posé et selon la réponse de l'utilisateur, de construire un arbre permettant à la fin de deviner l'animal.

Exemple :
Question 1:combien a -t-il de pattes ?
Reponse possible:0,2,4

Si la réponse est 0, les fils de l'arbre seront A2,A3
Si la réponse est 2, le fils de l'arbre est A5
Si la réponse est 4, les fils seront A1 et A4

Si la réponse est 2, le programme renverra comme réponse A5 donc le corbeau.
Si l'utilisateur a repondu 0 ou 4, une deuxième question sera posé. Par exemple, Est ce qu'il a des moustaches?(oui / non)

Si l'utilisateur a repondu 0 puis oui, le programme renverra qu'aucun animal a étté trouvé. S'il a repondu non, une troisième question sera posé pour savoir si c'est le serpent ou le dauphin.
Si l'utilisateur a repondu 4 puis oui, le programme renvera comme réponse le chat, sinon le chien.

Voila, donc je ne vois pas trop comment créer l'arbre à partir des données contenus dans mon fichier.

Si vous avez une idée.

Merci
lundi 7 mai 2007 à 13:15:13 | Re : Construction d'un arbre à partir d'un fichier

emmatopiak

Réponse acceptée !
Salut,

Alors il faut que tu fasses un arbre dans lequel chaque noeud contient une question et pour chaque réponse possible il y a un noeud différent
Par exemple pour le noeud N0, la question est : "Combien de pattes ?" et si la réponse est 0 ca va au noeud N1, si la réponse est 2 ca va au noeud N2, si la réponse est 4 ça va au noeud N3
-- le noeud N2 ne contient que corbeau pour le moment donc on a notre structure de noeuds qui se construit car un noeud peut être une question ou un animal.

struct noeud {
  char noeudOuAnimal;
  char * question;
  struct list * noeudFils;
  struct animal * reponse;
}

Tu pourrais faire une union mais disons que non pour l'instant pour noeudFils faut faire une structure de données du type :

( (0, N1) , (2, N2), (4, N4) )
 mais aussi
( (oui, N5) , (non, N6) )
donc faut que le premier champ soit int ou char *

Bon mais là tu as que ta structure de données, comment créer l'arbre ?

- faut faire un algorithme récursif je dirais, qui fonctionne comme ça :

  liste-animaux <--- tous les animaux
  arbre <--- arbre vide
  tantque liste-animaux non vide faire
  chercher un critere C qui permet d'avoir au moins deux reponses différentes
  classer tous les animaux de liste-arbre selon le critère C 

Mettre tous les animaux dans les différentes catégories dans l'arbre.

ERF! Pas fait en récursif, je le refait, lol.

Donc:

traitement-animaux ( arbre A, liste-animaux L) {
  trouver une question qui génère au moins deux réponses différentes
  pourtoutes les réponses R possibles faire
    L2 <-- tous les animaux de L qui répondent à R
    traitement-animaux (A-->R, L2)
  finpourtoute
 }

Voilà, c'est mieux.

@++








Une autruche ne se cuit pas aux petits lardons.
lundi 7 mai 2007 à 15:04:57 | Re : Construction d'un arbre à partir d'un fichier

psgkiki

Merci pour ton aide. Mais peux tu me dire comment créer un liste chaînée contenant les données d'un fichier.

Exemple :

Dans mon fichier, j'ai :

Q1(Quel est sa couleur ?)
Q2(Combien de pattes ?)
Q3(A-t-il des moustaches ?)

Comment faire pour construire une liste chaînée avec ces questions ?

Voila ma structure:
typedef struct question_s
{
    int num;
    char question[70];
    question *suiv;
}question;

Merci




lundi 7 mai 2007 à 18:57:10 | Re : Construction d'un arbre à partir d'un fichier

emmatopiak

Salut,

Oui tu peux faire une liste chaînée comme ça :

typedef struct reponse {
  char reponse[10];
  struct noeud * noeud;
  struct question * next;
} question;

Car attention c'est les réponses qu'il faut chaîner dans chaque noeud de l'arbre
Un noeud de l'arbre a une seule question mais une liste de réponse
Puis après il faut trouver le noeud correspondant à la réponse donnée de la manière suivante:

struct noeud * trouverNoeudFils(struct noeud * pere, char * reponse) {
  struct reponse * r;
 r = pere->reponses;
  int trouve = 0;
while ((!trouve) && (r!=NULL)) {
  if (strcmp(r->reponse, reponse)==0) {
   return r->noeud;
 }
 } // fin du while
  return NULL; // aucun noeud correspondant
}
 (tu as pas besoin de la variable trouve)
oops attend j'ai fait erreur dans la structure du debut
Donc oui faut bien mettre "reponse" partout, pas "question"
Sinon oui, c'est bien aussi d'avoir une liste de questions pour pouvoir stocker l'ordre.

@++



Une autruche ne se cuit pas aux petits lardons.


Cette discussion est classée dans : fichier, réponse, arbre, question, animal


Répondre à ce message

Sujets en rapport avec ce message

QUESTION ya T IL UN AUTRE MOYEN EN RESEAU ? [ par bily ] Vegeta :-)comment faire pour envoyer un fichier par programme ??je programme en c++builder et j'utilise les socketsG 1 IDEE mais est ce la BONNE ?Li créer un arbre à partir d'un fichier word [ par yeager ] Bonjour je suis nouveau et débutant en langage CJe souhaite pouvoir lire un fichier word comportant des informations sur plusieurs livres. A partir de Ouverture d'un fichier en C++(question) [ par benji86446 ] J'ai programmé un éditeur de texte, et je voudrais savoir comment faire pour que lorsque on déplace un fichier texte vers l'executable, cela soit égal question sur ecriture ds un fichier [ par Battousai ] salut tout le monde,je suis nouveau ici et ceci est mon premier message :)ma question est sur les fichier, eneffet j'aimerait savoir si je peut ecrire Question sur l'API Win32 [ par NikoGJ ] Bonjour Ca fait déjà un moment que je cherche la réponse à cette question, mais je n'ai pour l'instant pas eu de réponse précise J'ai Application de questionnaires [ par jpcoffe ] Je souhaite développer une application permettant de répondre à un questionnaire sous forme de QCM. Le questionnaire doit pouvoir contenir un très gra remplissage d'un std::list [ par boun85 ] Voila mon probleme est assez simple je pense mais je n'arrive pas a le resoudre. Voila j'ai une fonction qui lit un fichier et qui rempli une std::lis question sur fopen() [ par juki_webmaster ] Bonjour, Je me suis interesser a la securité d'un de mes programmes utilisant les sockets. Je doit ouvrir un fichier de cette maniere : FILE *fichie Question pour les cracks !! [ par spiky31 ] Bonjour J'ai une question difficile a mon avis mais je vais quand meme essayer : Quand je lit le header d'un fichier mp3 pour connaitre son bitrate inserer dans un arbre tous les mots d'un fichier [ par the godfather ] bonjour j'ai créé un dico en forme d'arbre composé de noeuds. chaque noeuds possède un char et deux pointeurs mais comment il est fait n'est pas imort


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,686 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales