Algorithmique impérative/Quiz

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ématiqueModifier

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éesModifier

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.

SolutionModifier

Implémentation en PascalModifier

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.