Exercices premium — Algorithmique / Scratch
Exercices progressifs + pièges : variables, conditions, boucles (y compris « jusqu’à »),
simulations et débogage (identifier et corriger des erreurs).
Corrigés détaillés afficher/masquer.
Exercice 1 — « Mettre » vs « changer »
On part de \(x=10\).
1) Après « mettre \(x\) à 4 », que vaut \(x\) ? 2) Après « changer \(x\) de 4 », que vaut \(x\) ? 3) Quelle instruction correspond à \(x\leftarrow x+1\) ?
1) Après « mettre \(x\) à 4 », que vaut \(x\) ? 2) Après « changer \(x\) de 4 », que vaut \(x\) ? 3) Quelle instruction correspond à \(x\leftarrow x+1\) ?
Afficher le corrigé
1) « mettre \(x\) à 4 » remplace : \(x=4\).
2) « changer \(x\) de 4 » ajoute : \(x=10+4=14\).
3) \(x\leftarrow x+1\) correspond à « changer \(x\) de 1 » (ou « mettre \(x\) à \(x+1\) »).
Exercice 2 — Initialiser une variable (piège)
On veut calculer la somme \(S=1+2+3+\dots+10\) avec un algorithme.
On propose :
(A) Répéter 10 fois : changer \(S\) de \(i\) (avec \(i\) qui vaut 1 puis 2 puis …)
Question : quelle instruction manque au début pour que ça marche à coup sûr ?
On propose :
(A) Répéter 10 fois : changer \(S\) de \(i\) (avec \(i\) qui vaut 1 puis 2 puis …)
Question : quelle instruction manque au début pour que ça marche à coup sûr ?
Afficher le corrigé
Il faut initialiser : mettre \(S\) à 0 avant la boucle.
Sinon \(S\) peut contenir n’importe quelle valeur au départ.
Sinon \(S\) peut contenir n’importe quelle valeur au départ.
Exercice 3 — Lire un pseudo-code
On exécute :
\[
x\leftarrow 2
\]
Puis on répète 4 fois :
\[
x\leftarrow 3x
\]
1) Calculer la valeur finale de \(x\).
2) Écrire le calcul en une seule expression.
Afficher le corrigé
1) Multiplier par 3 quatre fois :
\[
x = 2\times 3^4 = 2\times 81 = 162
\]
2) Expression : \(2\times 3^4\).
Exercice 4 — Condition : gérer le cas limite
On veut afficher « positif » si \(x\ge 0\) et « négatif » sinon.
Un élève écrit : « si \(x>0\) alors positif sinon négatif ».
1) Pourquoi ce programme est-il faux ? 2) Corriger la condition.
Un élève écrit : « si \(x>0\) alors positif sinon négatif ».
1) Pourquoi ce programme est-il faux ? 2) Corriger la condition.
Afficher le corrigé
1) Il oublie le cas \(x=0\) : avec \(x=0\), la condition \(x>0\) est fausse → il affiche « négatif » (erreur).
2) Il faut : « si \(x\ge 0\) alors positif sinon négatif ».
Exercice 5 — Boucle « jusqu’à » : combien de tours ?
On part de \(x=0\). On répète jusqu’à \(x>100\) :
\[
x\leftarrow x+9
\]
1) Combien de tours effectue-t-on ?
2) Quelle est la valeur de \(x\) à la fin ?
Afficher le corrigé
1) On cherche le plus petit \(n\) tel que \(9n>100\).
Or \(9\times 11=99\) et \(9\times 12=108\). Donc 12 tours.
2) Valeur finale : \(x=108\).
2) Valeur finale : \(x=108\).
Exercice 6 — Débogage : boucle infinie
Programme :
1) mettre \(x\) à 0 2) répéter jusqu’à \(x>50\) : dire \(x\)
1) Expliquer pourquoi le programme ne s’arrête jamais. 2) Proposer une correction minimale.
1) mettre \(x\) à 0 2) répéter jusqu’à \(x>50\) : dire \(x\)
1) Expliquer pourquoi le programme ne s’arrête jamais. 2) Proposer une correction minimale.
Afficher le corrigé
1) Dans la boucle, \(x\) ne change jamais. Il reste 0, donc \(x>50\) n’est jamais vrai → boucle infinie.
2) Il faut modifier \(x\) dans la boucle, par exemple :
\[
x\leftarrow x+5
\]
(ou « changer \(x\) de 5 »).
Exercice 7 — Débogage : réinitialisation dans la boucle
Objectif : calculer \(S=1+2+3+4+5\).
Programme d’un élève :
répéter 5 fois : mettre \(S\) à 0 changer \(S\) de \(i\)
1) Expliquer l’erreur. 2) Corriger le programme (une phrase suffit).
répéter 5 fois : mettre \(S\) à 0 changer \(S\) de \(i\)
1) Expliquer l’erreur. 2) Corriger le programme (une phrase suffit).
Afficher le corrigé
1) « mettre \(S\) à 0 » est dans la boucle : on efface la somme à chaque tour.
2) Il faut initialiser \(S=0\) avant la boucle, puis dans la boucle ajouter \(i\).
Exercice 8 — Écrire un algorithme (niveau solide)
On veut calculer la somme des 6 premiers nombres impairs :
\[
1+3+5+7+9+11
\]
1) Écrire un algorithme (pseudo-code) utilisant une boucle.
2) Calculer le résultat.
Afficher le corrigé
1) Exemple de pseudo-code :
mettre \(S\) à 0 mettre \(x\) à 1 répéter 6 fois : changer \(S\) de \(x\) changer \(x\) de 2
2) Somme : \[ 1+3+5+7+9+11 = 36 \]
mettre \(S\) à 0 mettre \(x\) à 1 répéter 6 fois : changer \(S\) de \(x\) changer \(x\) de 2
2) Somme : \[ 1+3+5+7+9+11 = 36 \]
Exercice 9 — Simulation d’une suite (modèle simple)
On définit une suite \((u_n)\) par :
\[
u_0=20 \quad \text{et} \quad u_{n+1}=u_n+7
\]
1) Calculer \(u_1\), \(u_2\), \(u_3\).
2) Écrire un algorithme qui affiche \(u_{10}\).
3) Donner la valeur de \(u_{10}\).
Afficher le corrigé
1) \(u_1=27\), \(u_2=34\), \(u_3=41\).
2) Algo :
mettre \(u\) à 20 répéter 10 fois : changer \(u\) de 7 afficher \(u\)
3) \(u_{10}=20+10\times 7=90\).
mettre \(u\) à 20 répéter 10 fois : changer \(u\) de 7 afficher \(u\)
3) \(u_{10}=20+10\times 7=90\).
Exercice 10 — Débogage complet (2 bugs)
Objectif : afficher les nombres \(1,2,3,\dots,10\).
Programme proposé :
mettre \(x\) à 1 répéter 10 fois : dire \(x\) mettre \(x\) à 1
1) Expliquer le problème. 2) Corriger pour que ça affiche bien \(1\) à \(10\).
mettre \(x\) à 1 répéter 10 fois : dire \(x\) mettre \(x\) à 1
1) Expliquer le problème. 2) Corriger pour que ça affiche bien \(1\) à \(10\).
Afficher le corrigé
1) Dans la boucle, on remet \(x\) à 1 à chaque tour, donc on affiche toujours 1.
2) Correction :
mettre \(x\) à 1 répéter 10 fois : dire \(x\) changer \(x\) de 1
mettre \(x\) à 1 répéter 10 fois : dire \(x\) changer \(x\) de 1