IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Turbo Pascal Discussion :

Comment permuter les questions dans un quiz [Turbo Pascal]


Sujet :

Turbo Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 31
    Par défaut Comment permuter les questions dans un quiz
    Salut à tous,
    J'ai fais un quiz avec 26 questions. Et j'aimerai permuter l'ordre des questions à chaque exécution de mon programme .
    je voulais utiliser la commande ''ramdom'' mais elle peut répéter une question 2 fois.
    Une personne a une idee ??
    merci

  2. #2
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 466
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    Par défaut
    Tu peux faire un algo qui mélange ton tableau de question (en supposant que tu as un tableau pour gérer tes données), en utilisant des algos de mélange et du random.

  3. #3
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    peux tu nous dire comment tu conserve tes données? en utilisant un tableau, un fichier, ou autres.
    Si tu utilise un tableau, tu peux faire simple en utilisant un algorithme comme celui qui suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    pour i de 1 à 26
      indice:=genererNombreDifferentDe(i);
      permuterElementTableau(i, indice);
    finPour

  4. #4
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 31
    Par défaut
    En fait j'utilise les tableaux du genre veb[n] n allant de de 1 a 26

    SVP je ne comprends pas bien cet algo.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i := 1 to 26 do begin
      indice:=genererNombreDifferentDe(i);
      permuterElementTableau(i, indice);
    readln(vveb[i]);
     end;

  5. #5
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    Le code que j'ai donné sert juste à distribuer les elements du tableau de façon aléatoire.
    Par exemple, si tu as un tableau (1,2,3,4,5), apres transformation, tu peux avoir (3,5,1,2,4).
    indice:=genererNombreDifferentDe(i);
    permuterElementTableau(i, indice);
    sont des fonction à definir. Les operaétions effectuées par ces fonctions se comprennent dejà en lisant leur noms.
    Peut etre que tu devrais poster une partie de ton code, pour nous permetre de bien te comprendre, et savoir exactement ce que tu veux faire

  6. #6
    Membre averti

    Inscrit en
    Janvier 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Janvier 2009
    Messages : 37
    Par défaut
    Voici le fichier QUIZZ que j'ai utilisé pour tester le programme :
    Par habitude, je crée les deux premières lignes sous TP, je sauvegarde avec l'extension souhaitée, puis j'ouvre en NOTEPAD et je le manipule comme je veux.

    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    4
    QUEL EST L'AGE DU CHIEN
    POURQUOI
    QUOI
    COMMENT

    PS : j'ai essayé en FreePascal, le programme plante sur la fonction de lecture du fichier, et ne reconnaît pas Ioresult. J'ai peut-être une piste à suivre pour comprendre le passage de TP7 en FreePascal...

  7. #7
    Membre averti

    Inscrit en
    Janvier 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Janvier 2009
    Messages : 37
    Par défaut
    Perso, je te conseillerai de sauvegarder les questions de ton quizz dans un fichier externe, ce qui te permettra, parce que cela devrait arriver, d'en augmenter les questions autant que bon te semble. Qui plus est, ce fichier, exploité à partir d'un notepad, par exemple, te permettrait de manipuler les 'copier'-'coller' de windows.

    Je me suis amusé à faire ce petit programme à ma façon, pas toujours trés "pascalement officielle". Tu noteras que le point-clé réside dans la constante max_questions qui fixe le volume maximum de questions du QUIZZ. A cette constante sont liées les variables [1..26]. Toute modification de max_questions demande de modifier les tableaux pour ne pas planter le programme.

    ET LA, je suis sûr qu'il y a une solution en mode tableau dynamique, pointeurs, etc...et je viens de prouver mes limites en TP

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    PROGRAM QUIZ;
    USES crt,dos;
     
    TYPE
    tableau_quizz = RECORD
       question :  string;
       selection : boolean;
    end;
     
    VAR
    cpta : byte;
    ff : text;
    nb_questions : byte;
    cle : char;
     
    veb : array[1..26] of tableau_quizz;
    tableau_genere : array[1..26] of byte;
     
    CONST
    max_questions : byte =26;
     
    PROCEDURE QUITTER(message : string[100]);
    begin
       clrscr;
       writeln(message);
       halt;
    end;
     
    PROCEDURE INITIALISE_QUIZZ;
    begin
       for cpta:=1 to max_questions do begin
          veb[cpta].question:='';
          veb[cpta].selection:=false;
          tableau_genere[cpta]:=0;
       end;
    end;
     
    PROCEDURE CHARGE_QUIZZ;
    begin
       {$I-}
       assign(ff,'quizz.txt');
       {$I+}
       if ioresult<>0 then quitter('FICHIER QUIZZ.TXT ABSENT DU REPERTOIRE');
       reset(ff);
       readln(ff,nb_questions);
       if nb_questions>max_questions then quitter('FICHIER QUIZZ POSSEDE PLUS DE QUESTIONS QUE LE PROGRAMME PEUT TRAITER');
       for cpta:=1 to nb_questions do readln(ff,veb[cpta].question);
    end;
     
    PROCEDURE GENERE_QUIZZ;
    VAR incremente : byte;
    alea : byte;
    begin
       randomize;
       incremente:=0;
       repeat
          alea:=succ(random(nb_questions));
    {permet de ne plus pouvoir sélectionner une question préalablement incluse dans le tri.
    la variable tableau_genere agit un peu comme un pointeur déguisé, donnant en fait la localisation (le n° d'ordre) dans la variable veb}
          if veb[alea].selection=false then begin
             inc(incremente,1);
             tableau_genere[incremente]:=alea;
             veb[alea].selection:=true;
          end;
       until incremente=nb_questions;
    end;
     
    BEGIN
       clrscr;
       initialise_quizz {mettre les variables à '0'};
       charge_quizz; {charger le fichier externe}
       genere_quizz; {faire le mélange aléatoier}
    {une méthode simplissime d'affichage sans effets}
       for cpta:=1 to nb_questions do begin
          clrscr;
          write(veb[tableau_genere[cpta]].question);
          repeat until keypressed;
          if keypressed then cle:=readkey;
          if cle=chr(27) then quitter('FIN DU PROGRAMME');
       end;
    END.
    Sur ce modèle, la variable record pourrait s'enrichir de champs comme 'réponse', 'points par réponse', etc...

    Espérant que cela t'aide et si quelqu'un sait transformer ce bazar en tableau dynamique, il m'éclairerait sûrement !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment permuter l'ordre des questions dans un quiz
    Par lex001 dans le forum Débuter
    Réponses: 3
    Dernier message: 12/02/2009, 02h30
  2. [ClassPath]Comment inclure les librairies dans un .BAT
    Par Kyti dans le forum Général Java
    Réponses: 2
    Dernier message: 26/03/2005, 08h07
  3. Comment tuer les processus dans l'état sleeping sans EM ?
    Par David Guillouet dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 04/02/2005, 09h42
  4. Comment afficher les toolTipText dans une zone de statut ?
    Par nicok01 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 28/01/2005, 13h32
  5. Comment éviter les doublons dans ma table
    Par einegel dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/11/2004, 12h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo