Bonjour et bienvenue,
J'imagine que, depuis le 08/12, tu as dû avancer sur ton programme ? Sur le code source incomplet que tu as posté, voici quelques remarques.
Tout d'abord, il n'y a pas de rapport fonctionnel entre le menu et le chargement du contenu des fichiers. Je retirerais donc l'appel du menu de la fonction Qaleatoire et je le placerais dans le programme principal :
1 2 3 4 5 6
| {Programme Principal}
begin
Numero := Menu;
Qaleatoire(TabQR,Numero);
ChoixTour(Numero,TabQR);
end. |
Je pense, soit dit en passant, que le nom de la fonction "Qaleatoire" ne décrit pas ce qu'elle fait : comme elle charge le contenu de trois fichiers, tu pourrais par exemple l'appeler "ChargementTabQR".
Au niveau du menu, tu lis trois variables entières puis tu les convertis en caractères avant de les concaténer pour retourner une valeur de type chaîne de caractères. Ne serait-il pas plus simple de lire directement des caractères ?
1 2 3 4 5 6 7 8 9 10 11 12
| var reponse1, reponse2, reponse3 : Char;
writeln('Entrez le chiffre correspondant');
readln(reponse2);
if (reponse2<>'1') and (reponse2<>'2') and (reponse2<>'3') then
repeat
writeln('Veuillez entrer une commande correcte');
read(reponse2);
until (reponse2='1') or (reponse2='2') or (reponse2='3');
// Valeur de retour :
Menu:=reponse2+reponse3; |
Ensuite, tu effectues un readln avant la boucle et un autre read dans la boucle (en cas de réponse incorrecte). Tu peux simplifier tout cela, par exemple :
1 2 3 4 5 6
| writeln('Entrez le chiffre correspondant :');
repeat
readln(reponse3);
if (reponse3<>'1') and (reponse3<>'2') and (reponse3<>'3') then
writeln('Veuillez entrer une commande correcte : ');
until (reponse3='1') or (reponse3='2') or (reponse3='3'); |
Il n'y a que trois valeurs possibles ('1', '2' ou '3') mais imagine que tu en aies 10. Avoue que l'écriture des tests devient fastidieuse ! Tu peux donc utiliser l'opérateur in :
until (reponse1 in ['1'..'3']);
Je n'ai pas trop regardé le reste car il y a de grandes chances que tu l'aies retravaillé entre temps.
Partager