Exercice 3 - Partie A : Déplacements du robot · Bac Numérique et Sciences Informatiques Asie 2026 (jour 2)

Thème : Récursivité · Tiré du sujet Jour 2 (2026)

Énoncé

Exercice 3 (8 points)

Cet exercice porte sur la programmation Python et le routage RIP.

On étudie dans cet exercice des robots qui peuvent se déplacer et communiquer entre eux.

Partie A: Gestion des déplacements du robot

Chaque robot peut se déplacer en avant et tourner de 90 degrés à droite ou à gauche. Il reçoit ses instructions sous la forme d'une chaîne de caractères contenant des lettres et éventuellement des entiers et des parenthèses. S'il lit un 'A', le robot avance d'une distance correspondant à "un pas" (valeur fixée dans les réglages du robot). Il tourne à droite s'il lit un 'D' et à gauche s'il lit un 'G'.

Insérer un entier dans la chaîne permet de répéter une action ou une suite d'actions écrites entre parenthèses.

'12A' est équivalent à 'AAAAAAAAAAAA', '3(AD)' est équivalent à 'ADADAD'.

La figure 1 représente le parcours du robot lorsqu'il reçoit la chaîne '3ADA'

1.

Représenter le parcours effectué par le robot s'il reçoit la chaîne '4(AG)'.

2.

Recopier et compléter la ligne 4 du code de la fonction caracteres_valides qui prend en paramètre une chaîne de caractères et renvoie un booléen indiquant si tous les caractères de la chaîne sont valides.

def caracteres_valides(chaine):

valides = '0123456789ADG()'

intrus = [c for c in chaine if c not in valides]

3.

Recopier et compléter les lignes 4, 8 et 9 du code de la fonction entiers_valides qui prend en paramètre une chaîne de caractères et renvoie un booléen indiquant si tous les entiers sont bien placés dans la chaîne.

def entiers_valides(chaine):

chiffres = '0123456789'

if chaine[len(chaine)-1] in chiffres:

# Ligne 4

for indice in range(1, len(chaine)):

if chaine[indice] == ')':

if chaine[indice - 1] in chiffres:

# Ligne 8

# Ligne 9

4.

Écrire le code de la fonction parenthesage_correct qui prend en paramètre une chaîne de caractères et qui renvoie un booléen indiquant si le parenthésage de la chaîne de caractères est correct en utilisant l'algorithme décrit.

def parenthesage_correct(chaine):

5.

Lors de l'appel lire_nombre('AD179AGA', 2), la boucle while réalise trois itérations. Donner les valeurs des variables nombre et indice à la fin de chacune de ces itérations.

Itération

nombre

indice

Fin itération 1

Fin itération 2

Fin itération 3

6.

Recopier et compléter les lignes 7, 8 et 9 de la fonction lire_bloc donnée ci-dessous.

def lire_bloc(chaine, indice):

indice = indice + 1

caractere = chaine[indice]

bloc = ""

compteur = 1

while compteur > 0:

bloc =...

indice =...

caractere =...

if caractere == '(':

compteur = compteur + 1

if caractere == ')':

compteur = compteur - 1

return (bloc, indice)

7.

Recopier et compléter les lignes 12, 16 et 20 du code de la fonction lire_parcours.

def lire_parcours(chaine):

chiffres = "0123456789"

indice = 0

nombre = 1

while indice < len(chaine):

car_lu = chaine[indice]

if car_lu in 'AGD':

for k in range(nombre):

execute_mouvement(car_lu)

nombre = 1

elif car_lu in chiffres:

t =...

nombre = t[0]

indice = t[1]

elif car_lu == '(':

t =...

bloc = t[0]

indice = t[1]

for k in range(nombre):

...

nombre = 1

indice = indice + 1

Énoncé: Exercice 3 - Partie A : Déplacements du robot · Bac Numérique et Sciences Informatiques Asie 2026 (jour 2)

Corrigé

Corrigé proposé par AprenAI (non officiel)

1. Représenter le parcours effectué par le robot s'il reçoit la chaîne '4(AG)'.

Réponse : Un carré fermé de 1 pas de côté, parcouru dans le sens trigonométrique (anti-horaire) : - Départ : orienté vers l'est, le robot avance de 1 pas vers l'est (droite). - Tourne à gauche de 90° (regarde vers le nord) et avance de 1 pas vers le nord (haut). - Tourne à gauche de 90° (regarde vers l'ouest) et avance de 1 pas vers l'ouest (gauche). - Tourne à gauche de 90° (regarde vers le sud) et avance de 1 pas vers le sud (bas), revenant ainsi à son point de départ.

2. Recopier et compléter la ligne 4 du code de la fonction caracteres_valides

Réponse : ```python return len(intrus) == 0 ``` ```python return intrus == [] ``` ```python return not intrus ```

3. Ligne 4 de la fonction entiers_valides (entier en fin de chaîne)

Réponse : ```python return False ```

3. Ligne 8 de la fonction entiers_valides (entier juste avant parenthèse fermante)

Réponse : ```python return False ```

3. Ligne 9 de la fonction entiers_valides (fin de fonction)

Réponse : ```python return True ```

4. Écrire le code de la fonction parenthesage_correct

Réponse : ```python parenthese = 0 for c in chaine: if c == '(': parenthese += 1 elif c == ')': parenthese -= 1 if parenthese < 0: return False return parenthese == 0 ```

5. Valeur de la variable nombre à la fin de l'itération 1 pour lire_nombre('AD179AGA', 2)

Réponse : '1'

5. Valeur de la variable indice à la fin de l'itération 1 pour lire_nombre('AD179AGA', 2)

Réponse : 3

5. Valeur de la variable nombre à la fin de l'itération 2 pour lire_nombre('AD179AGA', 2)

Réponse : '17'

Les réponses des 9 questions restantes et l’explication pas à pas sont réservées aux membres Premium. Premium

Résous-le ici : correction automatique, indices et corrigé détaillé.

Exercice 2 - Récursivité · Asie jour 1 - Remplacement 2025 ›

Plus d’exercices de Récursivité