< Algorithmique impérative

Problématique

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

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

Implémentation en Pascal

L'auteur vous demande de l'excuser pour la piètre qualité du contenu de la base de données...

 1program quiz;
 2
 3const
 4	NBQ = 4; (* nombre de questions dans la base de données *)
 5
 6var
 7	questions :       array [1..NBQ] of string; (* bases de données des questions *)
 8	reponses :        array [1..NBQ] of boolean; (* bases de données des réponses *)
 9	nb_questions :    integer; (* le nombre de questions à poser *)
10	numero_question : integer; (* l'indice d'une question dans la BdD *)
11	i :               integer; (* variable de boucle *)
12	reponse :         char; (* entrée clavier *)
13	r :               boolean; (* l'interprétation booléenne de l'entrée au clavier; *)
14        rep_valide :      boolean; (* réponse entrée valide *)
15	score :           integer; (* le score de joueur *)
16
17begin
18
19	(* remplissage de la base de données des questions *)
20	questions[1] := 'La réponse est 42';
21	questions[2] := 'faux et (vrai et (faux ou vrai))';
22	questions[3] := 'L''algorithmique impérative c''est cool';
23	questions[4] := 'si six scies scient six cyprès six-cent scies scient six-cent cyprès';
24
25	(* remplissage de la base de données des réponses *)
26	reponses[1] := true;
27	reponses[2] := false;
28	reponses[3] := true;
29	reponses[4] := true;
30
31	(* demande et gestion du nombre de questions *)
32	Writeln('Donner le nombre de questions voulues pour ce quiz :');
33	readln(nb_questions);
34	if nb_questions <= 0 then nb_questions := random(NBQ)+1;
35
36	(* initialisations *)
37	score := 0;
38
39	for i:=nb_questions downto 1 do begin
40
41		(* Information du joueur : nombre de questions restantes et score *)
42		Writeln('Il reste ',i, ' questions | SCORE : ', score);
43
44		(* on choisit une question au hasard dans le BdD et on l'affiche *)
45		numero_question := 1+random(NBQ);
46		writeln(questions[numero_question]);
47
48		(* on lit la réponse et on essaie de la comprendre *)
49		(* si on ne la comprend pas, on passe à la question suivante. Tant pis pour le score *)
50		readln(reponse);
51		rep_valide := true;
52		case reponse of
53			'o' : r := true;
54			'O' : r := true;
55			'v' : r := true;
56			'V' : r := true;
57			'n' : r := false;
58			'N' : r := false;
59			'f' : r := false;
60			'F' : r := false;
61			else rep_valide := false;
62		end;
63
64		if rep_valide then begin
65		(* on a la réponse du joueur, gestion du score et de l'affichage en fonction de la réponse BdD *)
66			if r = reponses[numero_question] then begin 
67				score := score+1;
68				writeln('Bonne réponse \o/');
69				end
70			else begin
71				writeln('Mauvaise réponse :(');
72			end;
73		else begin
74			writeln('je n''ai pas compris la réponse : entrer o(ui), v(rai), f(aux) ou n(on)');
75		end;
76	end;
77
78	(* informations finales *)
79	Writeln('Score final : ', score)
80end.
Cet article est issu de Wikibooks. Le texte est sous licence Creative Commons - Attribution - Partage dans les Mêmes. Des conditions supplémentaires peuvent s'appliquer aux fichiers multimédias.