Exercice 5 · Bac Numérique et Sciences Informatiques Amérique du Nord 2022 (jour 2)
Thème : Binaire, entiers et opérateurs booléens · Tiré du sujet Jour 2 (2022)
Énoncé
Exercice 5 (4 points)
Cet exercice porte sur les tableaux à deux dimensions et la programmation Python en général.
Partie A
Dans cette partie, on s'intéresse à un dessin pixelisé en noir et blanc dans lequel chaque ligne est obtenue séquentiellement à partir de la ligne juste au-dessus d'elle.
Au départ, on dispose donc de la ligne du haut et on déduit les lignes en dessous les unes après les autres.
Les règles sont les suivantes:
pour chaque ligne, le pixel complètement à droite et le pixel complètement à gauche sont blancs;
pour les autres pixels, un pixel est noir si les deux pixels à droite et gauche du pixel juste au-dessus de ce pixel ne sont pas de la même couleur, sinon il est blanc.
Le pixel noté "" est donc blanc si les pixels notés "" et "" sont de la même couleur ou noir sinon.
1. (a)
Dans cette question uniquement, on considère un dessin de cinq lignes et huit colonnes.
La première ligne est colorée comme ci-dessous:
En respectant les règles de coloration, on complète la figure en ajoutant la deuxième ligne:
De même, en ajoutant la troisième ligne:
Donner le contenu binaire (0 pour blanc, 1 pour noir) des deux dernières lignes (lignes d'indice 3 et 4) sous forme de tableau de 8 valeurs (ex: [0, 0, 1,...]):
Dans la suite de cet exercice:
les lignes sont numérotées du haut vers le bas, en commençant à 0;
les colonnes sont numérotées de la gauche vers la droite, en commençant à 0.
1. (b)
On considère le pixel de la ligne 4 et de la colonne 1.
Ligne:
Colonne:
Ligne:
Colonne:
1. (c)
Plus généralement, on considère le pixel de la ligne li et de la colonne co (ni sur la première ligne, ni sur les colonnes extrêmes).
Ligne:
Colonne:
Ligne:
Colonne:
2. (a)
On suppose que le tableau image a été rempli en respectant les règles jusqu'à la ligne li - 1. On suppose .
Donner la condition (en Python) portant sur les valeurs de la ligne li - 1 pour que image[li][co] prenne la valeur 1:
2. (b)
Compléter la fonction Python remplir_ligne qui prend en paramètre le tableau image et un entier li:
def remplir_ligne(image, li):
image[li][0] = 0
image[li][7] = 0
for... in range(...,...):
...
2. (c)
Écrire une fonction remplir qui prend en paramètre le tableau image et modifie les valeurs des cases du tableau des lignes restantes:
Partie B
À un tableau de taille 8 contenant des 0 ou des 1, on associe l'entier dont la représentation binaire est donnée par ce tableau.
Par exemple, le tableau [0, 0, 0, 1, 0, 0, 1, 0] représente le nombre binaire 00010010, correspondant à 18 en base 10.
1. (a)
Soit le tableau [0, 0, 1, 0, 1, 1, 0, 0]. Déterminer la représentation en base 10 de l'entier correspondant:
1. (b)
Écrire la fonction Python conversion2_10 qui prend en paramètre un tableau tab de taille 8 composé de 0 et 1, et qui renvoie l'entier correspondant écrit en base 10:
1. (c)
Réciproquement, donner le tableau associé à l'entier 78 dont l'écriture en base 10 est 78:
Dans la suite, on suppose qu'on dispose de la fonction Python conversion10_2, qui prend en paramètre un entier compris entre 0 et 255, et qui renvoie le tableau tab correspondant.
2. (a)
On rappelle que pour chaque ligne de l'image, le pixel complètement à gauche et le pixel complètement à droite restent blancs. En déduire une ou des précondition(s) sur l'entier :
2. (b)
Compléter la fonction generer(n, k):
def generer(n, k):
tab = [None for i in range(k)]
image = [[0 for j in range(8)] for i in range(k+1)]
...
return tab

Corrigé
Corrigé proposé par AprenAI (non officiel)
1. (a) Ligne 3 (quatrième ligne)
Réponse : [0, 0, 1, 1, 1, 0, 1, 0]
1. (a) Ligne 4 (cinquième ligne)
Réponse : [0, 1, 1, 0, 1, 0, 0, 0]
1. (b) Pixel ligne 4, colonne 1 : pixel au-dessus à gauche
Réponse : Ligne 3, Colonne 0
1. (b) Pixel ligne 4, colonne 1 : pixel au-dessus à droite
Réponse : Ligne 3, Colonne 2
1. (c) Coordonnées du pixel juste au-dessus, à sa gauche
Réponse : Ligne li - 1, Colonne co - 1
1. (c) Coordonnées du pixel juste au-dessus, à sa droite
Réponse : Ligne li - 1, Colonne co + 1
2. (a) Condition pour que image[li][co] prenne la valeur 1
Réponse : image[li - 1][co - 1] != image[li - 1][co + 1]
2. (b) Fonction remplir_ligne(image, li)
Réponse : ```python for co in range(1, 7): if image[li - 1][co - 1] != image[li - 1][co + 1]: image[li][co] = 1 else: image[li][co] = 0 ```
2. (c) Fonction remplir(image)
Réponse : ```python def remplir(image): for li in range(1, len(image)): remplir_ligne(image, li) ```
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 - Logique booléenne · Amérique du Nord 2023 (jour 1)