Algorithmique impérative/Quiz
Problématique
[modifier | modifier le wikicode]On cherche à implémenter un programme qui, étant donnée une base de données de questions et de réponses correspondantes posent les questions et demande la réponse à un joueur. Le programme comptabilise les bonnes réponses et donne le score final. Le nombre de questions à poser est demandé au début de la partie, si le nombre donné est nul ou négatif, on choisit un nombre aléatoire entre un et le nombre de questions dans la base de données.
Les réponses seront soit
- vrai/faux
- une réponse en toutes lettres
- une réponse sous forme de nombre
Il est demandé d'implémenter seulement une de ces trois possibilités.
- À chaque question, le score actuel et le nombre de questions restantes est affiché
- On ne demande pas que le programme ne pose pas deux fois la même question au cours d'une même partie, réfléchir tout de même à un moyen de faire cela.
Données
[modifier | modifier le wikicode]questions : tableau de 0 à NBQ de chaine; (* bases de données des questions *) réponses : tableau de 0 à NBQ de T (* bases de données des réponses *)
On suppose ces tableaux remplis, bien évidement la réponse à la question questions[i] est réponses[i]. T est booléen, integer, ou chaine : à vous de choisir et d'assumer ce choix dans l'algorithme.
Solution
[modifier | modifier le wikicode]Implémentation en Pascal
[modifier | modifier le wikicode]L'auteur vous demande de l'excuser pour la piètre qualité du contenu de la base de données...
program quiz;
const
NBQ = 4; (* nombre de questions dans la base de données *)
var
questions : array [1..NBQ] of string; (* bases de données des questions *)
reponses : array [1..NBQ] of boolean; (* bases de données des réponses *)
nb_questions : integer; (* le nombre de questions à poser *)
numero_question : integer; (* l'indice d'une question dans la BdD *)
i : integer; (* variable de boucle *)
reponse : char; (* entrée clavier *)
r : boolean; (* l'interprétation booléenne de l'entrée au clavier; *)
rep_valide : boolean; (* réponse entrée valide *)
score : integer; (* le score de joueur *)
begin
(* remplissage de la base de données des questions *)
questions[1] := 'La réponse est 42';
questions[2] := 'faux et (vrai et (faux ou vrai))';
questions[3] := 'L''algorithmique impérative c''est cool';
questions[4] := 'si six scies scient six cyprès six-cent scies scient six-cent cyprès';
(* remplissage de la base de données des réponses *)
reponses[1] := true;
reponses[2] := false;
reponses[3] := true;
reponses[4] := true;
(* demande et gestion du nombre de questions *)
Writeln('Donner le nombre de questions voulues pour ce quiz :');
readln(nb_questions);
if nb_questions <= 0 then nb_questions := random(NBQ)+1;
(* initialisations *)
score := 0;
for i:=nb_questions downto 1 do begin
(* Information du joueur : nombre de questions restantes et score *)
Writeln('Il reste ',i, ' questions | SCORE : ', score);
(* on choisit une question au hasard dans le BdD et on l'affiche *)
numero_question := 1+random(NBQ);
writeln(questions[numero_question]);
(* on lit la réponse et on essaie de la comprendre *)
(* si on ne la comprend pas, on passe à la question suivante. Tant pis pour le score *)
readln(reponse);
rep_valide := true;
case reponse of
'o' : r := true;
'O' : r := true;
'v' : r := true;
'V' : r := true;
'n' : r := false;
'N' : r := false;
'f' : r := false;
'F' : r := false;
else rep_valide := false;
end;
if rep_valide then begin
(* on a la réponse du joueur, gestion du score et de l'affichage en fonction de la réponse BdD *)
if r = reponses[numero_question] then begin
score := score+1;
writeln('Bonne réponse \o/');
end
else begin
writeln('Mauvaise réponse :(');
end;
else begin
writeln('je n''ai pas compris la réponse : entrer o(ui), v(rai), f(aux) ou n(on)');
end;
end;
(* informations finales *)
Writeln('Score final : ', score)
end.