[C] Generateur aleatoire de question

Bonjour,
J'aimerai faire un un questionnaire posant des questions aleatoirement mais toutes les possibilites que j'ai essaye ne marchent pas (je ne les ai pas sous la main).
Pouriez vou me donner un code qui marche SVP ?
Mercid'avance.

--
Vive les pas douer en PC et PSP comme moi, sinon les forums ne serviraient a rien !!!
Configuration: Apple iPod Touch
Safari 525.20

3 réponses

  1. Contributeur
    Salut,
    #include <stdlib.h> //pour srand et rand
    #include <time.h> //pour time
    srand(time(NULL)); //pour initialiser la graine
    int i= 1 + (int) (10.0 * (rand() / (RAND_MAX + 1.0))); //pour avoir un nombre entre 1 et 10
    
    2
    1. Merci, mais j'ai oublie de preciser q'un nombre peut venir q'une fois.
      0
      1. Tu veux que toutes les questions ne soient posées qu'une seule fois et de manière aléatoire.
        Il n'y a qu'une solution, il faut enregistrer le n° des questions posées; le plus simple c'est de le faire à l'aide d'un tableau, de vérifier à chaque tirage et de relancer celui-ci si la question a déjà été posée.
        Pour ce qui est de l'aléa, fiddy t'as donné la méthode.
        0
    2. Une astuce est alors :
      1) créer une liste contenant tous les nombres possibles,
      2) la mélanger aléatoirement
      3) lire les valeurs successivement

      T'es ainsi sûr qu'une valeur passée ne repassera pas (avant de les avoir toutes passées).
      0
      1. D'accord mais il y a 153 valeur et je voudrais que l'utilisateur a chaque fois qu'il lance le programe, qu'il n'est pas toujoirs les question au meme endroit.
        Mais ton idee est tres bonne.
        0
      2. Contributeur
        @Utilisateur anonymeEh bien, utilise le programme suivant :

        #include <stdio.h>
        #include <stdlib.h>
        #include <time.h>
        
        #define MAX 20
        
        static int random(void) {
            return (int) (MAX * ((double)rand() / RAND_MAX));
        }
        
        static void ech(int *t,const int i, const int j){
            int tmp=t[i];
            t[i]=t[j];
            t[j]=tmp;
        }
        
        int main(void){
            int tab[20];
            int i,j;
            int cpt;
        
            srand(time(NULL));
        
            for(int i=0;i<MAX;i++) tab[i]=i;
        
            cpt=MAX/2;
            while(cpt--){
                i=random();
                j=random();
                ech(tab,i,j);
            }
        
            //tab contient des numéros aléatoires uniques ;)
            return 0;
        
        0
      3. @Utilisateur anonymeBien sûr quelle est bonne sa méthode!
        Et qu'il y ait 153 questions n'est pas un problème... c'est la machine qui travaille.
        Pour le mélange aléatoire, on peut remplir un tableau de 153 entiers, de le remplir avec 0, 1, ... 152; puis prendre successivement chaque case du tableau et l'inverser, de manière aléatoire, avec une autre case du tableau .
        0
      4. @loupiusTrop lent, mon vieux!
        J'ai l'impression que quelqu'un a eu la même idée que toi.
        0
      5. Modérateur
        @fiddyHeh! Pô bête!

        Moi comme un bourrin j'aurais fait des boucles d'essais :-)
        0