Algorithmique impérative/Quiz

Un livre de Wikilivres.
Sauter à la navigation Sauter à la recherche
Algorithmique impérative
PyQt
Sommaire
Théorie de l'algorithmique impérative
  1. Qu'est ce qu'un algorithme impératif Fait à environ 50 %
  2. Les types, les opérateurs et les expressions Fait à environ 50 %
  3. Les constantes, les variables Fait à environ 50 %
  4. Les instructions, les blocs d'instructions Fait à environ 50 %
  5. L'assignation Fait à environ 50 %
  6. Les exécutions conditionnelles Fait à environ 50 %
  7. Les structures itératives Fait à environ 50 %
  8. Les tableaux Fait à environ 50 %
  9. Les procédures et les fonctions Ébauche
  10. Le type enregistrement Fait à environ 50 %
  11. L'algorithme au final : vue d'ensemble En cours
  12. Exercices En cours
Outils de travail
Problèmes posés, analysés, résolus et commentés
Annexes
Modifier ce modèle ce sommaire

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...

 1 program quiz;
 2 
 3 const
 4 	NBQ = 4; (* nombre de questions dans la base de données *)
 5 
 6 var
 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 
17 begin
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)
80 end.