Axe : Boucles Sections : Sc. Expérimentales, Mathématiques & Sc. Techniques Conventions 2024-2025

Série N°4 : Structures itératives N°2

Traces manuelles, complétion d'algorithmes, recherche dichotomique interactive et T.D.O.

Série N°4

Exercice 1 : Analyse des boucles Répéter et TantQue

🟢 Facile

Pour chacune des séquences suivantes, déterminer la valeur finale de chaque variable ainsi que le nombre d'itérations.

x ← 8
Répéter
  x ← x + 2
  y ← x * 2
Jusqu'à y > 25
x = - y = - Nb. d'itérations :
x ← 5
Répéter
  x ← x + 2
  y ← x * 2
Jusqu'à y < 30
x = - y = - Nb. d'itérations :
p ← 0
Tant Que p > 5 Faire
  p ← p + 5
Fin Tant Que
p = - Nb. d'itérations :
p ← 0
Tant Que p < 5 Faire
  p ← p + 2
Fin Tant Que
p = - Nb. d'itérations :
x ← 16
pas ← 1
Répéter
  x ← x + pas
  pas ← pas + 1
Jusqu'à x > 25
x = - pas = - Nb. d'itérations :
x ← 15
Répéter
  x ← x - 2
Jusqu'à x > 20
x = - Nb. d'itérations :
x ← 13
p ← 0
Tant Que x ≠ 0 Faire
  p ← p + (x mod 2 ≠ 1)
  x ← x div 2
Fin Tant Que
x = - p = - Nb. d'itérations :
ch ← "1100"
i ← 0
p ← 0
Tant Que i < Long(ch) Faire
  p ← p * 2 + valeur(ch[i])
  i ← i + 1
Fin Tant Que
p = - i = - Nb. d'itérations :
💡 Indice

Indice : Suivre pas à pas les instructions. Attention aux boucles TantQue dont la condition est fausse dès le départ (0 itération) et aux boucles Répéter qui exécutent toujours leur corps au moins une fois !

Exercice 2 : Traduction et affichage de la boucle Pour

🟢 Facile

Traduire les algorithmes du tableau ci-dessous en Python tout en indiquant leurs affichages.

Pour i de 1 à 5 faire
  Ecrire_nl(i)
Fin Pour
Pour i de 1 à 5 faire
  Ecrire(i*i,' ')
Fin Pour
Pour i de 1 à 7 (pas=2) faire
  Ecrire_nl(i)
Fin Pour
Pour i de 5 à 1 (pas=-1) faire
  Ecrire_nl(i)
Fin pour
💡 Indice

Indice : Rappel : En Python, prêter une attention particulière aux bornes (incluse/excluse) manipulées dans la fonction range() .

Exercice 3 : Tournage à la main & Détermination du rôle

🟡 Moyen

Pour chacune des séquences algorithmiques ci-après, effectuer une exécution manuelle en fonction des valeurs données. Puis, en déduire le rôle.

N.B : a et b deux entiers non nuls

p ← 1
Pour i de 1 à b Faire
  p ← p * a
Fin pour
Ecrire(p)
Affichage pour a = 2, b = 5 :
Rôle :
p ← 1
Pour i de 1 à a Faire
  p ← p * i
Fin Pour
Ecrire(p)
Affichage pour a = 5 :
Rôle :
Tant Que a ≠ b Faire
  Si a > b alors
    a ← a - b
  Sinon
    b ← b - a
  Fin Si
Fin Tant Que
Ecrire(a)
Affichage pour a = 54, b = 10 :
Rôle :
x ← a
y ← b
Tant Que a ≠ b Faire
  Si a < b Alors
    a ← a + x
  Sinon
    b ← b + y
  Fin Si
Fin Tant Que
Ecrire(a)
Affichage pour a = 5, b = 6 :
Rôle :
C ← ""
Pour i de 0 à long(ch)-1 faire
  C ← ch[i] + C
Fin Pour
Ecrire(C)
Affichage pour ch = "BAC" :
Rôle :
test ← Vrai
Pour i de 0 à (long(ch) div 2) - 1 faire
  Si ch[i] ≠ ch[long(ch)-1-i] Alors
    test ← Faux
  Fin Si
Fin Pour
Ecrire(test)
Affichage pour ch = "RADAR" :
Rôle :
💡 Indice

Indice : Effectuer un tracé manuel pas à pas avec les valeurs d'entrée proposées pour observer l'évolution des variables et identifier l'opération mathématique ou le traitement de chaîne réalisé.

Exercice 4 : Complétion d'algorithmes (Glisser-Déposer les étiquettes)

🟡 Moyen

Glisser-déposer (ou cliquer pour sélectionner puis cliquer sur l'emplacement) les étiquettes ci-dessous dans les emplacements correspondants des algorithmes.

Algorithme 1 : Calculer la somme des chiffres pairs dans une chaîne numérique.
Algorithme Somme_Chiffres
Début
  Ecrire("Donner une chaîne numérique ? ") ; Lire(ch)
  S ← (1)
  Pour i de (2) Faire
    Si (3) Alors
      S ← (4)
    Fin Si
  Fin Pour
  Ecrire(S)
Fin
Algorithme 2 : Calculer le produit des diviseurs d'un entier sauf lui-même.
Algorithme Produit_Div
Début
  Ecrire("Donner n > 0 ? ") ; Lire(n)
  P ← (5)
  Pour i de (6) Faire
    Si (7) Alors
      P ← (8)
    Fin Si
  Fin Pour
  Ecrire(P)
Fin
💡 Indice

Indice : Pour l'algorithme 1, penser à convertir chaque caractère numérique afin de pouvoir tester sa parité. Pour l'algorithme 2, tester les diviseurs de n et accumuler leur produit.

Exercice 5 : Jeu de la devinette par recherche dichotomique

🔴 Difficile

Ecrire un programme en Python qui devine le nombre choisi par l'utilisateur.

  • L'utilisateur choisit un nombre secret entre 0 et 127.
  • L'ordinateur propose un nombre prop dans cet intervalle.
  • L'utilisateur répond par le signe :
    • + : si prop < secret
    • - : si prop > secret
    • = : Si prop = secret

L'ordinateur doit faire 7 essais au plus pour deviner exactement le nombre.

🎮 Simulation Interactive : Recherche Dichotomique
Intervalle [0 .. 127]
💭 Pensez à un nombre secret entre 0 et 127 dans votre tête. L'ordinateur va le deviner en 7 essais max !
Essai n° {{ attempts }} / {{ maxAttempts }} max Taille restante : {{ intervalSize }} nombre(s)
0 31 63 95 127
{{ prop }}
min = {{ min }} prop = {{ prop }} max = {{ max }}

L'ordinateur propose {{ prop }} . Votre nombre secret est-il :

🎉 Bravo ! Votre nombre secret {{ prop }} a été deviné !

L'ordinateur a réussi la recherche en seulement {{ attempts }} essai(s) sur 7 !

❌ Limite d'essais atteinte

L'ordinateur est arrivé au bout des 7 essais.

📜 Historique détaillé des étapes de dichotomie
Essai # Intervalle [min .. max] Proposition (prop) Votre réponse Éléments éliminés
#{{ h.essai }} [{{ h.min }} .. {{ h.max }}] {{ h.prop }} {{ h.sign }} -{{ h.eliminated }} nombre(s)
💡 Indice & Recherche Dichotomique

Indice : Appliquer l'algorithme de recherche dichotomique : initialiser min ← 0 et max ← 127 . À chaque étape, calculer la proposition au milieu prop ← (min + max) div 2 et ajuster l'une des bornes selon le signe donné par l'utilisateur.