VIII.1. Exercices sur le premier cours
*Écrire un petit programme qui gère les 3 notes de 4 élèves. Ces notes seront demandées à l’utilisateur du programme. Pour chaque élève, calculer la moyenne des trois notes. Afficher cette moyenne arrondie (comparer les fonctions ROUND(x) et TRUNC(x)). Calculer la moyenne des notes, la moyenne des moyennes et la moyenne des moyennes arrondies.
Récrire le programme de façon à avoir le moins de variables possibles.
* Écrire un programme dont une variable contient les lettres de l’alphabet (en minuscule). Interroger l’utilisateur pour qu’il entre un nombre n et afficher le message suivant :
‘La ‘n’ième lettre de l’alphabet est’ ?
* Écrire un programme qui demande à l’utilisateur une lettre et qui renvoie la place de cette lettre dans l’alphabet (on utilisera pour cela la fonction ord qui renvoie la valeur ASCII d’un caractère).
Si x est une variable caractère, que fait CHR(ORD(x)) ?
VIII.2. Exercices sur les IF THEN ELSE
Correction du III.1.g. sur tri de 3 nombres N1, N2, N3.
IF N1>N2
THEN
BEGIN
IF N2>N3
THEN N1>N2>N3
ELSE BEGIN
IF N1>N3
THEN N1>N3>N2
ELSE N3>N1>N2
END
END
ELSE
BEGIN
IF N1>N3
THEN N2>N1>N3
ELSE
BEGIN
IF N2>N3
THEN N2>N3>N1
ELSE N3>N2>N1
END
END
VIII.3. Programme pile_face_menteur
program pile_face_menteur ;
var
HCapital, OCapital,Odiff: integer;
HReponse,HControle,OChoix: char;
begin
randomize;
HCapital:=10; OCapital:=10;
repeat
if random(2)=0 then OChoix:=’p’ {0 ou1}
else OChoix:=’f’;
write (‘Ai-je choisi pile, ou face (p/f) ? ‘) readln(HReponse);
if (HReponseOChoix) or (random(3)=0) then
begin {pas trouvé ou ordinateur triche}
writeln(‘… c »est faux !’);
write(‘… contrôlez-vous (o/n) ? ‘) ; readln(HControle);
if (HControle=’o’) then
begin {ordinateur a triché}
if (HReponse=OChoix) then
begin
writeln (‘… J »avais menti… Je vous donne deux points.’);
Odiff:=-2
end
else
begin { ordinateur a triché }
writeln (‘… J »étais sincère… Je vous prends deux points.’);
Odiff:=2
end
end
else
begin { utilisateur ne vérifie pas }
writeln(‘… C »est plus prudent… Je vous prends donc un point…’);
Odiff:=1
end
end
else
begin
writeln(‘…Vous avez raison… Je vous donne un point.’);
Odiff:=1
end;
OCapital:=OCapital+Odiff; HCapital:=HCapital-Odiff;
writeln(‘… Il vous en reste ‘,HCapital, ‘… J »en ai ‘,OCapital, ‘.’),
until OCapital*HCapital0) then writeln(‘J »ai gagné!’);
else writeln(‘Mais rira bien qui rira le dernier !’);
end.
VIII.4. Exercice sur les tableaux
* Tri bulle
Soit « l’algorithme » de tri suivant :
Répéter jusqu’à ce que l’on n’ait fait aucune permutation dans le tableau.
Comparer deux éléments consécutifs du tableau en partant du début et si le second est plus petit que le premier alors les inverser.
Incrémenter d’un indice vers la fin du tableau et recommencer la comparaison.
Fin.
Exemple :
1 5 0 2
10 on permute, ce qui donne
1 0 5 2
5
On recommence
1>0 on permute, ce qui donne
0 1 2 5
1
Ce qui peut s’écrire :variable
T : tableau ;
i : entier ;
Fini : booléen ;
Début
Fini := Vrai ;
Répéter
Pour i:=début_tableau à fin_tableau faire
Si (T[i] > T[i+1] Alors
inverser T[i] et T[i+1] ;
Fini:= Faux ;
Fsi
Fait
Jusqu’à Fini=Vrai
Afficher T ;
Fin.
Écrireun programme Pascal réalisant ce tri.
*Tri par section
Pour tous les indices du tableau à partir de l’indice 2 Faire sauvegarder T[indice_courant] dans une variable x ;
initialiser un second indice j à indice_courant – 1 ;
Tant que (x0) Faire