bizarre que le code ne marche pas alors qu'il a pu être compilé par l'un des correcteurs!
ce n'est pas de ma faute si certains n'arrivent as à compiler un code ( ce qui devrait figurer dans les compétences d'un développeur).
voyez vous même!
// mot_mystere.cpp : Ce fichier contient la fonction 'main'. L'exécution du programme commence et se termine à cet endroit.
//
#include "pch.h"
#include <iostream> // biblio des flux d'etrée et de sortie
#include<string> // biblio des chaines de caractere
#include <cstdlib> // obligatoire pour la generation des nombres aléatoires
#include<ctime> // obligatoire pour la generation des nombres aléatoires
#include<vector> // pour pouvoire utiliser les tableaux dynamiques
#include <fstream> // pour l'utilisation des flux de fichiers
using namespace std; // utilisation de l'espace nom std de la biblio iostream
void lecture(string const); // fonction pour la lecture des lignes de texte
string saisie(); // fonction de gestion de saisie
string melange(string); // fonction de melange du mot
bool rejouer(void); // fonctio qui demande à l'utilisateur s'il veut rejouer
void test(string); // fonction qui teste l'egalité du mot introduit avec le mot mystere
string lecture(); // fonction se chargeant de la lecture d'un mot aleatoire du fichier dico ( fichier .text contenant des mots)
string nm_fich; // variable qui sera utilisée lors de la lecture d'un fichier quelconque
//************************programme principal**************************************************************************************************************************************************************************
//*****************************************************************************************************************************************************************************************************************************
int main()
{
string nomFichier("C:/C++/modif_fichiers/scores.txt"); // fichier du nom soufaité avec precision du chemin
srand(time(0)); // on appelle cette fonction afin de pouvoir generer des nombres
//aleatoire avec une autre instruction rand()
bool partie(true); // variable booléenne pour la gestion de la partie
// debut du jeu *********************
do {
// 1: saisie du mot
string mot;
mot=lecture();
// 2: melange et identification du mot ( tout se fait à l'interieur de la foction
// test qui appelle à son tour la fonction melange)
test(mot);
// On demande à l'utilisateur s'il veut continuer à jouer
partie=rejouer(); // on fait appel à la fonction rejouer et on met à jour la variable booléenne partie
} while (partie == true);
}
//************************************************************************************************************************************************************
//*********************************************************Fin du programme principal***********************************************************************
// A: definition de la fonction de saisie
string saisie() {
// on demande à l'utilisateur de saisir le mot
string A;
cout << "veuillez saisir le mot :" << endl;
cin >> A; // stockage dans une variable
return A;
}
// definition de la fonction de melange
string melange(string mot)
{
int pos(0);
string motmelange; // creation d'un mot vide ( ou une chaine/tableau de caracteres vide ) dynamique ( taille variable)
while (mot.size() != 0) { // mot.size() retourne le nombre de caracteres contenus dans le mot
pos = rand() % mot.size(); // prend une lettre au hazard du mot ---- > genere un nombre
//entier aleatoire entre 0 et taille_du mot-1 ( 0<=pos<taille du mot)
motmelange += mot[pos]; // rajoute une lettre au hazard prise du mot à la fin de la chaine de caracteres
mot.erase(pos, 1); // retire la lettre du mot original pour eviter les confusions
}
return motmelange;
}
// definition de la fonction de lecture ayant comme parametre le nom du fichier lire
void lecture(string nm_fich) {
ifstream fichier(nm_fich.c_str()); // declaration du flux de lecture
if (fichier) { // s'assurer que le fichier est bien lisible
string ligne; //variable contenant la ligne lue
while (getline(fichier, ligne)) {
cout << ligne << endl;
}
}
else {
cout << "impossible de lire le fichier " << endl;
}
}
// definition de la fonction rejouer
bool rejouer(void) {
string part;
do {
cout << " voulez vous refaire une partie ? (O/N) " << endl;
cin >> part;
} while ((part != "O") && (part != "N"));
if (part == "O") return true;
else return false;
}
// definition de la fonction de test
void test(string mot_cherche) {
int nbr_essaies(5);
string read;
cout << "essayez de retrouver le mot à partir de ces lettres !" << melange(mot_cherche) << endl;
do {
cout << "il vous reste " << nbr_essaies << " essaies!" << endl; // informe l utilisateur du nombre d essaies restants
cin >> read; // l'utilisateur introduit un mot
if (read == mot_cherche) { cout << "bravo!" << endl; }
else cout << "reessayer" << endl;
if (nbr_essaies == 1) cout << "perdu! le mot est : " << mot_cherche << endl;
nbr_essaies--; // decrementation du nombre d essaies
} while ((read != mot_cherche)&&(nbr_essaies>0)); // test d'egalité continuer tant que le mot saisie est different
//du mot ogriginal et prise en compte du nombre d essaies restants
}
// definition de la fonction de lecture ayant comme parametre le nom du fichier lire
string lecture() {
string mot, mot_lu, saut_de_ligne;
int taille(0);
int position(0);
ifstream fichier("dico.txt"); //Ouverture d'un fichier en lecture ( le fichier doit etre situé au meme emplacement que le fichier source
if (fichier)
{
//Tout est prêt pour la lecture.
srand(time(0)); // on appelle cette fonction afin de pouvoir generer des nombres
fichier.seekg(0, ios::end); //On se déplace à la fin du fichier
taille = fichier.tellg(); // taille du fichier ( nombre de caracteres )
position = rand() % taille; // genere un nombre aleatoire entre 0 et nombre de caracteres du fichier
fichier.seekg(rand() % taille, ios::beg); // deplacement du fichier vers une position aleatoire
fichier >> saut_de_ligne; // astuce pour passer au mot suivant ( sinon risque de tomber sur des parties de mots )
fichier >> mot_lu; // lecture d'un mot aleatoire
return mot_lu;
}
else
{
cout << "ERREUR: Impossible d'ouvrir le fichier en lecture." << endl;
}
}
Master2, Automatismes industriels; Master2, SMaRT; Maitrise en Automatique; Maitrise et Licence en Genie electrique, electronique et elecrotechnique; passioné de développement.
Après, changes de cours. Il apprend un sacré paquet d'âneries à ne pas faire, en plus de montrer des exemples de code buggés et d'être obsolète (quelques recherches sur le forum t'en diront plus). Prends plutôt le tutoriel disponible sur Zeste de Savoir. Ou encore le cours de C++ de @gbdivers, même s'il est encore en écriture il ne contient pas ce genre de bavures (et si tu as des problèmes de compréhension sur une partie et que ce n'est pas à cause d'un manque d'étude du cours,tu peux poster ici). Si tu préfères un cours déjà complet, tourne toi vers le C++ Primer de Lippman dans sa dernière édition (en anglais), il sera un poil moins à jour mais c'est un bon cours.
En même temps, as tu pensé à fournir le code de pch.h à tout le monde, en indiquant -- par sécurité -- comment il fallait l'utiliser ?
Car, nous, on veut bien faire beaucoup de choses, mais voilà : même moi, avec toute ma maitrise, je ne pourrais pas compiler ton code sans le modifier ne serait-ce qu'un tout petit peu en supprimant l'inclusion de pch.h
Or, si je dois corriger le code de quelqu'un, je veux pouvoir le compiler sans devoir le modifier (si je dois le modifier pour qu'il compile, il perd déjà la moitié des points!), au besoin, en respectant la procédure indiquée
- Edité par koala01 30 octobre 2018 à 13:32:31
Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
Le problème avec la programmation est que la compilation est fortement liée à votre environnement de développement voire votre Os.
Je suis entrain de terminer l'exercice et je suis tombé sur un problème. J'ai utilisé dico.txt du cours. Quand je lis une ligne avec getline() je récupère une fin de chaine qui est \n ce qui rendait faux mes tests de comparaison. J'ai du ajouter 3 lignes qui supprimait ces deux caractères. Je bosse sous Osx avec Xcode. Je ne suis pas persuadé que ce problème apparaît sous windows avec un éditeur de texte basique. De plus le chemin pour arriver à dico.txt est spécifique à ma machine (il est en absolu car l'exécutable n'est pas au niveau du main par défaut).
Celui qui corrigera mon exercice peut avoir des problèmes de compilation à cause de ces spécificités. ce n'est pas pour cela que mon programme ne fonctionne pas sur ma machine.
Par contre effectivement à minima, il faut fournir tous les .h s'ils ne sont pas standards.
Il est vrai que sans la totalité des éléments il est compliqué de corriger.
Si jamais je dis à un client, désolé, ça marche sur ma machine, je connais déjà sa réponse, il me répondra désolé votre paiement reste sur mon compte... Donc non, un bon programme doit être portable au maximum et s'il y a des contraintes il faut les exprimer et les documenter clairement, comme l'a dit Koala01, si ça ne compile pas en suivant les instructions, la moitié de la note part en fumée, si en plus ça plante après avoir fixé les problèmes de compilation, l'autre moitié part en fumée...
ce n'est pas de ma faute si certains n'arrivent as à compiler un code ( ce qui devrait figurer dans les compétences d'un développeur).
C'est bien le principe de la correction par les pairs : ceux qui corrigent sont des débutants et n'ont pas forcement les compétences nécessaires pour comprendre un code qui ne correspond pas au cours.
Cela veut dire qu'une évaluation par les pairs n'évalue pas simplement les connaissances de celui qui fait l'exercice, mais également celles de celui qui corrige. (cf le message de Ksass`Peuk pour voir ce que cela donne quand quelqu'un de compétent corrige).
Donc si tu as utilisé un pch alors que ce n'est pas dans le cours, c'est complètement ta faute si tu as eu 0.
bonjou, merci à vous tous pour vos remarques et vos réponses.
1. j'avais joint deux dossiers: le premier contenant le main et le dico.txt, le deuxième contenant toute la solution.
2. j'ai travaillé sur Visual Studio 2017 mais la solution compile parfaitement sur CodeBlocks ( suffit de mettre le include de pch en commentaire)
j'ai moi même rajouté ce dernier afin que les codes puissent compiler dans mon IDE ( ce qui n'est pas sorcier, je m'attendais à ce qu'on fasse de même)
3. quand j'ai corrigé je me suis donné de la peine pour compiler et essayer de comprendre certains codes qui ne compilaient pas ( j'ai même rajouté des trucs en laissant des remarques.
4.
gbdivers a écrit:
BillalOuali a écrit:
ce n'est pas de ma faute si certains n'arrivent as à compiler un code ( ce qui devrait figurer dans les compétences d'un développeur).
C'est bien le principe de la correction par les pairs : ceux qui corrigent sont des débutants et n'ont pas forcement les compétences nécessaires pour comprendre un code qui ne correspond pas au cours.
Cela veut dire qu'une évaluation par les pairs n'évalue pas simplement les connaissances de celui qui fait l'exercice, mais également celles de celui qui corrige. (cf le message de Ksass`Peuk pour voir ce que cela donne quand quelqu'un de compétent corrige).
Donc si tu as utilisé un pch alors que ce n'est pas dans le cours, c'est complètement ta faute si tu as eu 0.
Si mon programme ne compilait/fonctionnait pas comment penses tu que l'un des correcteurs a bien pu le faire?
5.
koala01 a écrit:
Salut,
En même temps, as tu pensé à fournir le code de pch.h à tout le monde, en indiquant -- par sécurité -- comment il fallait l'utiliser ?
Car, nous, on veut bien faire beaucoup de choses, mais voilà : même moi, avec toute ma maitrise, je ne pourrais pas compiler ton code sans le modifier ne serait-ce qu'un tout petit peu en supprimant l'inclusion de pch.h
Or, si je dois corriger le code de quelqu'un, je veux pouvoir le compiler sans devoir le modifier (si je dois le modifier pour qu'il compile, il perd déjà la moitié des points!), au besoin, en respectant la procédure indiquée
- Edité par koala01 hier à 13:32
oui. j'ai précisé cela j'ai même laissé un message explicatif et mes coordonnées pour me contacter au cas où.
Ksass`Peuk a écrit:
Lu'!
BillalOuali a écrit:
Franchement déçu de la correction de certains!
Vois avec OC, ici c'est le forum.
Après, changes de cours. Il apprend un sacré paquet d'âneries à ne pas faire, en plus de montrer des exemples de code buggés et d'être obsolète (quelques recherches sur le forum t'en diront plus). Prends plutôt le tutoriel disponible sur Zeste de Savoir. Ou encore le cours de C++ de @gbdivers, même s'il est encore en écriture il ne contient pas ce genre de bavures (et si tu as des problèmes de compréhension sur une partie et que ce n'est pas à cause d'un manque d'étude du cours,tu peux poster ici). Si tu préfères un cours déjà complet, tourne toi vers le C++ Primer de Lippman dans sa dernière édition (en anglais), il sera un poil moins à jour mais c'est un bon cours.
merci pour tes remarques piétinantes. j'en prendrai note!
bien à vous tous!
Master2, Automatismes industriels; Master2, SMaRT; Maitrise en Automatique; Maitrise et Licence en Genie electrique, electronique et elecrotechnique; passioné de développement.
Si j'avais été ton reviewer, j'aurais pu régler le problème, parce que je sais ce qu'est un pch. Je sais que c'est généralement une vraie plaie et j'ai personnellement décidé de m'en passer, ça compile plus vite, mais niveau portabilité c'est la catastrophe, aussi je préfère une compilation un peu plus lente qui marche partout. De toute façon si tu programmes correctement, tu ne compiles pas souvent, donc au final, les pch n'apportent pas grand chose
Mais comme l'a dit gbdivers, quelqu'un qui n'a jamais été confronté aux pch, n'a aucune chance de s'en tirer. Il est peu probable qu'un débutant qui ne connait que C::B et le cours d'OC avec mingw ait jamais été confronté aux pch...
× 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.
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C
Discord NaN. Mon site.
Discord NaN. Mon site.