Exercice 2 - Programmation orientée objet · Bac Numérique et Sciences Informatiques Amérique du Nord 2025 (jour 2)

Thème : Programmation orientée objet : classes, attributs, méthodes · Tiré du sujet Jour 2 (2025)

Énoncé

Exercice 2 (6 points)

Cet exercice porte sur la gestion des bugs, l'algorithmique, les structures de données et la programmation orientée objet.

Partie A

Un jour, Bob s’apprête à manger un collier de bonbons, et se pose la question suivante: « Si je mange un bonbon sur trois, encore et encore jusqu’à ce qu’il n’en reste qu’un seul, quel sera le dernier bonbon restant ? »

Pour un collier ayant 5 bonbons, il décide de les numéroter de 0 à 4. Il commence par manger le bonbon d'indice 0, se décale de trois bonbons et mange ensuite celui d'indice 3. En répétant la démarche, il mange ensuite le bonbon d'indice 2 et enfin celui d'indice 4.

Les indices des bonbons mangés sont donc, dans l'ordre, 0, 3, 2 et 4. Le bonbon restant est celui d'indice 1.

Partie C

Bob souhaite utiliser la structure de données « liste doublement chaînée ». Une telle liste est composée de maillons contenant chacun trois informations:

une valeur;

un prédécesseur et un successeur qui sont tous deux des maillons.

Cette structure se prête bien au problème des bonbons: dans un collier, un bonbon est précédé et suivi par d’autres bonbons. Le successeur du dernier bonbon est le premier et le prédécesseur du premier, le dernier.

Bob crée la classe Bonbon ci-après:

class Bonbon:

def __init__(self, valeur):

self.pred = None # prédécesseur de ce bonbon

self.valeur = valeur

self.succ = None # successeur de ce bonbon

7.

Donner le terme correspondant aux variables pred, valeur et succ dans le vocabulaire de la programmation orientée objet.

Les instructions ci-dessous permettent de représenter un collier de trois bonbons de valeurs 0, 1 et 2.

>>> zero = Bonbon(0)

>>> un = Bonbon(1)

>>> deux = Bonbon(2)

>>> zero.succ = un

>>> un.pred = zero

>>> un.succ = deux

>>> deux.pred = un

>>> deux.succ = zero

>>> zero.pred = deux

>>> a = zero.succ.valeur

>>> b = un.succ.succ.pred.valeur

8.

Déterminer les valeurs des variables a et b après l’exécution de ces instructions.

La fonction creer_collier prend en paramètre un entier n strictement positif représentant la taille d’un collier et renvoie un objet de type Bonbon représentant le premier bonbon (de valeur 0) du collier.

On prendra soin de faire se succéder et précéder les différents bonbons ainsi que de « refermer » le collier en liant le dernier bonbon au premier.

9.

Recopier et compléter les lignes 5, 6, 7, 9 et 10 du code de la fonction creer_collier, donné ci-après.

1 def creer_collier(n):

2 premier = Bonbon(0)

3 actuel = premier

4 for i in range(1, n):

8

actuel = nouveau

11

return premier

On considère le code Python suivant.

>>> bonbon = Bonbon(3)

>>> bonbon.pred = bonbon

>>> bonbon.succ = bonbon

À l’issue de l’exécution de ce code, on obtient la liste doublement chaînée représentée ci-dessous.

10.

On considère le code Python suivant.

>>> premier = creer_collier(4)

>>> premier.pred.succ = premier.succ

>>> premier.succ.pred = premier.pred

>>> bonbon = premier.succ

Dessiner une représentation du « collier » dont le premier élément est l’objet bonbon obtenu à l’issue de l’exécution du code Python ci-dessus.

11.

Dans le cas où il ne reste qu’un bonbon, donner l’expression qui s’évalue à True, parmi les quatre propositions ci-dessous:

12.

Recopier et compléter les lignes 3, 4, 5 et 6 du code de la fonction dernier_chaine, donné ci-après, qui prend en paramètre le nombre de bonbons n et renvoie la valeur du dernier bonbon restant.

1 def dernier_chaine(n):

2 bonbon = creer_collier(n)

7

return bonbon.valeur

Énoncé: Exercice 2 - Programmation orientée objet · Bac Numérique et Sciences Informatiques Amérique du Nord 2025 (jour 2)

Corrigé

Corrigé proposé par AprenAI (non officiel)

7. Donner le terme correspondant aux variables pred, valeur et succ dans le vocabulaire de la programmation orientée objet.

Réponse : attributs / variables d'instance

8. Déterminer la valeur de la variable a après l’exécution de ces instructions.

Réponse : 1

8. Déterminer la valeur de la variable b après l’exécution de ces instructions.

Réponse : 2

9. Ligne 5 de la fonction creer_collier

Réponse : ```python Bonbon(i) ```

9. Ligne 6 de la fonction creer_collier

Réponse : ```python nouveau ```

9. Ligne 7 de la fonction creer_collier

Réponse : ```python nouveau.pred = actuel ```

9. Ligne 9 de la fonction creer_collier

Réponse : ```python actuel.succ = premier ```

Les réponses des 7 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 - Programmation orientée objet · Amérique du Nord 2025 (jour 1) · Exercice 3 - Programmation orientée objet · Amérique du Nord 2024 (jour 2) ›

Plus d’exercices de Programmation orientée objet : classes, attributs, méthodes