Baccalauréat — Épreuve pratique — 2024 — NSI
Épreuve pratique NSI 2024 — Sujet 32 : ou exclusif bit à bit, carrés semimagiques en POO
Sujet
Épreuve pratique de NSI, session 2024 — sujet n°32 de la banque nationale. Durée : 1 heure, sur ordinateur. Le candidat traite les deux exercices, notés chacun sur 10 points.
Exercice 1 — ou exclusif de deux tableaux de bits
L'opérateur « ou exclusif » entre deux bits renvoie 0 si les deux bits sont égaux et 1 s'ils sont différents. Il est symbolisé par le symbole . Ainsi :
Écrire une fonction ou_exclusif qui prend en paramètres deux tableaux de 0 ou de 1 de même longueur et qui renvoie un tableau où l'élément situé à position i est le résultat, par l'opérateur « ou exclusif », des éléments à la position i des tableaux passés en paramètres.
Exemples :
>>> ou_exclusif([1, 0, 1, 0, 1, 1, 0, 1], [0, 1, 1, 1, 0, 1, 0, 0])
[1, 1, 0, 1, 1, 0, 0, 1]
>>> ou_exclusif([1, 1, 0, 1], [0, 0, 1, 1])
[1, 1, 1, 0]Exercice 2 — carrés semimagiques
Dans cet exercice, on appelle carré d'ordre un tableau de lignes et colonnes dont chaque case contient un entier naturel.
Exemples :
c2, un carré d'ordre 2 : lignes[1, 7]et[7, 1];c3, un carré d'ordre 3 : lignes[3, 4, 5],[4, 4, 4]et[5, 4, 3];c3bis, un autre carré d'ordre 3 : lignes[2, 9, 4],[7, 0, 3]et[6, 1, 8].
Un carré est dit semimagique lorsque les sommes des éléments situés sur chaque ligne, chaque colonne sont égales.
- Ainsi
c2etc3sont semimagiques car la somme de chaque ligne et de chaque colonne est égale à 8 pourc2et 12 pourc3. - Le carré
c3bisn'est pas semimagique car la somme de la première ligne est égale à 15 alors que celle de la deuxième ligne est égale à 10.
Note : le sujet officiel ajoute « et chaque diagonale ». C'est faux, car les diagonales de c2 ont pour sommes 2 et 14, et c'est inutile, car la définition ne porte que sur les lignes et les colonnes.
La classe Carre ci-après contient des méthodes qui permettent de manipuler des carrés.
- La méthode constructeur crée un carré sous forme d'un tableau à deux dimensions à partir d'une liste d'entiers, et d'un ordre.
- La méthode
affichepermet d'afficher le carré créé.
Exemple :
>>> lst_c3 = [3, 4, 5, 4, 4, 4, 5, 4, 3]
>>> c3 = Carre(lst_c3, 3)
>>> c3.affiche()
[3, 4, 5]
[4, 4, 4]
[5, 4, 3]Compléter la méthode est_semimagique qui renvoie True si le carré est semimagique, False sinon.
class Carre:
def __init__(self, liste, n):
self.ordre = n
self.tableau = [[liste[i + j * n] for i in range(n)]
for j in range(n)]
def affiche(self):
'''Affiche un carré'''
for i in range(self.ordre):
print(self.tableau[i])
def somme_ligne(self, i):
'''Calcule la somme des valeurs de la ligne i'''
somme = 0
for j in range(self.ordre):
somme = somme + self.tableau[i][j]
return somme
def somme_col(self, j):
'''Calcule la somme des valeurs de la colonne j'''
somme = 0
for i in range(self.ordre):
somme = somme + self.tableau[i][j]
return somme
def est_semimagique(self):
s = self.somme_ligne(0)
#test de la somme de chaque ligne
for i in range(...):
if ... != s:
return ...
#test de la somme de chaque colonne
for j in range(...):
if ... != s:
return ...
return ...Tester la méthode est_semimagique sur les carrés c2, c3 et c3bis.
Corrigé
Créez un compte gratuit : votre première correction est offerte.