Besoin d'aide en c++: le pendu

aloush -  
 Surfing' bot !! -
Bonjour,
Voici l'enoncer:
Un jeu, nommé le pendu, consiste à deviner un mot en un certain nombre d'essais. Pour informatiser ce jeu nous avons besoin d'un tableau contenant les mots à deviner. Voici la stratégie que nous avons adoptée.

Les mots à deviner sont situés dans trois tableaux correspondant à des catégories. Les catégories sont: sports (tableau sports), musique (tableau musique) et pays (tableau pays). Chaque tableau contiendra entre 10.

Le programme demande la catégorie désirée. On détermine aléatoirement l’indice du tableau à l'aide de la fonction rand(). Le programme affiche un nombre de traits correspondant aux nombres de lettres du mot.

Le joueur doit deviner le mot que l'ordinateur a choisi. Pour ce faire, le joueur précise une lettre de l'alphabet. Chaque occurrence de la lettre est affichée à son emplacement dans le mot si le joueur a deviné la lettre. Si la lettre ne fait pas partie du mot, le joueur commet une faute et un message l'informe du verdict. Un joueur peut commettre un maximum de 5 fautes par mot. À la cinquième faute, il perd la partie et se fait "pendre". Le joueur peut préciser le caractère "*" indiquant qu'il a deviné le mot. L'ordinateur l'invite ensuite à proposer un mot. S'il s'agit du bon mot, le joueur gagne. Par contre, s'il ne s'agit pas du bon mot, le joueur perd aussitôt la partie. Lorsque le joueur trouve le mot, c'est-à-dire qu'il a deviné toutes les lettres du mot sans commettre 5 fautes, un message de félicitations lui est adressé. Le jeu se poursuit tant que le joueur désire deviner un nouveau mot.

Une fois que le joueur ne désire plus deviner de mot (en tapant le ?), les statistiques suivantes sont affichées :
• le pourcentage de mots devinés par rapport au nombre de mots à deviner;

Pour les mots que le joueur a réussi à deviner:

• le plus grand nombre d’essais utilisés pour deviner un mot;
• le plus petit nombre d’essais utilisés pour deviner un mot;
• le nombre moyen d’essais utilisés pour deviner les mots.

N.B. La longueur maximale d'un mot est de 25 caractères.
Un essai correspond à entrer une lettre pour deviner le mot. Les caractères * et ? ne sont pas comptés comme un essai. Une faute correspond à un essai dont la lettre n’est pas dans le mot.

La fonction rand(), du fichier d’en-tête <stdlib.h>, retourne un entier compris entre 0 et 32767.
La fonction rand() nécessite un appel unique à la fonction srand() qui correspond à introduire un germe dans le générateur de nombre pseudo-aléatoire. La fonction srand() sollicite l’horloge de l’ordinateur, il faut donc ajouter l’inclusion du fichier <time.h>. Voici un bref exemple d’utilisation obtenu de l’aide de Visual C++.

Jusqu'a maintenant j'ai pus faire, mais sa donne tjrs des erreurs et je ne sais comment les corrigers:

/-------------------------------------------------------------------------------------/

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

using namespace std;

int choix_categorie(int);
void Sport();
void Musique();
void Pays();
void lettre_entrez(int);

int main()
{
int choix;
while (true)
{
choix_categorie(choix);
if(choix!=1 && choix!=2 && choix!=3 && choix!='?')
{
cout<<" Entrez une categorie valide ou faite le '?' pour quittez";
//getch();
cout<<endl;
}
if(choix=='?')
{break;}
switch(choix)
{
case 1:
{Sport();}
break;
case 2:
{Musique();}
break;
case 3:
{Pays();}
break;
}//end switch
}//end while
}//end main

void choix_categorie( int &choix)
{
cout<<" Veuillez choisir la categorie de votre choix: ";
cin>>choix;
cout<<endl;
cout<<"1. Sports";
cout<<"2. Musique";
cout<<"3. Pays";
cout<<" Faite le '?' Pour quittez. ";
cout<<endl;
}
/////////////////////////////////////////////////////////////
void Sport()
{
const char Sport[10][10]={{"ski"}, {"hockey"}, {"football"}, {"soccer"},
{"athlete"}, {"natation"}, {"basketball"}, {"ballon"},
{"cyclisme"}, {"sprint"}};

char char_deja_entree[26];
int temp=0, temp2=0, temp3=0;
int nb_essaie=5;
int invalide;
int essai=0;
int nblettre, nblettre2;
long int nomchoisi;
char lettre;

//Pour que le nombre soit bien aleatoire a chaque demarage de programme:
nomchoisi = ((rand()+time(NULL))%20);

while(true)
{
if(Sport[nomchoisi][temp]=='\0')
{
nblettre=temp;
break;
}
cout<<"-";
temp++;
}
while(true)
{
fflush(stdin);
cout<<" Il vous reste "<<nb_essaie<<" chance(s). ";
if (nb_essaie==0)
{cout<<" Vous avez perdu. "<<endl;
break;}

if (nblettre==0)
{cout<<" Vous avez gagne!!! "<<endl;
break;}

// Pour ne pas entrez +ieurs fois la meme lettre
while(true)
{
fflush(stdin);
cout<<" Entrez une lettre: ";
lettre_entrez(lettre);
cout<<" ";
invalide=0;
for (temp3=0;temp3<temp2;temp3++)
{
if(char_deja_entree[temp3]==lettre)
{ cout<<"\n Lettre deja entree. "<<endl;
invalide=1;
//getch();
break;
}
cout<<endl;
}
if(invalide==0)
{
char_deja_entree[temp2]=lettre;
}
break;
}
essai=25;
//une fois la lettre entrez il faut la comparer a tout les lttre du mots

for(temp=0;temp<25;temp++)
{
nblettre2=nblettre;
//si sa correspont a 1 lettre du mot:
cout<<" "<<lettre;
nblettre--;
}
if ((lettre==Sport[nomchoisi][temp])==1)
{cout<<" "<<lettre;
nblettre--;}
if ((lettre==Sport[nomchoisi][temp])==0)
{essai--;}
if((temp==24)&&(essai==0))
{essai--;}
}
temp2++;

}
/////////////////////////////////////////////////////////////
void Musique()
{
const char Musique[5][5]={{"traditionnelle"},{"savante"},{"occidentale"},{"classique"},
{"symphonie"}};

char char_deja_entree[26];
int temp=0, temp2=0, temp3=0;
int nb_essaie=5;
int invalide;
int essai=0;
int nblettre, nblettre2;
long int nomchoisi;
char lettre;

//Pour que le nombre soit bien aleatoire a chaque demarage de programme:
nomchoisi = ((rand()+time(NULL))%20);

while(true)
{
if(Musique[nomchoisi][temp]=='\0')
{
nblettre=temp;
break;
}
cout<<"-";
temp++;
}
while(true)
{
fflush(stdin);
cout<<" Il vous reste "<<nb_essaie<<" chance(s). ";
if (nb_essaie==0)
{cout<<" Vous avez perdu. "<<endl;
break;}

if (nblettre==0)
{cout<<" Vous avez gagne!!! "<<endl;
break;}

// Pour ne pas entrez +ieurs fois la meme lettre
while(true)
{
fflush(stdin);
cout<<" Entrez une lettre: ";
lettre_entrez(lettre);
cout<<" ";
invalide=0;
for (temp3=0;temp3<temp2;temp3++)
{
if(char_deja_entree[temp3]==lettre)
{ cout<<"\n Lettre deja entree. "<<endl;
invalide=1;
//getch();
break;
}
cout<<endl;
}
if(invalide==0)
{
char_deja_entree[temp2]=lettre;

}break;
}
essai=25;
//une fois la lettre entrez il faut la comparer a tout les lttre du mots

for(temp=0;temp<25;temp++)
{
nblettre2=nblettre;
//si sa correspont a 1 lettre du mot:
cout<<" "<<lettre;
nblettre--;
}
if ((lettre==Musique[nomchoisi][temp])==1)
{cout<<" "<<lettre;
nblettre--;}
if ((lettre==Musique[nomchoisi][temp])==0)
{essai--;}
if((temp==24)&&(essai==0))
{essai--;}
}
temp2++;
}

/////////////////////////////////////////////////////////////
void Pays()
{
const char Pays[10][10]={{"canada"},{"etats-unis"}, {"france"}, {"espagne"},
{"angleterre"}, {"liban"}, {"russie"}, {"allemagne"},
{"brazil"}, {"venezuela"}};

char char_deja_entree[26];
int temp=0, temp2=0, temp3=0;
int nb_essaie=5;
int invalide;
int essai=0;
int nblettre, nblettre2;
long int nomchoisi;
char lettre;

//Pour que le nombre soit bien aleatoire a chaque demarage de programme:
nomchoisi = ((rand()+time(NULL))%20);

while(true)
{
if(Pays[nomchoisi][temp]=='\0')
{
nblettre=temp;
break;
}
cout<<"-";
temp++;
}
while(true)
{
fflush(stdin);
cout<<" Il vous reste "<<nb_essaie<<" chance(s). ";
if (nb_essaie==0)
{cout<<" Vous avez perdu. "<<endl;
break;}

if (nblettre==0)
{cout<<" Vous avez gagne!!! "<<endl;
break;}

// Pour ne pas entrez +ieurs fois la meme lettre
while(true)
{
fflush(stdin);
cout<<" Entrez une lettre: ";
lettre_entrez(lettre);
cout<<" ";
invalide=0;
for (temp3=0;temp3<temp2;temp3++)
{
if(char_deja_entree[temp3]==lettre)
{ cout<<"\n Lettre deja entree. "<<endl;
invalide=1;
//getch();
break;
}
cout<<endl;
}
if(invalide==0)
{
char_deja_entree[temp2]=lettre;

}break;
}
essai=25;
//une fois la lettre entrez il faut la comparer a tout les lttre du mots

for(temp=0;temp<25;temp++)
{
nblettre2=nblettre;
//si sa correspont a 1 lettre du mot:
cout<<" "<<lettre;
nblettre--;
}
if ((lettre==Pays[nomchoisi][temp])==1)
{cout<<" "<<lettre;
nblettre--;}
if ((lettre==Pays[nomchoisi][temp])==0)
{essai--;}
if((temp==24)&&(essai==0))
{essai--;}
}
temp2++;

}
Configuration: Windows Vista
Firefox 3.0.3

18 réponses

Résumé de la discussion

Des difficultés apparaissent dans l’implémentation d’un pendu en C/C++ utilisant trois tableaux de mots classés par catégories (Sports, Musique, Pays) et impliquant des erreurs d’initialisation et d’indexation. Les remarques pointent une initialisation incorrecte de Sport[10][10], des éventuels dépassements d’indices et la nécessité d’un seul appel à srand(time(NULL)) afin que rand() produise des indices valides. Des suggestions convergent vers l’usage d’une chaîne par mot stockée dans des tableaux simples ou en std::string, la longueur calculée avec strlen et une gestion dimensionnelle correcte pour éviter les débordements. En pratique, plusieurs répondants préconisent de simplifier avec un tableau de mots unidimensionnel ou des vecteurs, et d’éviter les colonnes fixes lorsque la longueur des mots dépasse la limite maximale.

Bobot (l'IA à votre service)
  1. Rollin'babe !!
     
    Ça devient fatiguant chers admins...

    Bonjour,

    Voici quelques remarques sur votre gestion des tableaux qui peut générer des plantages :

    - Exemple avec Sport() :

    "const char Sport[10][10]={{"ski"}, {"hockey"}, {"football"}, {"soccer"},
    {"athlete"}, {"natation"}, {"basketball"}, {"ballon"},
    {"cyclisme"}, {"sprint"}}; "

    -> mauvaise initialisation du tableau comportant 100 entrées.
    -> Question : avez vous besoin d'un tableau à 2 dimensions ?.

    "nomchoisi = ((rand()+time(NULL))%20); "

    -> Êtes vous sur que nomchoisi est bien compris dans l'intervalle [1,10] ainsi ?.

    "while(true)
    {
    if(Sport[nomchoisi][temp]=='\0')
    {
    nblettre=temp;
    break;
    }
    cout<<"-";
    temp++;
    } "

    --> Vous ne gérez pas le dépassement de dimension du tableau via temp.

    Salutation.
    1
  2. Rollin'babe !!
     
    Bonjour,

    Je n'ai pas tout lu mais je me permet ces premières remarques si vous voulez bien au niveau de votre gestion de tableaux :

    - fonction Sport() :

    "const char Sport[10][10]={{"ski"}, {"hockey"}, {"football"}, {"soccer"},
    {"athlete"}, {"natation"}, {"basketball"}, {"ballon"},
    {"cyclisme"}, {"sprint"}};"

    --> Initialisation incorrecte d'un tableau bi-dimensionnel comportant 100 entrées : l'initialisation n'est faite que sur une colonne (ou une ligne - je ne m'en souviens plus).
    -> Question : avez vous vraiment besoin d'un tableau à 2 dimensions ?.

    "nomchoisi = ((rand()+time(NULL))%20);"

    -> Êtes vous sur que nomchoisi est bien compris dans [1,10] ?.

    "while(true)
    {
    if(Sport[nomchoisi][temp]=='\0')
    {
    nblettre=temp;
    break;
    }
    cout<<"-";
    temp++;
    } "

    -> Bien penser à gérer correctement temp pour eviter un dépassement de dimension du tableau.

    Amicalement.
    0
  3. Rollin'babe !!
     
    Mon cher jihelge,

    Avez vous compris cette section du code ? :

    - Comment diantre fait il pour déterminer par cette procédure le nombre de lettres d'un mot stocké dans le tableau ? (si c'est bien ca).

    "while(true)
    {
    if(Sport[nomchoisi][temp]=='\0')
    {
    nblettre=temp;
    break;
    }
    cout<<"-";
    temp++;
    } "

    Merci !.
    0
    1. jihelge Messages postés 75 Statut Membre 7
       
      while(true)
      {
      if(Sport[nomchoisi][temp]=='\0')
      {
      nblettre=temp;
      break;
      }
      cout<<"-";
      temp++;
      }
      Je suppose temp égal à zéro avant le while (mais mon dieu que cette forme de programmation est cochonne, n'y a-t-il plus de prof d'algo ?)
      il boucle sur temp++; et avant il teste si le caract de rang temp est la marque de fin de chaine
      si oui il affecte temp à nblettre et force la sortie de la boucle while(true) (quelle horeur).

      on peut réécrire ce morceau ainsi :

      nblettre = 0;
      while( Sport[nomchoisi][nblettre]!='\0') nblettre++;

      voilà tout

      Personellement j'aurais fait :

      nblettre = strlen(&Sport[nomchoisi]);

      simplement
      -1
      1. Rollin'babe !! > jihelge Messages postés 75 Statut Membre
         
        Mici,

        nblettre = strlen(&Sport[nomchoisi]);

        Ca m'a l'air en effet un peu plus cohérent pour calculer la longueur d'une chaine de caractères stockée dans un tableau (:>)...
        M'disais ben ... j'en perdais mon latin ou alors je n'ai rien compris sur les subtilités des tableaux en C++.
        ___________________________________________________________________________________________________
        "Ouais mec - après ma mort avant de r'joindre l'Ancien chuis allé faire un chti tour à la "foire du slip"
        ... une vrai bande de mariolles dis donc - ca fait pitié - chuis r'monté vite fait ben fait :>" (Jésus Christ).
        0
  4. Rollin'babe !!
     
    SEVEN UP !!

    aloush !!... une chtite grippe ??...
    0
    1. jihelge Messages postés 75 Statut Membre 7
       
      un peu en forme en cette soirée à l'île de La Réunion qui te salut !!!
      ;-))
      -1
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Rollin'babe !!
     
    Bah,

    Tant que tu parles pas créole .... (hé hé).
    Nan j'ai lancé un SEVEN UP !! au gars qui a lancé ce topic et qui ne s'est toujours pas manifesté ..
    0
    1. jihelge Messages postés 75 Statut Membre 7
       
      Il avait un TP en retard il a pondu un truc et demain il viendra chercher le résultat de la battaille ?

      :-))

      AAAAAAAAAAAAhhhhhhhhhhhh O tempora, O mores !
      -1
  7. aloush
     
    Bonjours,
    desole pour le retard, premierement j'habite montreal (canada). lorsque vous avez commencer a repondre j'etais en plein mon sommeil, et j'avais un cours durant le matin.
    Voici ce que j'ai refais jusqua maintenat..je suis tjrs entrain de travailler dessus pour l'ameliorer.

    #include <iostream>
    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>

    using namespace std;
    char ecriture_du_fichier(int choix)
    {
    ofstream fichier("categorie.txt"), ios::out|ios::trunc); //ouverture en ecriture
    //et effacement du fichier ouvert
    if(fichier)
    {

    if(choix==1)//sport
    {
    unsigned char Sport[1][10]={{"ski"}, {"hockey"}, {"football"}, {"soccer"},
    {"athlete"}, {"natation"}, {"basketball"}, {"ballon"},
    {"cyclisme"}, {"sprint"}};
    fichier.write((char*) Sport, sizeof(char));
    }
    if(choix==2)//musique
    {
    unsigned char Musique[1][5]={{"traditionnelle"},{"savante"},{"occidentale"},{"classique"},
    {"symphonie"}};
    fichier.write((char*) Musique, sizeof(char));
    }
    if(choix==3)//pays
    {
    unsigned char Pays[10][10]={{"canada"},{"etats-unis"}, {"france"}, {"espagne"},
    {"angleterre"}, {"liban"}, {"russie"}, {"allemagne"},
    {"brazil"}, {"venezuela"}};
    fichier.write((char*) Pays, sizeof(char));
    }

    }
    else cout<<"Impossible d'ouvrier le fichier!"<<endl;
    fichier.close()
    return 0;
    }//end ecriture du fichier

    char categorie(int choix)
    {
    do{
    if(choix==1)//sport
    {

    }
    if(choix==2)//musique
    {}
    if(choix==3)//pays
    {}
    }while(choix!='?');
    }

    int verifier (char categorie(), char test[], char lettre)
    {
    int i, verifier=0;

    for(i=0; i<strlen(categorie());j++)
    {
    if(categorie[i]==lettre)
    {test[i]==lettre;
    verifier=1;
    }
    }
    return verifier;
    }//end verifier

    int gagne(char test[], int Long)
    {
    int j=0, verifier=1;
    while ((verifier==1) && (j<Long))
    {
    if (test[j]=='-')
    {
    verifier=0;
    j=j+1;
    }
    return verifier;
    }//end gagne

    MERCI
    0
    1. Rollin'babe !!
       
      Re,

      Tu ne m'a toujours pas expliqué pourquoi tu utilises des tableaux bi-dimensionnels pour stocker tes
      catégories.
      0
  8. aloush
     
    je ne sais plus comment vraiment continuer et mettre ensemble se problems (entre ce que j'ai fait en premier et se que jai pu corriger et ajouter), j'aurais besion un peut d'aide si cela est possible, merci d'avance.
    0
  9. aloush
     
    Pour les tableaux bi-dimensionnel, lorsque j'ai fait un peut de recherche sur internet, j'ai trouver un porbleme concernant le pendu, et il utiliser les tableaux. je ne sais pas vraiment comment creer les tableaux et les mettres dans un fichier. C'est ce que j'ai compris d'apres l'enoncer.
    0
    1. jihelge Messages postés 75 Statut Membre 7
       
      Bon,

      met un peu d'ordre dans ta tête:

      tu as trois catégories de mots : A,B,C
      A[0..N] contient N mots au plus idem B et C
      règle du jeu :
      pour toute une partie
      je choisi une catégorie,
      on tire un mot au hasard
      tantque pas cinq fautes ou réussit
      lire une lettre et la comparer
      Voilà tu as l'algorithme
      chaque mot clé représente une fonction essentielle.
      tu aura aussi besoin de transmettre des données aux fonctions et qu'elles te retournent un résultat quand cela est utile
      et quelques variables globale.
      Le jeu c'est le main()

      Voilà très cher et lointain cousin
      maintenant ce n'est qu'une question de langage c'est-à-dire rien.
      -1
    2. jihelge Messages postés 75 Statut Membre 7
       
      Un tableau est une suite d'objets du type faisant une succession d'octets organisé selon le schéma :
      !---------!-----------!----------!
      chaque intervalle correspondant à un objet l'un derrière l'autre.
      En bi dimensionnel :
      le premier [] designe le nombre d'objets si il n'y a qu'une ligne en revanche le nombre d'objet de la dimension suivante:
      ainsi
      char T[10][100]
      représente un tableau bi dimensionnel de 10 lignes de 100 caractères.

      on peut faire un tri ou quadri etc… dimensionnel !!!!

      Se des objets du type de base. J'airais pu le faire avec une "struct" ou un objet d'une classe.
      du genre : {string: mot; bolean : utilsé } pour indiquer un mot déjà utilisé dans la partie.

      L'adresse d'une dimension peut être obtenu simplement par invocation de son nom ou adresse:

      soit:
      char sport[10][100]=…..

      char *toto;
      toto = sport affecte à toto l'adresse correspondant à &sport[0][0]
      toto = sport[12] affecte à toto l'acresse &sport[12][0]

      si
      char tutu;
      tutu= sport affect à tutu le contenu de sport[0][0];
      de même
      toto = sport[12]
      toto = sport[12][5] le contenu de la ciquième lettre du 12ème mot.

      Voila
      cela répond t il a quelques unes de tes questions ?
      -1
    3. jihelge Messages postés 75 Statut Membre 7
       
      dans le cas du pendu pourquoi sauvegarder les mots dans un fichier ???

      Il me semble que tu as mal lu l'énoncé et qu'il s'agit plutot charger à partir d'un fichier ?
      -1
      1. jihelge Messages postés 75 Statut Membre 7 > jihelge Messages postés 75 Statut Membre
         
        juste une remarque aux webmasters et gestionnaires du site:
        la programmation sans tabulation c'est illisible !!!!!!!! merci les modérateurs de faire remonter.
        -1
      2. Rollin'babe !! > jihelge Messages postés 75 Statut Membre
         
        Re,

        1-

        Ouaip - t'avais parler de récupérer le tableau à partir d'un fichier je crois dans un vieux POST.
        --> notre ami a fait une petite confusion.
        Dans tous les cas : c'est vraiment un détail (:<)....

        2-

        On a pas la même notion de tableaux - je crois que vous vous trompez tous les deux :

        A[10][10] représente un tableau bi-dimensionnel comportant en tout 100 entrées.
        ->le premier [10] ce sont les colonnes.
        -> le second [10] ce sont les lignes.

        Dans tous les cas : un tableau mono-dimensionnel suffira ici.

        Exemples d'initialisation correctes de tableaux :

        A[10] = {"1", "2", "3,.....,"10"}
        A[2][2] = { {"1", "2"}, {"3", "4"} }

        A+.
        0
  10. Rollin'babe !!
     
    Re,

    J'ajoute des commentaires aux infos. de mon collègue :

    tu as trois catégories de mots : A,B,C
    A[0..N] contient N mots au plus idem B et C
    -> Soient trois tableaux de type A[10], B[10] et C[10]
    -> une seule dimension est suffisante pour ranger tes mots dans chaque catégorie
    (un tableau bi-dimensionnel c'est du type A[10][10] mais ca ne sert à rien ici..).

    règle du jeu :

    - pour toute une partie (boucle 1)
    - je choisi une catégorie,
    --> Donc là tu sélectionnes le tableau ad hoc ( A, B ou C).
    - on tire un mot au hasard
    --> avec un index aléatoire j (type random machin ce que tu veux on s'en fout pour l'instant)
    --> tu choisis donc soit A[j], soit B[j] soit C[j] selon le cas.
    - tant que pas cinq fautes ou réussit (boucle 2)
    - lire une lettre à la position i et la comparer
    --> la lettre entrée à la ième position doit être == à la lettre en ième position du mot de A[j], B[j] ou C[j]
    - fin boucle 2
    - fin boucle 1
    0
  11. aloush
     
    Si c'est charger a partir du fichier, alors il faut seulemt ouvrir et lire ligne par ligne?
    et si c'est cela il faut creer les fichier de type txt comme suite:
    1. natation
    2. soccer
    3. ...ainsi de suite?
    pour repondre a jhelge, oui j'ai compris et merci;
    alors il faut faire sport[10] par exemple?
    c'esst ce que j'ai fait dernierement:

    #include <iostream>
    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>

    using namespace std;

    void choix_categorie(int);
    void verifier(char, char, char);
    void fonction();
    void ecriture_du_fichier(int);

    //----------------------------MAIN---------------------------------------------
    int main()
    {
    do{
    choix_categorie(choix);
    ecriture_du_fichier(choix);
    verifier(choix, choix)//je ne sais quoi mettre ici???
    fonction();

    }while(choix!='?');

    }//end main
    //---------------------------CHOIX CATEGORIE----------------------------------
    void choix_categorie( int &choix)
    {
    cout<<" Veuillez choisir la categorie de votre choix: ";
    cout<<endl;
    cout<<"1. Sports";
    cout<<"2. Musique";
    cout<<"3. Pays";
    cout<<" Faite le '?' Pour quittez. ";
    cout<<endl;
    cout<<"Votre choix? ";
    cin>>choix;
    }//END CHOIX CATEGORI

    //---------------------------ECRITURE DU FICHIER-------------------------------
    char ecriture_du_fichier(int choix)
    {
    ofstream fichier("categorie.txt"), ios::out|ios::trunc); //ouverture en ecriture
    //et effacement du fichier ouvert
    if(fichier)
    {

    if(choix==1)//sport
    {
    unsigned char Sport[1][10]={{"ski"}, {"hockey"}, {"football"}, {"soccer"},
    {"athlete"}, {"natation"}, {"basketball"}, {"ballon"},
    {"cyclisme"}, {"sprint"}};
    fichier.write((char*) Sport, sizeof(char));

    }
    if(choix==2)//musique
    {
    unsigned char Musique[1][5]={{"traditionnelle"},{"savante"},{"occidentale"},{"classique"},
    {"symphonie"}};
    fichier.write((char*) Musique, sizeof(char));
    }
    if(choix==3)//pays
    {
    unsigned char Pays[1][10]={{"canada"},{"etats-unis"}, {"france"}, {"espagne"},
    {"angleterre"}, {"liban"}, {"russie"}, {"allemagne"},
    {"brazil"}, {"venezuela"}};
    fichier.write((char*) Pays, sizeof(char));
    }

    }
    else cout<<"Impossible d'ouvrier le fichier!"<<endl;
    fichier.close()
    return 0;
    }//end ecriture du fichier

    //---------------------------VERIFICATION------------------------------------------

    int verifier (char categorie(), char test[], char lettre)
    {
    int i, verifier=0;

    for(i=0; i<strlen(categorie());j++)
    {
    if(categorie[i]==lettre)
    {test[i]==lettre;
    verifier=1;
    }
    }
    return verifier;
    }//end verifier

    //----------------------------------FONCTION---------------------------------------

    int fonction()
    {
    nblettre = 0;
    while( Sport[nomchoisi][nblettre]!='\0')
    {
    nblettre++;
    }

    while(true)
    {
    fflush(stdin);
    cout<<" Il vous reste "<<nb_essaie<<" chance(s). ";
    if (nb_essaie==0)
    {cout<<" Vous avez perdu. "<<endl;
    break;}

    if (nblettre==0)
    {cout<<" Vous avez gagne!!! "<<endl;
    break;}

    // Pour ne pas entrez +ieurs fois la meme lettre
    while(true)
    {
    fflush(stdin);
    cout<<" Entrez une lettre: ";
    lettre_entrez(lettre);
    cout<<" ";
    invalide=0;
    for (temp3=0;temp3<temp2;temp3++)
    {
    if(char_deja_entree[temp3]==lettre)
    { cout<<"\n Lettre deja entree. "<<endl;
    invalide=1;

    break;
    }
    cout<<endl;
    }
    if(invalide==0)
    {
    char_deja_entree[temp2]=lettre;
    }
    break;
    }
    }//end fonction
    0
    1. Rollin'babe !!
       
      Re,

      Je le remet - on sait jamais :

      On a pas la même notion de tableaux - je crois que vous vous trompez tous les deux :

      A[10][10] représente un tableau bi-dimensionnel comportant en tout 100 entrées.
      ->le premier [10] ce sont les colonnes.
      -> le second [10] ce sont les lignes et pas la ième position de la lettre du mot.

      Dans tous les cas : un tableau mono-dimensionnel suffira ici.

      Exemples d'initialisation correctes de tableaux :

      A[10] = {"1", "2", "3,.....,"10"}
      A[2][2] = { {"1", "2"}, {"3", "4"} }

      A+.
      0
      1. jihelge Messages postés 75 Statut Membre 7 > Rollin'babe !!
         
        On est bien d'accord Rollin'Babe
        mais ce que tu décris
        A[2][2] = { {"1", "2"}, {"3", "4"} }
        te donnera sur le plan sémentique
        en fait un tableau d'adresses sur "1","2"etc.

        car dans la grammaire
        "2" se traduit par '2' suivi de '\0'
        -1
      2. jojo > jihelge Messages postés 75 Statut Membre
         
        Hé hé hé,

        (t'arrêtes l'enfumage stp..)
        On va pas y arriver avec ce genre de théorie.

        un tableau bi-dimensionnel c'est une feuille Excel et pis c touuuuutt !!!!
        et pis la deuxième dim. du tableau permet ABSOLUMENT pas de calculer le caractère à une positon donnée .... !! (;>).
        0
  12. aloush
     
    il ya une chose que je ne comprend pas c'est:
    Le programme demande la catégorie désirée. On détermine aléatoirement l’indice du tableau à l'aide de la fonction rand(). Le programme affiche un nombre de traits correspondant aux nombres de lettres du mot.

    comment utiliser la fonction rand() ici?
    0
    1. Rollin'babe !!
       
      Re,

      C'est un détail ....on verras plus tard - structure déjà correctement ton code - stp.
      (hé hé hé).
      0
  13. Rollin'babe !!
     
    Bon,

    Peux tu repositionner tout ca stp ...

    aloush peut t'il faire une synthèse et re-proposer un code ?

    ________________________________________________________________________________________________
    "Ouais mec - après ma mort avant de r'joindre l'Ancien chuis allé faire comme ca un chtit tour
    au "Troquet des blaireaux"... c'est sale et le service est déplorable - ca fait pitié
    - chuis r'monté vite fait :> (Jésus Christ)"
    0
    1. jihelge Messages postés 75 Statut Membre 7
       
      Ok j'attends un instant mais pour moi il est déjà 00:32.

      encore une heure max et le reste demain
      -1
  14. Rollin'babe !!
     
    Ok,

    On attend la réponse de aloush pour qu'il nous propose un code correct - qu'il prenne son temps.

    Amicalement.
    _______________________________________________________________________________________________
    "Ouais mec - après ma mort avant de r'joindre l'Ancien chuis allé faire comme ca un chtit tour au "Parc Satanix"
    ... c'est un gars qui gère ca et il glande rien de la journée - ca fait pitié - chuis r'monté vite fait !! :> (Jésus Christ)"
    0
    1. jihelge Messages postés 75 Statut Membre 7
       
      Tu es sage très cher !

      et je suis d'accord avec toi attendons.
      -1
  15. Surfing' bot !!
     
    Re,

    Let's wait my dear.
    See you tomorrow.
    ________________________________________________________________________________________
    "Ouais mec - après ma mort avant de r'joindre l'Ancien chuis allé faire comme ca
    un chtit tour au "Parc Satanix"... c'est un gars qui gère ça, il s'fait du blé et
    il glande rien de la journée - ca fait pitié - chuis r'monté vite fait ben fait!! :> (Jésus Christ)"
    0
  16. jihelge Messages postés 75 Statut Membre 7
     
    Je suis d'accord avec rollin'babe c'est fatiguant messieurs de retaper le texte ---- !
    Maintenant j'écris sous word avant de répondre
    Un peu d'algorithmique !

    d'abord je voulais apporter une petite pierre qui est le chargement dynamique à partir d'un fichier
    int nbsport;
    int nbmusic;

    unsigned char sport[100][10]={};
    unsigned char music[100][10]={};

    ../...
    prototype et algo
    void remplir( char *table , charf *fichier int *nbmot);
    tantque non fin de fichier et pas max de mots possible
    lire une ligne, mettre la marque de fin de chaine à la place du "\n";
    mettre dans le tableau
    incrémenter le compteur de mot  (*nbmot)++

    …/…
    appels
    remplir (sport , "sport.txt", nbsport);
    remplir(music , "music.txt", nbmusic);

    etc.

    Autre chose : la notion de fonction est faite pour éviter de réécrire le code plusieurs fois
    (C++ est l'héritier du C évitez de vous en servir comme du BASIC)

    écrivez une fonction qui choisi un mot dans la table désirée
    unsigned char mot_choisi[10];
    ../…
    prototype
    void choisir_mot( char *table, char *mot, int *nbmot);
    cette fonction appelle la fonction de tirage aléatoire entre 0 et le nombre max de mot dans une table.

    appel
    choisir_mot( sport , mot_choisi , nbsport);
    …/…
    prototype
    int tirage( int nbmot);
    n'oubliez pas que rand retourne un ENTIER entre 0 et RAND_MAX donc si vous faites

    float toto;
    toto = rand()/RAND_MAX
    toto est entre 0 et 1 reste plus qu'à faire le petit réajustement en multipliant par le nombre max et en prenant la partie entière ou un arrondi (je vous conseille l'arrondi à 2 décimales).

    N'oubliez pas au démarrage de l'application de faire un srand pour initialiser le seed de la suite numérique (mais une seule fois).
    je n'ai pas compris votre rand()+time(NULL)%20 mais je ne pense pas que ça vous retourne ce que vous attendez.

    écrivez une fonction qui lit une lettre au clavier
    une qui compare à la chaine contenu dans le mot

    mettez le tout dans un bloc qui tourne pour la durée de la partie,
    vous avez écrit 3 fois le même code ne pensez vous pas qu'une forme algorithmique du genre serait préférable :
    remplir la table de sport
    remplir la table de musique
    remplir la table de géographie,
    initialiser les scores et variables diverses

    while(partie_on)
    {
    ? quel catégorie souhaitez vous (1:sport, 2:music, 3:géographie)
    entrez un choix
    selon choix
    cas de sport
    choisir un mot dans la table sport
    cas de musique
    choisir un mot dans la table musique
    cas de géographie
    choisir un mot dans la table géographie

    tantque pas trouvé et pas perdu
    lire une lettre
    scanner le mot_choisi
    évaluer si gagné ou pas
    }
    fin de partie
    faire les statistiques

    voilà à bientôt
    -1
  17. jihelge Messages postés 75 Statut Membre 7
     
    le C++ n'a rien changé à la structure du langage qui est toujours du C.

    Avant C++ on en faisait en mettant des pointeurs de fonctions dans des struc pour les méthode et des items pour les attributs.

    La nouveauté du C++ c'est l'héritage et un stdio un peu différent mais l'ancien est toujours accessible.
    Rien n'empêche de compiler un de mes bon vieux code des années 78-80 avec un compilo C++

    :-))

    tout en dessous il y a toujours des bits et fonctions logiques !!!!!!!!!
    -1
    1. Rollin'babe !!
       
      Mais oui bien sur !!!!!!...

      Et vice-versa c'est évident !!!!.

      (:>)

      et ca permet même de faire le café et de calculer l'age du Capitaine le C++ si on veut.
      0
      1. jihelge Messages postés 75 Statut Membre 7 > Rollin'babe !!
         
        Voire plus si on sait y faire ;o)

        Ah C++ quand tu nous tiens !
        -1
      2. Rollin'babe !! > jihelge Messages postés 75 Statut Membre
         
        Et oui!!

        Puis y a un truc qu'on traite vachement peu : c'est la relation entre C++ et la "durée de vie des gastéropodes" !!.

        Regarde ca ben diou !! :

        "La durée de vie des escargots varie selon les espèces. Dans la nature, les Achatinidae vivent de cinq à sept ans alors que les Helix dépassent rarement l'âge de trois ans. Leur mort est souvent due à des prédateurs ou à des parasites.
        En captivité, leur longévité est bien plus longue et va de dix à quinze ans pour la plupart des espèces. Certains escargots ont vécu plus de trente ans."

        C'est fou non ?.
        (:>).
        _______________________________________________________________________________________________
        "Ma mère s'appelait Gwendoline... elle est morte de chagrin parc'que mon père est allé boire
        à la taverne des Duchenot et qui l'est mort crevé !! dans l'étang gelé à cause de son pied bo!!..".
        0
      3. jihelge Messages postés 75 Statut Membre 7 > Rollin'babe !!
         
        yeaaah!
        Et si C++ c'était dieu réincarné dans la machine.
        Son ame, son inscription !!
        la manifestation virtuelle de la force dans les circuits du web.
        Action Script, php, java, javascript et tant d'autres sont apparentés !!!!

        Dieu eST LAAAAAAAA!

        TCPIP est à l'origine un fils de Unix lui même écris en C.......!

        Tremblez mes frères, je brandits devant vous la lumière.

        C est TOUT

        TOUT est C.


        <!----// je crois qu'on fume les mêmes choses !!!! :o)) ---->
        -1
  18. jihelge Messages postés 75 Statut Membre 7
     
    Bon !
    Je comprends mieux !!

    Salut La Belle Province; tu te lève, je me couche.

    Tu as bien fais un effort de séparation fonctionnel, ais où fais tu appel à tes fonctions ?

    J'ai un peu de temps demain, je vais veiller un pour toi.

    De toute façon je bosse sur un autre truc en même temps.

    Aller dis nous tout on t'écoute car ton code est pas clair du tout.
    -1
  19. jihelge Messages postés 75 Statut Membre 7
     
    Moi j'ai un petit problème d'ADSL car notre cable "SAFE" est un peu saturé en Océan Indien et j'ai quelques fois du retard.
    Veuillez m'en excuser.

    1 lire les fichers
    je t'en parle dans le post N° 3

    Un fichier texte contenant un mot par ligne
    est lu et copié dans les tableaux (si cela est ton désir)

    Moi j'aurais bien aimé
    une classe ou une structure
    contenant deux items:
    un string (char mot[10])
    un bolean (utilisé)

    tant qu'on y est, tu es où Rollin'babe?
    -1