Aller au contenu

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 : image

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