• Aucun résultat trouvé

Informatique Terminale : Compléments de programmation Corrigé Sujet 1 : Matrices carrées 1.

N/A
N/A
Protected

Academic year: 2022

Partager "Informatique Terminale : Compléments de programmation Corrigé Sujet 1 : Matrices carrées 1."

Copied!
2
0
0

Texte intégral

(1)

Informatique Terminale : Compléments de programmation

Corrigé

Sujet 1 : Matrices carrées

1.

M1 = [[2, 3, 4], [5, 1 ,7], [6, 9, 8]]

M2 = [[7, 6, 5], [4, 8, 2], [3, 0, 1]]

M1 + M2 = [[9, 9, 9], [9, 9, 9], [9, 9, 9]]

2. a) Le constructeur d’une classe est la méthode spéciale

__init__

def __init__(self, lignes):

self.lignes = lignes

b) La matrice associée à l’objet est son attribut

lignes

donc

def __call__(self, i, j):

return self.lignes[i][j]

c) La longueur d’une matrice est le nombre de listes qu’elle contient

def taille(self):

return len(self.lignes)

d) On parcourt la matrice associée à l’objet et on retient le plus grand entier. Le nombre de chiffres est la longueur de la chaîne de caractères associée.

def largeur(self):

mini = 0

for lig in self.lignes:

for x in lig:

if x > mini:

mini = x return len(str(mini))

e) On construit une chaîne de caractères en ajoutant devant chaque entier le nombre d’espaces nécessaires pour que le nombre de caractères entre deux virgules soit toujours le même.

def __str__(self):

larg = self.largeur() ligne = ''

for lig in self.lignes:

ligne += '['

for i in range(len(lig)-1):

ligne += ' '*(larg-len(str(lig[i]))) + str(lig[i]) + ', ' ligne += ' '*(larg-len(str(lig[-1]))) + str(lig[-1]) + ']\n' return ligne

3. a)

len(d)

est le nombre de clés du dictionnaire

d

. La méthode

uniques

renvoie

True

si ce nombre est égal au nombre de coefficients de l’objet

self

c’est-à-dire si tous ces coefficients sont différents.

Sinon elle renvoie

False

.

b)

[0]*3 = [0,0,0]

donc

[[0]*3] = [[0,0,0]]

et

[[0]*3]*3 = [[0,0,0], [0,0,0], [0,0,0]]

On en déduit que les lignes de c (les trois sous-listes précédentes) ont la même référence donc, pour

i = 0

, le code

c.lignes[i][i] = 1

transforme toutes les lignes en

[1, 0, 0]

puis, pour

i = 1

en

[1, 1, 0]

et pour

i = 2

en

[1, 1, 1]

. Finalement, l’affichage est

[1, 1, 1]

[1, 1, 1]

[1, 1, 1]

Remarque. On peut voir que toutes les lignes ont la même référence avec :

I = Carre.Id(3)

print(id(I.lignes[0]), id(I.lignes[1]))

(2)

c) Il faut définir chaque ligne indépendamment des autres :

def Nul(n):

lignes = []

for i in range(n):

lignes.append([0]*n) return Carre(lignes)

4. On construit la somme des deux matrices et on renvoie l’instance de la classe

Carre

associée

def __add__(self, carre):

n = self.taille() lignes = []

for i in range(n):

ligne = []

for j in range(n):

ligne.append(self.lignes[i][j] + carre.lignes[i][j]) lignes.append(ligne)

return Carre(lignes)

Remarque. Il existe une méthode spéciale pour chaque opérateur.

Celle de l’opérateur

+=

est

__iadd__

5. Il suffit de parcourir toutes les sous-listes de la matrice associée à l’objet et de renvoyer

True

dès qu’on rencontre le paramètre ; si rien n’a été renvoyé pendant le parcours, on peut renvoyer

False

:

def __contains__(self, valeur):

n = self.taille() for i in range(n):

for j in range(n):

if valeur==self.lignes[i][j] : return True return False

Complément. La méthode

__iter__

permet de rendre un objet itérable :

def __iter__(self):

return Iterateur(self)

Elle renvoie un itérateur (objet de la classe

Iterateur

à défnir) qui fonctionne avec la méthode

__next__

qui retourne la valeur suivante dans la boucle

for

:

class Iterateur:

def __init__(self, carre):

self.courant = 0 self.carre = carre

def __next__(self):

n = self.carre.taille() if self.courant>=n**2:

raise StopIteration

ret = self.carre(self.courant//n, self.courant%n) self.courant += 1

return ret

On peut alors parcourir l’objet avec

for

et utiliser les fonctions

sum

,

max

,

min

,

list

.

Références

Documents relatifs

Dans tout le sujet, on appelle matrice de taille n un tableau de n listes de n entiers positifs ou nuls. On définit une classe Carre dont les objets ont pour seul attribut

domino de la classe Domino et renvoie 1 si le domino correspondant peut être ajouté à la liste chaine et renvoie 0 sinon. Un domino peut-être ajouté à la liste chaine si

[r]

[r]

(e) Les cas n = 1 et n = 2 étant trivaux, on peut supposer n ≥ 3, ce qui fait que les racines primitives n ièmes de l’unité sont des nombres non réels (distincts de 1 et de −1)

Traer le graphe de f et vérier que f est bien une densité de

Si on change de fonction φ 0 , le lecteur vérifiera que S 0 est modifiée à une constante additive près, ce qui est conforme au deuxième point du théorème 9..

Ce problème est très proche du problème étudié dans la section 8.4.1 du cours ou dans l’exercice 6.3 de TD.. On part de la formulation (53a) que l’on multiplie par une fonction v