• Aucun résultat trouvé

Informatique Terminale : Compléments de programmation Sujet 1 : Matrices carrées Soit n un entier supérieur ou égal à 1. Dans tout le sujet, on appelle matrice de taille

N/A
N/A
Protected

Academic year: 2022

Partager "Informatique Terminale : Compléments de programmation Sujet 1 : Matrices carrées Soit n un entier supérieur ou égal à 1. Dans tout le sujet, on appelle matrice de taille"

Copied!
2
0
0

Texte intégral

(1)

Informatique Terminale : Compléments de programmation

Sujet 1 : Matrices carrées

Soit n un entier supérieur ou égal à 1.

Dans tout le sujet, on appelle matrice de taille n un tableau de n listes de n entiers positifs ou nuls.

Si M1 et M2 sont deux matrices carrées de taille n, on note M1 + M2 la matrice M telle que

M[i][j] = M1[i][j] + M2[i][j] pour tous les entiers i et j compris entre 0 et n-1.

1. On considère les deux matrices

M1 = [[2, 3, 4], [5, 1 ,7], [6, 9, 8]] et M2 = [[7, 6, 5], [4, 8, 2], [3, 0, 1]]. Calculer M1 + M2.

2. On définit une classe Carre dont les objets ont pour seul attribut une matrice lignes. a) Écrire le code du constructeur de cette classe (l’attribut étant le paramètre).

b) On dit qu’un objet est appelable (callable) lorsqu’il possède la méthode spéciale __call__ qui permet de l’utiliser avec l’opérateur ( ) et un certain nombre d’arguments : si l’objet est appelé comme une fonction, il retourne la valeur renvoyée par la méthode __call__. On peut donc alors utiliser les instances de classe comme des fonctions.

Écrire le code de la méthode __call__ pour que, si M est une matrice et si A = Carre(M) alors

A(i, j) renvoie M[i][j]. Les entiers A(i, j) sont appelés coefficients de l’objet A.

c) Écrire le code de la méthode taille qui renvoie la longueur de l’attribut lignes de l’objet auquel elle s’applique.

d) Écrire le code de la méthode largeur qui renvoie le nombre de chiffres du plus grand coefficient de l’objet auquel elle s’applique.

e) Écrire le code de la méthode __str__ pour que, si M = [[123, 4], [5, 6789]] et si A = Carre(M)

alors print(A) affiche

[ 123, 4]

[ 5, 6789]

en alignant tous les entiers par colonne sur leur chiffre des unités.

3. On considère le code suivant à l’intérieur de celui qui définit la classe Carre :

def uniques(self):

d = {}

for lig in self.lignes:

for x in lig:

d[x] = 1ig

return len(d)==self.taille()**2

def Nul(n):

return Carre([[0]*n]*n)

def Id(n):

c = Carre.Nul(n) for i in range(n):

c.lignes[i][i] = 1 return c

a) Expliquer ce que renvoie la méthode uniques.

b) Quel est l’affichage produit par print(Carre.Id(3)) ? Expliquer.

c) Modifier le code de la méthode Nul pour que print(Carre.Id(3)) affiche

[1, 0, 0]

[0, 1, 0]

[0, 0, 1]

(2)

4. La méthode spéciale __add__ permet d’utiliser l’opérateur + avec l’objet auquel elle s’applique.

Si son paramètre est obj, le code objet + obj est équivalent à objet.__add__(obj).

Écrire le code de la méthode __add__ pour que, si A et B sont deux objets de la classe Carre alors

A + B soit l’objet dont l’attribut lignes est la somme des attributs de A et de B définie au début.

5. Un objet est conteneur (container) s’il dispose de la méthode __contains__ qui renvoie True si l’objet auquel elle s’applique contient l’argument qui lui est donné. Cette méthode permet d’utiliser l’opérateur in. Lorsque x in A renvoie True, on dit que x est un élément de l’objet A.

Écrire le code de la méthode __contains__ pour que, si A est un objet de la classe Carre, x in A

renvoie True si x est un coefficient de A.

Références

Documents relatifs

Ensuite prouvez que la formule est exacte par

Démontrer les trois conjectures émises à la question

[r]

[r]

[r]

[r]

Déterminer des bases de F et de G, et montrer que ces sous-espaces vectoriels sont supplémentaires.. Déterminer des bases de F et de G, et montrer que ces sous-espaces vectoriels

[r]