Exercice (5 points) — dans l’esprit des sessions de contrôle 2016 et 2020 et de la principale 2026
Soit la suite U définie, pour tout entier naturel n, par :
- Quel est l’ordre de récurrence de la suite U ? Justifier la réponse.
- Recopier et compléter le tableau donné après les questions par les valeurs des termes à .
- Calcul d’un terme :
- Écrire l’algorithme d’une fonction Terme(n) qui retourne sans utiliser de tableau : à chaque tour, on calcule le nouveau terme à partir des deux précédents, puis on décale ces deux variables.
- On définit, pour tout entier naturel n, . Quel doit être le type du résultat d’une fonction qui retourne ? Peut-on calculer avec l’opérateur Div ? Justifier à l’aide de .
- On se propose de ranger les N premiers termes de la suite U dans un tableau T (2 ≤ N ≤ 30).
- Déclarer un nouveau type TAB de 30 entiers.
- Compléter l’algorithme de la procédure Remplissage donné après les questions.
- Écrire l’algorithme d’une fonction Rang(B) qui retourne le plus petit rang n tel que , pour un entier B ≥ 3. Par exemple, Rang(100) retourne 7.
Tableau de la question 2 :
U0 | U1 | U2 | U3 | U4 | U5 | U6
2 | 1 | .. | .. | .. | .. | ..Algorithme de la question 4.b :
Procédure Remplissage (N : Entier, ……)
DEBUT
T[0] ← ……
T[1] ← ……
Pour i de …… à …… Faire
T[i] ← ……
Fin Pour
FINN.B. : N et B sont saisis dans le programme appelant. Chaque algorithme est accompagné de son tableau de déclaration des objets locaux.
Voir la correction commentéeAprès avoir posé votre démarche
1. Idée : compter les termes précédents qui apparaissent dans la relation. se calcule à partir de et de : la suite est récurrente d’ordre 2. C’est pourquoi deux valeurs initiales, et , sont données.
2. ; ; ; ; .
U0 | U1 | U2 | U3 | U4 | U5 | U6
2 | 1 | 5 | 7 | 17 | 31 | 653.a Idée : a contient , b contient ; après le calcul de u, on décale dans cet ordre : a ← b, puis b ← u. Inverser ces deux affectations écraserait avant de le recopier.
Fonction Terme (n : Entier) : Entier
DEBUT
Si n = 0 Alors
Retourner 2
Sinon
a ← 2
b ← 1
Pour i de 2 à n Faire
u ← b + 2 * a
a ← b
b ← u
Fin Pour
Retourner b
FinSi
FINTDOL de Terme :
a,b— Type/Nature : Entier — les deux derniers termes calculésu— Type/Nature : Entier — nouveau termei— Type/Nature : Entier — rang du terme calculé
Trace de Terme(5) : i = 2 : u = 5, a = 1, b = 5 ; i = 3 : u = 7, a = 5, b = 7 ; i = 4 : u = 17, a = 7, b = 17 ; i = 5 : u = 31, a = 17, b = 31. Retour . Pour n = 1, la boucle ne s’exécute pas et la fonction retourne 1. Si l’on écrit b ← u avant a ← b, U₃ devient 5 + 2 × 5 = 15 au lieu de 7.
3.b n’est pas un entier : le résultat doit être de type et le calcul utilise la division /. Avec Div, on obtiendrait 7 Div 5 = 1, le quotient entier, ce qui est faux.
4.a Tableau de déclaration des nouveaux types : TAB = Tableau de 30 Entiers (cases 0 à 29).
4.b Idée : T est modifié, il est passé par référence (@) ; les deux premières cases reçoivent les termes initiaux, la boucle commence donc à 2 et s’arrête à N − 1 (N termes, de à ).
Procédure Remplissage (N : Entier, @T : TAB)
DEBUT
T[0] ← 2
T[1] ← 1
Pour i de 2 à N - 1 Faire
T[i] ← T[i - 1] + 2 * T[i - 2]
Fin Pour
FINTDOL : i — Entier. Pour N = 8, T contient 2, 1, 5, 7, 17, 31, 65, 127. Le tableau garde tous les termes, alors que Terme n’en garde que deux.
5. Idée : le nombre de tours dépend de B et non d’un rang connu : Tant que le terme courant est inférieur à B, on calcule le suivant en comptant les rangs. Comme B ≥ 3, et sont inférieurs à B : on peut démarrer au rang 1.
Fonction Rang (B : Entier) : Entier
DEBUT
n ← 1
a ← 2
b ← 1
Tant que b < B Faire
u ← b + 2 * a
a ← b
b ← u
n ← n + 1
Fin Tant que
Retourner n
FINTDOL : n, a, b, u — Entier — rang courant, deux derniers termes, nouveau terme. Pour B = 100 : b prend les valeurs 5, 7, 17, 31, 65, 127 aux rangs 2 à 7 ; 127 ≥ 100 arrête la boucle, retour .