Aller au contenu

Ep 32

le document

l'algorithme

Issue de : 23-NSI-35⚓

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

É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.

Exemple :

🐍 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-nltry:bksl-nl assert oupy-undexclusif([1, 0, 1, 0, 1, 1, 0, 1], [0, 1, 1, 1, 0, 1, 0, 0]) == [1, 1, 0, 1, 1, 0, 0, 1]bksl-nl assert oupy-undexclusif([1, 1, 0, 1], [0, 0, 1, 1]) == [1, 1, 1, 0]bksl-nl print('Tout semble correct 👍')bksl-nlbksl-nlexcept AssertionError as asser:bksl-nl print('Le rĂ©sultat de votre fonction n\'est pas conforme đŸ€”')bksl-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Ă©Ă©.

Compléter la méthode est_semimagique qui renvoie True si le carré est semimagique, False sinon.

🐍 Script Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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 ... 

Exemple :

🐍 Script Python
>>> 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]
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 = n bksl-nl self.tableau = [[liste[i + j py-str n] for i in range(n)] for j in range(n)] bksl-nl bksl-nl def affiche(self): bksl-nl '''Affiche un carré''' bksl-nl for i in range(self.ordre): bksl-nl print(self.tableau[i]) bksl-nl bksl-nl def sommepy-undligne(self, i): bksl-nl '''Calcule la somme des valeurs de la ligne i''' bksl-nl somme = 0 bksl-nl bksl-nl for j in range(self.ordre):bksl-nl somme = somme + self.tableau[i][j] bksl-nl return somme bksl-nl bksl-nl def sommepy-undcol(self, j): bksl-nl '''Calcule la somme des valeurs de la colonne j''' bksl-nl somme = 0bksl-nl bksl-nl for i in range(self.ordre): bksl-nl somme = somme + self.tableau[i][j] bksl-nl return somme bksl-nl bksl-nl def estpy-undsemimagique(self): bksl-nl s = self.sommepy-undligne(0) bksl-nl #test de la somme de chaque ligne bksl-nl for i in range(...): bksl-nl if ... != s: bksl-nl return ... bksl-nl bksl-nl #test de la somme de chaque colonne bksl-nl for j in range(...): bksl-nl if ... != s: bksl-nl return ... bksl-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-nl return self.tableaubksl-nlbksl-nl def sommepy-undligne(self, i):bksl-nl '''Calcule la somme des valeurs de la ligne i'''bksl-nl somme = 0bksl-nlbksl-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-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-nl return Truebksl-nltry:bksl-nl lstpy-undc3 = [3, 4, 5, 4, 4, 4, 5, 4, 3]bksl-nl c3 = Carre(lstpy-undc3, 3)bksl-nl assert c3.affiche() == [[3, 4, 5], [4, 4, 4], [5, 4, 3]]bksl-nl assert c3.estpy-undsemimagique() == Truebksl-nl print('Tout semble correct 👍')bksl-nlbksl-nlexcept AssertionError as asser:bksl-nl print('Le rĂ©sultat de votre fonction n\'est pas conforme đŸ€”')bksl-nl