Exercice 1 (5 points) — dans l'esprit des sessions 2016, 2020 et 2026
Pour programmer un jeu de société numérique, on dispose de la fonction Aléa(a, b), qui retourne un entier aléatoire compris entre a et b, bornes incluses, avec a ≤ b. Rappel : ASCII("a") = 97 et les 26 lettres minuscules ont des codes consécutifs.
- Compléter chacun des traitements suivants par un appel à
Aléa.- Pile ou face (pile = 1, face = 0) : le résultat est affecté à
P. - Roue de loterie à 8 secteurs numérotés de 1 à 8 : le résultat est affecté à
R. - Code secret : un entier positif de 3 chiffres, affecté à
C. - Tirage de 5 lettres minuscules, rangées dans un tableau
Ld'indices 0 à 4.
- Pile ou face (pile = 1, face = 0) : le résultat est affecté à
- Un ancien programme utilise la fonction
Aléa(n), qui retourne un entier de 0 à n − 1. Valider par V ou F chacune des instructions suivantes, censées affecter àXun entier aléatoire de l'intervalle [5, 20].X ← 5 + Aléa(15)X ← 5 + Aléa(16)X ← Aléa(5 + 20)X ← 20 - Aléa(16)
- Un tableau
TdeNentiers est rangé dans l'ordre décroissant. On veut tirer un entierEcompris entre le plus petit et le plus grand élément deT. Une seule des propositions suivantes est correcte : laquelle ? Justifier.E ← Aléa(T[0], T[N-1])E ← Aléa(T[N-1], T[0])E ← Aléa(T[1], T[N])
- Écrire l'algorithme d'une procédure
Remplir (@T : TAB, N : Entier)qui remplitTparNentiers aléatoires compris entre 10 et 60, puis la séquence qui tire au hasard un indicekdeTet affiche l'élément correspondant. Réécrire les deux appels àAléaavec l'ancienne notationAléa(n).
Voir la correction commentéeAprès avoir posé votre démarche
1.a P ← Aléa(0, 1).
1.b R ← Aléa(1, 8).
1.c Idée : un entier positif de 3 chiffres va de 100 à 999. C ← Aléa(100, 999).
1.d Idée : tirer le code, puis le transformer en lettre par Chr ; le code de « z » est 97 + 25 = 122.
Pour i de 0 à 4 Faire
L[i] ← Chr(Aléa(97, 122))
Fin Pour2. Idée : l'intervalle [5, 20] contient 20 − 5 + 1 = 16 entiers ; il faut donc Aléa(16), décalé pour démarrer à 5.
- a. F —
Aléa(15)donne 0 à 14, donc X va de 5 à 19 : 20 n'est jamais tiré. - b. V — 0 à 15, décalé de 5 : X va de 5 à 20.
- c. F —
Aléa(25)donne 0 à 24. - d. V — 20 − 0 = 20 et 20 − 15 = 5 : la même plage [5, 20], parcourue à l'envers.
3. Proposition b. Idée : dans un tableau décroissant, le plus grand élément est T[0] et le plus petit T[N-1] ; Aléa(a, b) attend la plus petite borne en premier. La proposition a donne les bornes dans l'ordre inverse (a > b) ; la proposition c utilise T[N], qui n'existe pas (indices 0 à N − 1), et T[1], qui n'est pas le plus grand élément.
4.
Procédure Remplir (@T : TAB, N : Entier)
DEBUT
Pour i de 0 à N-1 Faire
T[i] ← Aléa(10, 60)
Fin Pour
FINk ← Aléa(0, N-1)
Ecrire(T[k])T.D.O.L de Remplir : i — Entier — compteur. Avec l'ancienne notation, [10, 60] compte 51 valeurs : T[i] ← 10 + Aléa(51) ; et l'indice, de 0 à N − 1, s'écrit k ← Aléa(N).