Besoin d'aide en c++: le pendu

Fermé
aloush - 1 oct. 2008 à 03:25
 Surfing' bot !! - 1 oct. 2008 à 23:09
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++;

}

18 réponses

Rollin'babe !!
1 oct. 2008 à 11:36
Ç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
Rollin'babe !!
1 oct. 2008 à 11:01
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
Rollin'babe !!
1 oct. 2008 à 13:09
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
jihelge Messages postés 71 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 4 octobre 2008 7
1 oct. 2008 à 13:40
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
Rollin'babe !! > jihelge Messages postés 71 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 4 octobre 2008
1 oct. 2008 à 14:03
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
Rollin'babe !!
1 oct. 2008 à 19:24
SEVEN UP !!

aloush !!... une chtite grippe ??...
0
jihelge Messages postés 71 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 4 octobre 2008 7
1 oct. 2008 à 20:13
un peu en forme en cette soirée à l'île de La Réunion qui te salut !!!
;-))
-1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Rollin'babe !!
1 oct. 2008 à 20:25
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
jihelge Messages postés 71 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 4 octobre 2008 7
1 oct. 2008 à 20:43
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
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
Rollin'babe !!
1 oct. 2008 à 20:52
Re,

Tu ne m'a toujours pas expliqué pourquoi tu utilises des tableaux bi-dimensionnels pour stocker tes
catégories.
0
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
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
jihelge Messages postés 71 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 4 octobre 2008 7
1 oct. 2008 à 21:07
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
jihelge Messages postés 71 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 4 octobre 2008 7
1 oct. 2008 à 21:24
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
jihelge Messages postés 71 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 4 octobre 2008 7
1 oct. 2008 à 21:31
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
jihelge Messages postés 71 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 4 octobre 2008 7 > jihelge Messages postés 71 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 4 octobre 2008
1 oct. 2008 à 21:36
juste une remarque aux webmasters et gestionnaires du site:
la programmation sans tabulation c'est illisible !!!!!!!! merci les modérateurs de faire remonter.
-1
Rollin'babe !! > jihelge Messages postés 71 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 4 octobre 2008
1 oct. 2008 à 21:47
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
Rollin'babe !!
1 oct. 2008 à 21:36
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
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
Rollin'babe !!
1 oct. 2008 à 21:53
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
jihelge Messages postés 71 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 4 octobre 2008 7 > Rollin'babe !!
1 oct. 2008 à 21:59
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
jojo > jihelge Messages postés 71 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 4 octobre 2008
1 oct. 2008 à 22:11
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
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
Rollin'babe !!
1 oct. 2008 à 22:14
Re,

C'est un détail ....on verras plus tard - structure déjà correctement ton code - stp.
(hé hé hé).
0
Rollin'babe !!
1 oct. 2008 à 22:27
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
jihelge Messages postés 71 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 4 octobre 2008 7
1 oct. 2008 à 22:34
Ok j'attends un instant mais pour moi il est déjà 00:32.

encore une heure max et le reste demain
-1
Rollin'babe !!
1 oct. 2008 à 22:49
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
jihelge Messages postés 71 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 4 octobre 2008 7
1 oct. 2008 à 23:00
Tu es sage très cher !

et je suis d'accord avec toi attendons.
-1
Surfing' bot !!
1 oct. 2008 à 23:09
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
jihelge Messages postés 71 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 4 octobre 2008 7
1 oct. 2008 à 12:48
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
jihelge Messages postés 71 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 4 octobre 2008 7
1 oct. 2008 à 14:13
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
Rollin'babe !!
1 oct. 2008 à 14:52
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
jihelge Messages postés 71 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 4 octobre 2008 7 > Rollin'babe !!
1 oct. 2008 à 15:00
Voire plus si on sait y faire ;o)

Ah C++ quand tu nous tiens !
-1
Rollin'babe !! > jihelge Messages postés 71 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 4 octobre 2008
1 oct. 2008 à 15:56
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
jihelge Messages postés 71 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 4 octobre 2008 7 > Rollin'babe !!
1 oct. 2008 à 19:59
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
jihelge Messages postés 71 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 4 octobre 2008 7
1 oct. 2008 à 20:54
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
jihelge Messages postés 71 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 4 octobre 2008 7
1 oct. 2008 à 21:51
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