Problème de gestion aléatoire de question

crawhawks21 Messages postés 12 Date d'inscription vendredi 24 avril 2009 Statut Membre Dernière intervention 27 juillet 2010 - 11 mai 2009 à 08:31
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 11 mai 2009 à 20:53
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

fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
11 mai 2009 à 09:04
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.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
11 mai 2009 à 18:51
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.
0
crawhawks21 Messages postés 12 Date d'inscription vendredi 24 avril 2009 Statut Membre Dernière intervention 27 juillet 2010
11 mai 2009 à 20:20
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.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
11 mai 2009 à 20:53
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;

}
0
Rejoignez-nous