Problème de gestion aléatoire de question

Signaler
Messages postés
12
Date d'inscription
vendredi 24 avril 2009
Statut
Membre
Dernière intervention
27 juillet 2010
-
Messages postés
3829
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
8 janvier 2021
-
Bonjour,

Je viens par ce mail vous demandez votre aide, j'ai un grand besoin de vos lumières, voilà je suis occupé à créer un quizz d'un nombre N de questions, je voudrais savoir comment programmer une gestion aleatoire de ces questions (donc je voudrais que l'ordinateur choisi les questions aléatoirement), pourriez vous me donner le code source pour réaliser cela svp, avec l'endroit exacte ou je doit placer mes questions et mes conditions pour chacunes de ces questions.

Dans l'attente de vous relire, je vous en remercie.

Crawhawks

4 réponses

Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
salut,

tu associes un identifiant (nombre entier) à chacune de tes questions.
Tu utilises la fonction rand.
Par exemple (a tester) :questionencours =  (rand()*nombretotaldequestion)/RAND_MAX;

Apres a toi de sauvegarder les questions déjà posées dans un tableau pour ne pas les répéter.
Messages postés
3829
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
8 janvier 2021
114
Aucun code source déjà fait ne te seras donné: http://www.cppfrance.com/reglement.aspx

Néanmoins, si tu te décides à le faire par toi même, nous t'aiderons avec plaisir. N'hésites donc pas à poster ce que tu as fait, en précisant les points qui te bloquent.
Messages postés
12
Date d'inscription
vendredi 24 avril 2009
Statut
Membre
Dernière intervention
27 juillet 2010

un grand merci pour vos réponses, et je comprend entièrement qu'on ne donne pas des code source déjà réaliser, je vous copie donc ici une partie de mon code source afin d'essayer (je dit bien essayer...lol) de créer un tirage aléatoire de question, mais vraiment je ne comprend pas encore très bien le systeme des tableaux, seriez vous assez gentil pour m'aider à réaliser mon petit projet de jeu de question en m'aidant à compléter mon code source svp.

je ne comprend vraiment pas ce que vous me dites, je connais un peu la fonction rand qui permet de gérer des tirages aleatoire comme pour le jeu du nombre mystere.

voici donc mon code source qui ne ressemble à rien, si vous avez des conseils à me soumettre n'hesitez pas je les suivrais à la lettre.

#include
int main()
{
    using namespace std;
    long questionencours, questiontotal;
    questiontotal = (rand()*questionencours)/RAND_MAX;
   
    //premiere question//
    long reponse;
    {
         questionencours=1;
         cout << "qui a inventer la tour eifel ";
         cout << "\n\n1 eifel ";
         cout << "\n2 montparnasse ";
         cin>>reponse;
        
         if (reponse == 1)
         {
                     cout <<"bravo !!! \n";
                     system ("pause");
                     }
         if (reponse == 2) 
         {                   
                      cout <<"Dommage !!! \n";
                      system ("pause");
                      }
                     
         {
         questionencours=2;
         cout << "quel est la vitesse maximal du guepard";
         cout << "\n\n1 60 km/h ";
         cout << "\n2 100 km/h ";
         cin>>reponse;
        
         if (reponse == 2)
         {
                     cout <<"bravo !!! \n";
                     system ("pause");
                     }
         if (reponse == 1) 
         {                   
                      cout <<"Dommage !!! \n";
                      system ("pause");
                      }
                      return 0;
                      }
                      }
                      }   

voilà en gros, il n'y à que deux questions, mais je pense que si vous me montrez ce qui manque ou complèter ce code, je serais en mesure de faire le reste tout seul.

encore un grand merci à vous tous, votre site est vraiment génial.

crawhawks.
Messages postés
3829
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
8 janvier 2021
114
Le code (sans les fautes d'orthographes):

#include
#include <vector>
#include
#include <ctime>
#include <cstdlib>

int main()
{
  std::vector<std::pair<std::string, int> > list;
  list.push_back(std::make_pair<std::string, int> ("Qui a invente la tour Eiffel ?\n1 Eiffel\n2 Montparnasse", 1));
  list.push_back(std::make_pair<std::string, int> ("Quelle est la vitesse maximal du guepard ?\n\n1 60 km/h\n2 100 km/h", 2));
  // Tu peux ajouter autant de question que tu veux.
  srand(time(NULL));
  int question = rand() % list.size();
  int reponse;

  std::cout << list[question].first << std::endl;
  std::cin >> reponse;
  if (reponse == list[question].second)
    std::cout << "Bravo" << std::endl;
  else
    std::cout << "Dommage" << std::endl;

  return 0;
}

Quelques explications:

#include 

Pour les affichage, entre autre

#include <vector>
Pour utiliser un vecteur de la STL

#include
Pour utiliser un type Pair de la STL

#include <ctime>
Pour utiliser la fonction time

#include <cstdlib>
Contient la fonction srand et rand


int main()

{

  std::vector<std::pair<std::string, int> > list;
Ici, je crée un vecteur qui peut contenir des paires. Ces paires sont des paires qui contiennent spéficiquements une chaînes de caractêres et un entier.

  list.push_back(std::make_pair<std::string, int> ("Qui a invente la tour Eiffel ?\n1 Eiffel\n2 Montparnasse", 1));
La fonction std::make_pair, crée une pair. Ici je donne la question et le numéro de la réponse. La parie crée est directement ajouté à la liste grâce à push_back.

  list.push_back(std::make_pair<std::string, int> ("Quelle est la
vitesse maximal du guepard ?\n\n1 60 km/h\n2 100 km/h", 2));
Je fais de même pour la deuxième question.
  // Tu peux ajouter autant de question que tu veux.

  srand(time(NULL));
srand ne doit être appelé qu'une seule et unique fois par exécution. De plus, j'intialise srand avec une valeur elle même qui varie beaucoup. En effet, time(NULL) retourne le nombre de seconde écoulé depuis une certaine date (1 janvier 1970, si je ne m'abuse). Ainsi le générateur de nombre aléatoire est plus crédible.

  int question = rand() % list.size();
Ici, j'appele la fonction rand. Celle-ci renvoie un nombre aléatoire. Afin d'être sûr que le nombre renvoyer est bien compris entre 0 et la taille de mon tableau, j'utilise un modulo de la taille de ce dit tableau.

  int reponse;

  std::cout << list[question].first << std::endl;
Je pose la question. Dans une pair first représente le 1er élément et second le deuxième. Tu te rappeles que la question est mis en 1ère position.

  std::cin >> reponse;

  if (reponse == list[question].second)
Ici, je vérifie que le réponse entrée, est celle attendue. La réponse est stocké dans le second élément de la pair. Donc j'utilise second sur la pair en cours du tableau.

    std::cout << "Bravo" << std::endl;

  else

    std::cout << "Dommage" << std::endl;


  return 0;

}