Algorithmique / Scratch

Boucles • conditions • variables • algorithmes • simulations aléatoires • débogage.


Exercices PREMIUM (HARD) — Algorithmique / Scratch (3e)

Niveau Brevet 19–20/20 : lecture d’algorithmes, tableaux de traces, conditions composées, boucles “tant que”, simulations aléatoires et débogage.

Trace Boucles Si / Sinon Aléatoire Débogage
Exercice 1 — Tableau de traces (conditions composées)
Énoncé

On considère l’algorithme ci-dessous (pseudo-code). On saisit successivement les valeurs : \(x=12\), puis \(x=7\), puis \(x=10\), puis \(x=-2\).

\[ \begin{array}{l} c \leftarrow 0 \\ S \leftarrow 0 \\ \text{Répéter 4 fois :} \\ \quad \text{Lire } x \\ \quad \text{Si } (x \ge 0 \text{ ET } x \le 10)\ \text{OU}\ (x=12)\ \text{alors} \\ \qquad c \leftarrow c+1 \\ \qquad S \leftarrow S+x \\ \text{Afficher } c \\ \text{Afficher } S \end{array} \]
  1. Compléter le tableau de traces (valeurs de \(c\) et \(S\) après chaque saisie).
  2. Donner les valeurs finales affichées.
Tableau de traces (à compléter)
Étape \(x\) Test vrai ? \(c\) \(S\)
112
27
310
4-2
Correction (détaillée)

On incrémente \(c\) et on ajoute à \(S\) si : \((0 \le x \le 10)\) OU \((x=12)\).

\[ \begin{array}{c|c|c|c|c} \text{Étape} & x & \text{Test} & c & S \\ \hline 1 & 12 & \text{vrai (}x=12\text{)} & 1 & 12 \\ 2 & 7 & \text{vrai (}0\le7\le10\text{)} & 2 & 19 \\ 3 & 10 & \text{vrai (}0\le10\le10\text{)} & 3 & 29 \\ 4 & -2 & \text{faux} & 3 & 29 \end{array} \]
Valeurs affichées : \(\boxed{c=3}\) et \(\boxed{S=29}\).
Exercice 2 — Boucle “tant que” (croissance + arrêt)
Énoncé

On exécute l’algorithme suivant :

\[ \begin{array}{l} x \leftarrow 3 \\ n \leftarrow 0 \\ \text{Tant que } x \le 80 \text{ faire :} \\ \quad x \leftarrow 2x + 5 \\ \quad n \leftarrow n+1 \\ \text{Afficher } n \\ \text{Afficher } x \end{array} \]
  1. Compléter un tableau de traces jusqu’à l’arrêt (au moins 4 lignes).
  2. Donner les valeurs finales de \(n\) et \(x\) affichées.
  3. Expliquer pourquoi la boucle s’arrête forcément.
Diagramme (évolution dans la boucle)
Test : \(x \le 80\) ? tant que… Vrai ? Mise à jour \(x \leftarrow 2x+5,\; n\leftarrow n+1\) Retour test Oui Non → arrêt
Correction (détaillée)
\[ \begin{array}{c|c|c} \text{Tour} & x & n \\ \hline 0 & 3 & 0 \\ 1 & 2\cdot3+5=11 & 1 \\ 2 & 2\cdot11+5=27 & 2 \\ 3 & 2\cdot27+5=59 & 3 \\ 4 & 2\cdot59+5=123 & 4 \end{array} \]

La boucle s’arrête après le tour 4 car \(x=123\) et \(123>80\). On affiche donc \(\boxed{n=4}\) et \(\boxed{x=123}\).

Pourquoi ça s’arrête : à chaque tour, \(x\) augmente fortement (on double puis on ajoute 5), donc on dépasse forcément 80.
Exercice 3 — Débogage (bug subtil “compteur / accumulateur”)
Énoncé

On veut calculer la moyenne de 6 nombres saisis (qui peuvent être négatifs). Voici un algorithme proposé :

\[ \begin{array}{l} S \leftarrow 0 \\ \text{Répéter 6 fois :}\\ \quad \text{Lire } x \\ \quad S \leftarrow x \\ m \leftarrow \dfrac{S}{6} \\ \text{Afficher } m \end{array} \]
  1. Expliquer précisément pourquoi cet algorithme est faux.
  2. Écrire l’algorithme corrigé.
  3. Tester votre correction avec : \(2,\; -1,\; 4,\; 0,\; 3,\; -2\).
Correction (détaillée)

Erreur : la ligne \(S \leftarrow x\) écrase la somme à chaque tour. À la fin, \(S\) vaut seulement le dernier nombre lu. Il faut additionner : \(S \leftarrow S+x\).

\[ \begin{array}{l} S \leftarrow 0 \\ \text{Répéter 6 fois :}\\ \quad \text{Lire } x \\ \quad S \leftarrow S + x \\ m \leftarrow \dfrac{S}{6} \\ \text{Afficher } m \end{array} \]

Test : \(S = 2 + (-1) + 4 + 0 + 3 + (-2) = 6\), donc \[ m=\dfrac{6}{6}=1 \] Valeur affichée : \(\boxed{1}\).

Piège Brevet : “mettre à” ≠ “ajouter à” (Scratch).
Exercice 4 — Simulation aléatoire (fréquence + interprétation)
Énoncé

On simule un jeu : on tire un entier aléatoire \(r\) entre 1 et 20. On dit que le tirage est gagnant si \(r\in[5;8]\) ou \(r\in[15;20]\).

  1. Écrire un algorithme qui répète \(N\) fois le tirage et calcule la fréquence de gain.
  2. Calculer la probabilité théorique de gagner.
  3. Comparer théorie et simulation pour \(N=1000\) (interprétation).
Correction (détaillée)
\[ \begin{array}{l} N \leftarrow 1000 \\ c \leftarrow 0 \\ \text{Répéter } N \text{ fois :}\\ \quad r \leftarrow \text{aléatoire}(1,20) \\ \quad \text{Si } (5 \le r \le 8)\ \text{OU}\ (15 \le r \le 20) \text{ alors } c \leftarrow c+1 \\ f \leftarrow \dfrac{c}{N} \\ \text{Afficher } f \end{array} \]

Théorie : il y a \(20\) issues équiprobables. Favorables : \([5;8]\) contient 4 valeurs (5,6,7,8) et \([15;20]\) contient 6 valeurs (15 à 20), soit \(4+6=10\) issues favorables. \[ \mathbb{P}(\text{gain})=\dfrac{10}{20}=\dfrac{1}{2} \] Donc la fréquence affichée doit être proche de \(0{,}5\) si \(N\) est grand.

Interprétation : si la simulation donne \(f \approx 0{,}48\) ou \(0{,}52\), c’est cohérent. Plus \(N\) augmente, plus \(f\) se stabilise vers \(0{,}5\).
Exercice 5 — Remonter l’algorithme (retrouver l’entrée)
Énoncé (HARD)

Un programme Scratch fait :

\[ \begin{array}{l} \text{Lire } x \\ y \leftarrow 3x-7 \\ \text{Si } y \text{ est multiple de } 5 \text{ alors afficher "OK"} \\ \text{Sinon afficher "NON"} \end{array} \]
  1. Trouver toutes les valeurs entières de \(x\) dans \([0;30]\) pour lesquelles le programme affiche “OK”.
  2. Expliquer la méthode (raisonnement modulo 5).
Correction (détaillée)

Condition “OK” : \(y=3x-7\) multiple de 5, donc \[ 3x-7 \equiv 0 \pmod{5} \] Or \(-7 \equiv -2 \equiv 3 \pmod{5}\), donc : \[ 3x + 3 \equiv 0 \pmod{5} \quad\Longleftrightarrow\quad 3x \equiv -3 \equiv 2 \pmod{5} \] On cherche \(x\) tel que \(3x \equiv 2 \pmod{5}\). On teste \(x \equiv 0,1,2,3,4\) : \[ 3\cdot 4 = 12 \equiv 2 \pmod{5} \] Donc \(x \equiv 4 \pmod{5}\).

Dans \([0;30]\), les valeurs sont : \[ x \in \{4,\;9,\;14,\;19,\;24,\;29\} \] Réponse : \(\boxed{4,\;9,\;14,\;19,\;24,\;29}\).

Lecture Brevet : c’est un exercice “entrée → sortie” inversé (raisonnement sur le test).