_2023
Ep 35
ⶠTélécharger le sujet en pdf .
EXERCICE 1
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 caractĂšre â.
Ainsi :
0 â 0 = 0
0 â 1 = 1
1 â 0 = 1
1 â 1 = 0
On représente ici une suite de bits par un tableau contenant des 0 et des 1.
Exemples :
đ Script Python a = [ 1 , 0 , 1 , 0 , 1 , 1 , 0 , 1 ]
b = [ 0 , 1 , 1 , 1 , 0 , 1 , 0 , 0 ]
c = [ 1 , 1 , 0 , 1 ]
d = [ 0 , 0 , 1 , 1 ]
Ăcrire la fonction ou_exclusif
qui prend en paramĂštres deux tableaux 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.
En considérant les quatre exemples ci-dessus, cette fonction donne :
đ Script Python >>> ou_exclusif ( a , b )
[ 1 , 1 , 0 , 1 , 1 , 0 , 0 , 1 ]
>>> ou_exclusif ( c , d )
[ 1 , 1 , 1 , 0 ]
RĂ©ponse
Complétez le code ci-dessous
# Mettre votre code icibksl-nlbksl-nl
Solution
def oupy-undexclusif(tab1, tab2):bksl-nl resultat = []bksl-nl taille = len(tab1)bksl-nl for i in range(taille):bksl-nl resultat.append(tab1[i] ^ tab2[i])bksl-nl return resultatbksl-nlbksl-nl#Si on ne connait pas la fonction native ^ qui fait le «ou exclusif» de deux entiers en Python, on peut la recoder :bksl-nlbksl-nldef oupy-undexc(a, b):bksl-nl if a == 0 and b == 0:bksl-nl return 0bksl-nl if a == 0 and b == 1:bksl-nl return 1bksl-nl if a == 1 and b == 0:bksl-nl return 1bksl-nl if a == 1 and b == 1:bksl-nl return 0bksl-nlbksl-nl#Le code devient alors :bksl-nlbksl-nldef oupy-undexclusif(tab1, tab2):bksl-nl resultat = []bksl-nl taille = len(tab1)bksl-nl for i in range(taille):bksl-nl resultat.append(oupy-undexc(tab1[i],tab2[i]))bksl-nl return resultatbksl-nlbksl-nl
EXERCICE 2
Dans cet exercice, on appelle carrĂ© dâordre \(n\) un tableau de \(n\) lignes et \(n\) colonnes dont chaque case contient un entier naturel.
Exemples :
Un carré est dit semimagique lorsque les sommes des éléments situés sur chaque ligne, chaque colonne sont égales.
Ainsi c2 et c3 sont semimagiques car la somme de chaque ligne, chaque colonne et chaque diagonale est Ă©gale Ă 8 pour c2 et 12 pour c3.
Le carre c3bis n'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.
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 affiche
permet dâafficher le carrĂ© crĂ©Ă©.
Exemple :
đ Script Python >>> liste = ( 3 , 4 , 5 , 4 , 4 , 4 , 5 , 4 , 3 )
>>> c3 = Carre ( liste , 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. Puis tester la fonction est_semimagique sur les carrés c2, c3 et c3bis.
Listes permettant de générer les carrés c2, c3 et c3bis :
đ Script Python lst_c2 = [ 1 , 7 , 7 , 1 ]
lst_c3 = [ 3 , 4 , 5 , 4 , 4 , 4 , 5 , 4 , 3 ]
lst_c3bis = [ 2 , 9 , 4 , 7 , 0 , 3 , 6 , 1 , 8 ]
RĂ©ponse
Complétez le code ci-dessous
class Carre:bksl-nl def py-undpy-undinitpy-undpy-und(self, liste, n):bksl-nl self.ordre = nbksl-nl self.tableau = [[liste[i + j py-str n] for i in range(n)] for j in range(n)]bksl-nlbksl-nl def affiche(self):bksl-nl '''Affiche un carré'''bksl-nl for i in range(self.ordre):bksl-nl print(self.tableau[i])bksl-nlbksl-nl def sommepy-undligne(self, i):bksl-nl '''Calcule la somme des valeurs de la ligne i'''bksl-nl somme = 0bksl-nl for j in range(self.ordre):bksl-nl somme = somme + self.tableau[i][j]bksl-nl return sommebksl-nlbksl-nl def sommepy-undcol(self, j):bksl-nl '''Calcule la somme des valeurs de la colonne j'''bksl-nl somme = 0bksl-nl for i in range(self.ordre):bksl-nl somme = somme + self.tableau[i][j]bksl-nl return sommebksl-nlbksl-nl def estpy-undsemimagique(self):bksl-nl s = self.sommepy-undligne(0)bksl-nlbksl-nl #test de la somme de chaque lignebksl-nl for i in range(...):bksl-nl if ... != s:bksl-nl return ...bksl-nlbksl-nl #test de la somme de chaque colonnebksl-nl for j in range(...):bksl-nl if ... != s:bksl-nl return ...bksl-nlbksl-nl return ...bksl-nlbksl-nl
Solution
class Carre:bksl-nl def py-undpy-undinitpy-undpy-und(self, liste, n):bksl-nl self.ordre = nbksl-nl self.tableau = [[liste[i + j py-str n] for i in range(n)] for j in range(n)]bksl-nlbksl-nl def affiche(self):bksl-nl '''Affiche un carré'''bksl-nl for i in range(self.ordre):bksl-nl print(self.tableau[i])bksl-nlbksl-nl def sommepy-undligne(self, i):bksl-nl '''Calcule la somme des valeurs de la ligne i'''bksl-nl somme = 0bksl-nl for j in range(self.ordre):bksl-nl somme = somme + self.tableau[i][j]bksl-nl return sommebksl-nlbksl-nl def sommepy-undcol(self, j):bksl-nl '''Calcule la somme des valeurs de la colonne j'''bksl-nl somme = 0bksl-nl for i in range(self.ordre):bksl-nl somme = somme + self.tableau[i][j]bksl-nl return sommebksl-nlbksl-nl def estpy-undsemimagique(self):bksl-nl s = self.sommepy-undligne(0)bksl-nlbksl-nl #test de la somme de chaque lignebksl-nl for i in range(self.ordre):bksl-nl if self.sommepy-undligne(i) != s:bksl-nl return Falsebksl-nlbksl-nl #test de la somme de chaque colonnebksl-nl for j in range(self.ordre):bksl-nl if self.sommepy-undcol(j) != s:bksl-nl return Falsebksl-nlbksl-nl return Truebksl-nlbksl-nl