J'ai essayer de faire le Tp : le mot mystere mais j'ai rencontré un problème.
Déjà je n'ai pas fait exactement ce qui était demander dans le Tp car je ne sais pas
encore comment le faire, mais j'ai essayé une approche voici ce que j'ai codé :
#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>
#include <fstream>
using namespace std;
string melangerLettres(string mot)
{
string melange;
int position(0);
//Tant qu'on n'a pas extrait toutes les lettres du mot
while (mot.size() != 0)
{
//On choisit un numéro de lettre au hasard dans le mot
position = rand() % mot.size();
//On ajoute la lettre dans le mot mélangé
melange += mot[position];
//On retire cette lettre du mot mystère
//Pour ne pas la prendre une deuxième fois
mot.erase(position, 1);
}
return melange;
}
int main()
{
string Reponse,dicoMelange,motMystere;
int essai = 0;
int essais = 5;
float score = 0.0;
std::ifstream fichier ("c:/Users/User/Documents/c++/dictionnaire.txt");
//Initialisation des nombres aléatoires
srand(time(0));
do
{
//Pioche un mot dans un fichier dictionnaire.
std::cout <<std::endl;
std::cout <<"Piocher dans un fichier le mot mystere."<<std::endl;
std::cout <<std::endl;
std::string ligne;
getline(fichier,ligne);
dicoMelange = melangerLettres(ligne);
do
{
cout << endl << "Quel est ce mot ? " << dicoMelange << endl;
cin >> motMystere;
if (ligne == motMystere)
{
cout << "Bravo !" << endl;
}
else
{
essai ++;
essais --;
cout << "Ce n'est pas le mot !" << endl;
cout <<"Il vous reste : " << essais <<std::endl;
}
}while (ligne != motMystere && essai != 5 && essais != 0);
if (essais == 0)
{
std::cout <<"Le mot Mystere est :" << ligne <<std::endl;
}
//Score du joueur
score =(5-essai) * 100/5;
std::cout <<"Votre score est de : " << score <<"%" << std::endl<<std::endl;
//On demande au joueur si il veux rejouer.
std::cout <<"Voulez vous rejouer , Oui ou Non ? " <<std::endl;
std::cin >> Reponse;
//On réinitialise essai à 0.
essai = 0;
essais = 5;
}while (Reponse != "Non" && Reponse != "N" && Reponse != "n" && Reponse != "NON" && Reponse != "No" && Reponse != "NO");
return 0;
}
Le programme fonctionne à une chose près. quand je relance le programme pour qu'il rejoue la partie il descend dans la liste des mots dans le
fichier mais à la troisième lignes, le troisième mot contenu dans mon fichier bug, il met un espace quand il mélange le mot et quand je lui introduit le
mot qui est Mystere dans mon fichier il ne le prend pas il détecte cela comme étant une erreur. Donc impossible d'introduire Le troisième mot de
mon fichier. J'ai essayé plusieurs choses mais cela ne fonctionne pas non plus. (j'ai essayé en me déplacent dans le fichier avec les fonctionnalités
seekg() et tellg() pour connaître la position mais il me donne des résultats étrange).
Pouvez vous me dire ou est le problème svp car je ne trouve pas du tout le soucis , pour moi il devrait fonctionner surtout que toute la liste des mots de
mon fichier qui contient au total 10 mots s'affiche sans problème mise à part le troisième mots.
Voila je vous remercie de m'avoir lut et vous remercie d'avance pour votre aide.
Le probleme est que tu ne test pas la lecture de ton fichier (lecture ok ? fin de fichier atteinte ect ....).
Fais-toi une fleur, et commence par charger tout ton fichier dans un tableau (std::vector), ca t'évitera de te trimbaler le fichier tout le long de ton programme, et la gestion n'en sera que plus simple.
S'il fait moins de 10 essais, ça ne devrait pas poser de problème. Il faudrait voir dans le fichier s'il y a un espace ou pas pour le 3ième mot. Je n'ai pas compris la logique d'avoir 2 variables pour les essais. D'ailleurs, elles devraient être initialisées juste après la lecture. On pourrait tester en lisant simplement les lignes et en les affichant précédées d'un apostrophe ou d'un astérisque: std::cout << "*" << ligne << "*" << std::endl;
Le Tout est souvent plus grand que la somme de ses parties.
!!! Ne Pas Répondre au code car le problème est résolu après recherche sur internet merci.
Bonsoir Ok merci à vous deux, j'ai encore un peu de difficulté avec les vectors je ne comprends pas encore comment bien mettre cela en application c'est pour cela que j'ai décidé de revoir les débuts du cours avant d'aller plus loin. d'ailleurs j'ai un autre problème en revoyant le cours mais au niveau des fonctions .. j'ai un message qui me dit canot convert double to double et je ne comprends pas ce que cela veux dire..
Voici le code en question , pouvez vous m'aider à comprendre cette erreur merci.
#include <iostream>
//Fonction qui calcule la moyenne des notes entrer dans le tableau.
double moyTabFonction(double tabNote[], int tailleTab)
{
double moyenne(0.0);
for (int i(0); i < tailleTab; i++)
{
std::cout <<"Voici la moyenne a partir d'une fonction :"<<std::endl;
moyenne += tabNote[i] / tailleTab;
}
return moyenne;
}
int main()
{
int const tailleTab(5);
double tabNote[tailleTab];
double moy(0.0);
std::cout <<"Veuillez introduire 5 notes dans le tableau."<<std::endl;
//Introduire les note dans le tableau;
for (int i(0); i < tailleTab; i++)
{
std::cout <<"Note " << i + 1 <<" : ";
std::cin >> tabNote[i];
}
std::cout <<std::endl;
//Affiche les note et calcule leurs moyenne.
for (int i(0); i < tailleTab; i++)
{
std::cout <<"Voici la note " << i + 1 <<" : " << tabNote[i] << std::endl;
moy += tabNote[i] / tailleTab;
}
std::cout << std::endl;
//Affiche la moyenne des notes
std::cout <<"Moyenne des notes : " << moy <<std::endl;
std::cout <<"Test a partir d'une fonction : " <<std::endl<<std::endl;
double resu(0.0);
//Affiche la moyenne à partir de la fonction
resu = moyTabFonction(tabNote[i], tailleTab);
return 0;
}
Et se faire balancer deux problèmes coup sur coup ... Dans le second problème, il y a un problème de conception bien avant de penser à le coder en C++ ou autre langage. Quand je dis "un", je dirais plutôt "plusieurs" Ce n'est pas comme ça que j'ai appris à faire des moyennes. Et si le code avait compilé, le PO aurait de belles surprises. «Pourquoi il m'affiche cette ligne tout le temps ...»
Le Tout est souvent plus grand que la somme de ses parties.
Le probleme est que tu ne test pas la lecture de ton fichier (lecture ok ? fin de fichier atteinte ect ....).
Fais-toi une fleur, et commence par charger tout ton fichier dans un tableau (std::vector), ca t'évitera de te trimbaler le fichier tout le long de ton programme, et la gestion n'en sera que plus simple.
Bonjour j'ai essayer de mettre le fichier dans un vector comme vous me l'avez conseiller. sauf que je n'arrive pas à faire fonctionner mon programme, j'ai bien réussi à mettre le fichier dans mon vecteur mais je n'arrive pas à piocher les mots par ordre aléatoire. et je n'arrive pas non plus à trouver le nom mystère j'ai essayer de trouver le mot mystère avec dicoMelange il le trouve si je lui met bien le même mot que dicoMelange mais du coup il prend seulement les lettre Mélangée... Je n'arrive pas à faire ce que je veux, pouvez vous m'aider svp merci.
Pour tous ceux qui vont me dire de recommencer à zéro sur zeste de savoir car OpenClassroom et obsolète je vous ait entendu, je vais m'y mettre mais avant je veux déjà réussir à coder avec ce que j'ai appris, j'ai été voir sur zeste de savoir j'ai vu quelques différences cependant avant de me lancer avec zeste de savoir, je veux déjà réussir ce code... Après je recommencerais à apprendre sur zeste de savoir si c'est vraiment nécessaire.
Je vous remercie de m'avoir lut et vous remercie d'avance pour votre aide.
#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>
#include <fstream>
#include <vector>
using namespace std;
string melangerLettres(string mot)
{
string melange;
int position(0);
//Tant qu'on n'a pas extrait toutes les lettres du mot
while (mot.size() != 0)
{
//On choisit un numéro de lettre au hasard dans le mot
position = rand() % mot.size();
//On ajoute la lettre dans le mot mélangé
melange += mot[position];
//On retire cette lettre du mot mystère
//Pour ne pas la prendre une deuxième fois
mot.erase(position, 1);
}
//On renvoie le mot mélangé
return melange;
}
int main()
{
string Reponse,dicoMelange,motMystere;
int essai = 0;
int essais = 5;
float score = 0.0;
std::ifstream Fichier("c:/Users/User/Documents/c++/FichierVectorRecup.txt");
std::vector <std::string> tabFichier;
//Initialisation des nombres aléatoires
srand(time(0));
std::string ligne;
if (Fichier)
{
while(getline(Fichier,ligne))
{
tabFichier.push_back(ligne);
}
}
else
{
std::cout <<"Erreur."<<std::endl;
}
do
{
//Pioche un mot dans un fichier dictionnaire qui ce trouve dans un tableau vector.
std::cout <<std::endl;
std::cout <<"Pioche dans un fichier le mot mystere."<<std::endl;
std::cout <<std::endl;
for (int i(0); i < tabFichier.size(); i++)
{
dicoMelange = melangerLettres(tabFichier[i]);
}
do
{
cout << endl << "Quel est ce mot ? " << dicoMelange << endl;
cin >> motMystere;
if (motMystere == dicoMelange)
{
cout << "Bravo !" << endl;
}
else
{
essai ++;
essais --;
cout << "Ce n'est pas le mot !" << endl;
cout <<"Il vous reste : " << essais <<std::endl;
}
}while (dicoMelange != motMystere && essai != 5 && essais != 0);
if (essais == 0)
{
std::cout <<"Le mot Mystere est :" << ligne <<std::endl;
}
//Score du joueur
score =(5-essai) * 100/5;
std::cout <<"Votre score est de : " << score <<"%" << std::endl<<std::endl;
//On demande au joueur si il veux rejouer.
std::cout <<"Voulez vous rejouer , Oui ou Non ? " <<std::endl;
std::cin >> Reponse;
//On réinitialise essai à 0.
essai = 0;
essais = 5;
}while (Reponse != "Non" && Reponse != "N" && Reponse != "n" && Reponse != "NON" && Reponse != "No" && Reponse != "NO");
return 0;
}
cielaigle a écrit: Bonjour j'ai essayer de mettre le fichier dans un vector comme vous me l'avez conseiller. sauf que je n'arrive pas à faire fonctionner mon programme, j'ai bien réussi à mettre le fichier dans mon vecteur mais je n'arrive pas à piocher les mots par ordre aléatoire.
Et peux-tu savoir le nombre d'entrées dans ton vecteur (nombre de mots) ? Dans ta fonction de mélange, tu sais comment trouver la longueur de la chaîne et utiliser rand() Ce sera le même principe. As-tu vérifié que le mélange était correct? Je lis ceci: if (motMystere == dicoMelange) Tu veux que la personne trouve le mot original? Il faudrait peut-être comparer avec ce mot.
Le Tout est souvent plus grand que la somme de ses parties.
cielaigle a écrit: Bonjour j'ai essayer de mettre le fichier dans un vector comme vous me l'avez conseiller. sauf que je n'arrive pas à faire fonctionner mon programme, j'ai bien réussi à mettre le fichier dans mon vecteur mais je n'arrive pas à piocher les mots par ordre aléatoire.
Et peux-tu savoir le nombre d'entrées dans ton vecteur (nombre de mots) ? Dans ta fonction de mélange, tu sais comment trouver la longueur de la chaîne et utiliser rand() Ce sera le même principe. As-tu vérifié que le mélange était correct? Je lis ceci: if (motMystere == dicoMelange) Tu veux que la personne trouve le mot original? Il faudrait peut-être comparer avec ce mot.
Bonsoir PierrotLeFou, merci pour votre retour.
Oui c'est bien dicoMelange qui pose problème car je lui demande de comparer les lettre mélanger et pas la lettre t'elle qu'elle est, mais le soucis c'est que je n'arrive pas à faire en sorte que sa compare le mot véritable. j'ai essayé plusieurs choses mais je n'y arrive pas, voila pourquoi je sollicite votre aide.
Là, vous mélangez chaque mot du dictionnaire et vous prenez le résultat du mélange du dernier mot et vous comparez l'entrée de l'utilisateur au résultat du mélange, c'est complètement illogique.
Tirez un nombre entre 0 et "tabFichier.size()", récupérez le nième mot de votre dictionnaire, n étant votre nombre tiré aléatoirement, vous le conservez dans une variable "motADecouvrir". Vous mélangez ce mot "motADecouvrir" et vous affichez le résultat de ce mélange (c'est ce que vous faites déjà).
Vous avez à comparer l'entrée de l'utilisateur avec "motADecouvrir", pas avec "dicoMelange"
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
Là, vous mélangez chaque mot du dictionnaire et vous prenez le résultat du mélange du dernier mot et vous comparez l'entrée de l'utilisateur au résultat du mélange, c'est complètement illogique.
Tirez un nombre entre 0 et "tabFichier.size()", récupérez le nième mot de votre dictionnaire, n étant votre nombre tiré aléatoirement, vous le conservez dans une variable "motADecouvrir". Vous mélangez ce mot "motADecouvrir" et vous affichez le résultat de ce mélange (c'est ce que vous faites déjà).
Vous avez à comparer l'entrée de l'utilisateur avec "motADecouvrir", pas avec "dicoMelange"
Bonjour à tous, j'ai enfin réussi à faire fonctionne mon programme , mais j'ai un petit soucis au niveau des essais je n'arrive pas à bien comprendre pourquoi, ça fait une heure que je cale dessus et ne vois pas ou est le problème.(le soucis c'est qu'il décompte en négatif alors qu'il devrais s'arrêter à 0). J'ai aussi fais quelques modification dans le code de base car j'ai ajouté des difficultés et des fichiers, cependant le codes est répétitif et long mais je ne vois pas comment je pourrais faire pour le raccourcir ... Si vous pouvez m'aider à voir ou est le problème avec les essais ça serai cool, merci et bonne journée à vous.
Voici le code :
#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>
#include <fstream>
#include <vector>
using namespace std;
string melangerLettres(string mot)
{
string melange;
int position(0);
//Tant qu'on n'a pas extrait toutes les lettres du mot
while (mot.size() != 0)
{
//On choisit un numéro de lettre au hasard dans le mot
position = rand() % mot.size();
//On ajoute la lettre dans le mot mélangé
melange += mot[position];
//On retire cette lettre du mot mystère
//Pour ne pas la prendre une deuxième fois
mot.erase(position, 1);
}
//On renvoie le mot mélangé
return melange;
}
int main()
{
string Reponse,dicoMelange,motMystere,choix;
int essai = 0;
int essais = 5;
float score = 0.0;
std::ifstream Facile("c:/Users/User/Documents/c++/Facile.txt");
std::ifstream Moyen("c:/Users/User/Documents/c++/Moyen.txt");
std::ifstream Difficile("c:/Users/User/Documents/c++/Difficile.txt");
std::vector <std::string> fichierFacile;
std::vector <std::string> fichierMoyen;
std::vector <std::string> fichierDifficile;
//Initialisation des nombres aléatoires
srand(time(0));
do
{
//Menu de choix.
std::cout <<"* Menu *"<<std::endl;
std::cout <<"Facile"<<std::endl;
std::cout <<"Moyen"<<std::endl;
std::cout <<"Difficile"<<std::endl<<std::endl;
//Demande à l'utilisateur le choix qu'il à fait.
std::cout <<"Choix ? ";
std::cin >> choix;
//teste si le fichier est valide et introduit les lignes du fichier dans le vecteur.
std::string ligne;
if (choix == "Facile")
{
while(getline(Facile,ligne))
{
fichierFacile.push_back(ligne);
}
for (int i(0); i < fichierFacile.size(); i++)
{
dicoMelange = melangerLettres(fichierFacile[i]);
do
{
cout << endl << "Quel est ce mot ? " << dicoMelange << endl;
cin >> motMystere;
if (motMystere == fichierFacile[i])
{
cout << "Bravo !" << endl;
}
else
{
essai ++;
essais --;
cout << "Ce n'est pas le mot !" << endl;
cout <<"Il vous reste : " << essais <<std::endl;
}
if (essais == 0)
{
std::cout <<"Le mot Mystere est :" << fichierFacile[i] <<std::endl;
}
}while (fichierFacile[i] != motMystere && essai != 5 && essais != 0);
}
}
else if (choix == "Moyen")
{
while(getline(Moyen,ligne))
{
fichierMoyen.push_back(ligne);
}
for (int i(0); i < fichierMoyen.size(); i++)
{
dicoMelange = melangerLettres(fichierMoyen[i]);
do
{
cout << endl << "Quel est ce mot ? " << dicoMelange << endl;
cin >> motMystere;
if (motMystere == fichierMoyen[i])
{
cout << "Bravo !" << endl;
}
else
{
essai ++;
essais --;
cout << "Ce n'est pas le mot !" << endl;
cout <<"Il vous reste : " << essais <<std::endl;
}
if (essais == 0)
{
std::cout <<"Le mot Mystere est :" << fichierMoyen[i] <<std::endl;
}
}while (fichierMoyen[i] != motMystere && essai != 5 && essais != 0);
}
}
else if (choix == "Difficile")
{
while(getline(Difficile,ligne))
{
fichierDifficile.push_back(ligne);
}
for (int i(0); i < fichierDifficile.size(); i++)
{
dicoMelange = melangerLettres(fichierDifficile[i]);
do
{
cout << endl << "Quel est ce mot ? " << dicoMelange << endl;
cin >> motMystere;
if (motMystere == fichierDifficile[i])
{
cout << "Bravo !" << endl;
}
else
{
essai ++;
essais --;
cout << "Ce n'est pas le mot !" << endl;
cout <<"Il vous reste : " << essais <<std::endl;
}
if (essais == 0)
{
std::cout <<"Le mot Mystere est :" << fichierDifficile[i] <<std::endl;
}
}while (fichierDifficile[i] != motMystere && essai != 5 && essais != 0);
}
}
else
{
std::cout <<"Erreur."<<std::endl;
}
//Score du joueur
score =(5-essai) * 100/5;
std::cout <<"Votre score est de : " << score <<"%" << std::endl<<std::endl;
//On demande au joueur si il veux rejouer.
std::cout <<"Voulez vous rejouer , Oui ou Non ? " <<std::endl;
std::cin >> Reponse;
//On réinitialise essai à 0.
essai = 0;
essais = 5;
}while (Reponse != "Non" && Reponse != "N" && Reponse != "n" && Reponse != "NON" && Reponse != "No" && Reponse != "NO");
return 0;
}
Bonjour à tous voici mon code terminé que je poste pour vous montrer comment j'ai fais pour simplifié et le rendre fonctionnelle.
Bonne journée à vous et merci encore une fois pour vos aides.
#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>
#include <fstream>
#include <vector>
using namespace std;
string melangerLettres(string mot)
{
string melange;
int position(0);
//Tant qu'on n'a pas extrait toutes les lettres du mot
while (mot.size() != 0)
{
//On choisit un numéro de lettre au hasard dans le mot
position = rand() % mot.size();
//On ajoute la lettre dans le mot mélangé
melange += mot[position];
//On retire cette lettre du mot mystère
//Pour ne pas la prendre une deuxième fois
mot.erase(position, 1);
}
//On renvoie le mot mélangé
return melange;
}
//autre fonction
int Fmelange(std::vector <std::string> fichierFacile)
{
string Reponse,dicoMelange,motMystere,choix;
int essai = 0;
int essais = 5;
float score = 0.0;
for (int i(0); i < fichierFacile.size(); i++)
{
dicoMelange = melangerLettres(fichierFacile[i]);
do
{
cout << endl << "Quel est ce mot ? " << dicoMelange << endl;
cin >> motMystere;
if (motMystere == fichierFacile[i])
{
cout << "Bravo !" << endl;
//score
//Score du joueur
score =(5-essai) * 100/5;
std::cout <<"Votre score est de : " << score <<"%" << std::endl<<std::endl;
}
else
{
essai ++;
essais --;
cout << "Ce n'est pas le mot !" << endl;
cout <<"Il vous reste : " << essais <<std::endl;
}
if (essais == 0)
{
std::cout <<"Le mot Mystere est :" << fichierFacile[i] <<std::endl;
//score
//Score du joueur
score =(5-essai) * 100/5;
std::cout <<"Votre score est de : " << score <<"%" << std::endl<<std::endl;
//On réinitialise essai à 0.
essai = 0;
essais = 5;
break;
}
}while (fichierFacile[i] != motMystere && essai != 5 && essais != 0);
}
}
//Fonction main()
int main()
{
string Reponse,dicoMelange,motMystere,choix;
// int essai = 0;
//int essais = 5;
//float score = 0.0;
std::ifstream Facile("c:/Users/user/Documents/c++/Facile.txt");
std::ifstream Moyen("c:/Users/User/Documents/c++/Moyen.txt");
std::ifstream Difficile("c:/Users/User/Documents/c++/Difficile.txt");
std::vector <std::string> fichierFacile;
std::vector <std::string> fichierMoyen;
std::vector <std::string> fichierDifficile;
//Initialisation des nombres aléatoires
srand(time(0));
do
{
//Menu de choix.
std::cout <<"* Menu *"<<std::endl;
std::cout <<"Facile"<<std::endl;
std::cout <<"Moyen"<<std::endl;
std::cout <<"Difficile"<<std::endl<<std::endl;
//Demande à l'utilisateur le choix qu'il à fait.
std::cout <<"Choix ? ";
std::cin >> choix;
//teste si le fichier est valide et introduit les lignes du fichier dans le vecteur.
std::string ligne;
if (choix == "Facile")
{
while(getline(Facile,ligne))
{
fichierFacile.push_back(ligne);
}
//appel de la fonction
Fmelange(fichierFacile);
}
//On demande au joueur si il veux rejouer.
std::cout <<"Voulez vous rejouer , Oui ou Non ? " <<std::endl;
std::cin >> Reponse;
//On réinitialise essai à 0.
// essai = 0;
// essais = 5;
}while (Reponse != "Non" && Reponse != "N" && Reponse != "n" && Reponse != "NON" && Reponse != "No" && Reponse != "NO");
return 0;
}
git is great because Linus did it, mercurial is better because he didn't.
TP : le mot mystère
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
git is great because Linus did it, mercurial is better because he didn't.
Le Tout est souvent plus grand que la somme de ses parties.
En recherche d'emploi.
git is great because Linus did it, mercurial is better because he didn't.
git is great because Linus did it, mercurial is better because he didn't.