Partage
  • Partager sur Facebook
  • Partager sur Twitter

exercice mot mystere

    30 octobre 2018 à 13:13:36

    Bonjour à vous :) 

    Franchement déçu de la correction de certains! :( 

    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;
    	}
    
    }

    • Partager sur Facebook
    • Partager sur Twitter
    Master2, Automatismes industriels; Master2, SMaRT; Maitrise en Automatique; Maitrise et Licence en Genie electrique, electronique et elecrotechnique; passioné de développement.
      30 octobre 2018 à 13:25:30

      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.

      Concernant ton code :

      • n'utilise pas "using namespace std" (raison + que faire),
      • ne déclare pas tes variables en avance (où dois-je déclarer mes variables locales ?),
      • il y a beaucoup trop de commentaires, si ton code est clair, il n'est pas sensé y en avoir besoin,
      • ici, tu as même des commentaires qui sont incohérents avec le code (exemple, la doc de "lecture"),
      • dans "melange", la position dans une string n'est pas de type int mais std::size_t (et il y a std::shuffle pour mélanger),
      • srand/rand sont des fonctionnalités dépréciées du langage C, utilise les générateurs du header <random>,
      • while (partie == true);
        ou plus logiquement :
        while (partie);
        en choisissant un meilleur nom,
      • if (part == "O") return true;
        else return false;
        ou plus logiquement :
        return (part == "O");

      -
      Edité par Ksass`Peuk 30 octobre 2018 à 13:27:33

      • Partager sur Facebook
      • Partager sur Twitter

      Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

        30 octobre 2018 à 13:30:04

        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 30 octobre 2018 à 13:32:31

        • Partager sur Facebook
        • Partager sur Twitter
        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
          30 octobre 2018 à 15:35:29

          Bonjour à tous,

          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.

          • Partager sur Facebook
          • Partager sur Twitter
            30 octobre 2018 à 22:27:41

            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...

            -
            Edité par int21h 30 octobre 2018 à 22:28:27

            • Partager sur Facebook
            • Partager sur Twitter
            Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug
              31 octobre 2018 à 8:57:56

              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.

              • Partager sur Facebook
              • Partager sur Twitter
                31 octobre 2018 à 15:37:56

                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.

                Concernant ton code :

                • n'utilise pas "using namespace std" (raison + que faire),
                • ne déclare pas tes variables en avance (où dois-je déclarer mes variables locales ?),
                • il y a beaucoup trop de commentaires, si ton code est clair, il n'est pas sensé y en avoir besoin,
                • ici, tu as même des commentaires qui sont incohérents avec le code (exemple, la doc de "lecture"),
                • dans "melange", la position dans une string n'est pas de type int mais std::size_t (et il y a std::shuffle pour mélanger),
                • srand/rand sont des fonctionnalités dépréciées du langage C, utilise les générateurs du header <random>,
                • while (partie == true);
                  ou plus logiquement :
                  while (partie);
                  en choisissant un meilleur nom,
                • if (part == "O") return true;
                  else return false;
                  ou plus logiquement :
                  return (part == "O");

                -
                Edité par Ksass`Peuk hier à 13:27

                merci pour tes remarques piétinantes. j'en prendrai note! 

                bien à vous tous! 

                • Partager sur Facebook
                • Partager sur Twitter
                Master2, Automatismes industriels; Master2, SMaRT; Maitrise en Automatique; Maitrise et Licence en Genie electrique, electronique et elecrotechnique; passioné de développement.
                  31 octobre 2018 à 16:10:07

                  Batmaaan a écrit:

                  ( suffit de mettre le include de pch en commentaire)

                  Comment un debutant qui n'a jamais vu ce qu'est un PCH peut regler ce problème ? Il n'arrivera meme pas a comprendre le message d'erreur.

                  (Et C::B est l'IDE montré dans le cours, donc ce n'est pas surprend que certains ont testé ton code avec cet IDE)

                  Batmaaan a écrit:

                  Si mon programme ne compilait/fonctionnait pas comment penses tu que l'un des correcteurs a bien pu le faire? 

                  Il en savait plus que le cours et a compris comment régler le problème. 

                  • Partager sur Facebook
                  • Partager sur Twitter
                    1 novembre 2018 à 15:18:08

                    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 :D

                    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...

                    -
                    Edité par int21h 1 novembre 2018 à 15:20:59

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug

                    exercice mot mystere

                    × 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.
                    • Editeur
                    • Markdown