[C] Generateur aleatoire de question

Utilisateur anonyme -  
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   -
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.
A voir également:

3 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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
1
Utilisateur anonyme
 
Merci, mais j'ai oublie de preciser q'un nombre peut venir q'une fois.
0
loupius
 
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
bizu53 Messages postés 1274 Date d'inscription   Statut Membre Dernière intervention   861
 
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
Utilisateur anonyme
 
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
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846 > Utilisateur anonyme
 
Eh 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
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526 > fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention  
 
Heh! Pô bête!

Moi comme un bourrin j'aurais fait des boucles d'essais :-)
0
loupius > Utilisateur anonyme
 
Bien 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
loupius > loupius
 
Trop lent, mon vieux!
J'ai l'impression que quelqu'un a eu la même idée que toi.
0