Nom : __________________
Matricule : ______________
Introduction à la programmation avec Python (GLO-1901)
Département de Génie électrique et de Génie Informatique
Automne 2012
EXAMEN FINAL
Question Points Score
1 20
2 20
3 20
4 10
5 5
6 15
7 10
Total: 100
Instructions :
1 feuille aide-mémoire manuscrite est permise (recto-verso) ;
répondre sur le questionnaire ;
utilisez le verso des pages au besoin ;
durée de l’examen : 110 minutes.
Pondération : Cet examen compte pour 40% de la note finale.
Question 1 (20 points sur 100)
Soit les énoncés Python suivants entrés directement dans l’interpréteur :
>>> a = 1
>>> b = 9
>>> c = range(a, b+1)
>>> d = tuple(c)
>>> import numpy
>>> e = numpy.array(d)
>>> f = e.reshape((3,3))
Pour chacune des expressions suivantes, donnez la valeur que l’interpréteur affichera. Si l’ex-
pression soulève une exception, dites laquelle. En cas de syntaxe invalide, répondez «syntaxe
invalide».
Page 1 de 8
GLO-1901 Examen Final 17 décembre 2012
(a) (1 point) >>> a+b
(a) 10
(b) (1 point) >>> b+c
(b) TypeError
(c) (1 point) >>> str(a)
(c) ’1’
(d) (1 point) >>> str(a)*b
(d) ’111111111’
(e) (1 point) >>> int(str(a)*b)
(e) 111111111
(f) (1 point) >>> c
(f) range(1, 10)
(g) (1 point) >>> d
(g) (1, 2, 3, 4, 5, 6, 7, 8, 9)
(h) (1 point) >>> list(d)
(h) [1, 2, 3, 4, 5, 6, 7, 8, 9]
(i) (1 point) >>> tuple(list(d))
(i) (1, 2, 3, 4, 5, 6, 7, 8, 9)
(j) (1 point) >>> d[1:5]
(j) (2, 3, 4, 5)
(k) (1 point) >>> e[1:5]
(k) array([2, 3, 4, 5])
(l) (1 point) >>> d[1:5]*d[1:5]
(l) TypeError
(m) (1 point) >>> e[1:5]**2
(m) array([ 4, 9, 16, 25])
(n) (1 point) >>> f[:,1]
(n) array([2, 5, 8])
Page 2 de 8
GLO-1901 Examen Final 17 décembre 2012
(o) (1 point) >>> f[1:2,:]
(o) array([[4, 5, 6]])
(p) (1 point) >>> f[:,1]*f[1,:]
(p) array([[ 8, 25, 48]])
(q) (1 point) >>> (f[:,1]*f[1:2,:]).sum()
(q) 81
(r) (1 point) >>> (f*f.T).sum(axis=0)
(r) array([ 30, 81, 150])
(s) (1 point) >>> f.ravel()[3:6]
(s) array([4, 5, 6])
(t) (1 point) >>> (f*f).max()
(t) 81
Question 2 (20 points sur 100)
Soit la fonction f(n)suivante que l’on veut calculer pour la valeur entière n:
f(n) =
n
X
i=1
2 + cos(i)
i2
(a) (5 points) Écrivez le code Python d’une fonction qui calcule f(n)sans utiliser numpy.
Rappel : la fonction cosinus (cos) se trouve dans le module math.
Solution:
import math
def f(n):
return sum((2+math.cos(i))/i**2 for i in range(1, n+1))
(b) (5 points) En utilisant numpy, écrivez le code Python d’une fonction équivalente.
Rappel : le module numpy contient sa propre fonction cosinus.
Solution:
import numpy
def f(n):
i = numpy.arange(1, n+1)
return ((2+numpy.cos(i))/i**2).sum()
Page 3 de 8
GLO-1901 Examen Final 17 décembre 2012
(c) (10 points) Écrivez le code Cd’une fonction équivalente.
Rappel : la fonction cosinus (cos) se trouve dans le fichier d’en-tête math.h.
Solution:
#include <math.h>
double f(int n)
{
int i;
double result = 0;
for(i = 1; i <= n; i += 1) {
result += (2+cos(i))/(i*i);
}
return result;
}
Question 3 (20 points sur 100)
Soit la classe Portefeuille de votre tp6 qui contient entre autres choses les éléments
suivants :
1. un constructeur qui initialise un membre capital correspondant au capital initial du
portefeuille, et un membre titres, de type dictionnaire, pour contenir les quantités de
titres détenus dans le portefeuille ;
2. un opérateur [] qui permet d’accéder à la quantité d’un titre.
Vous disposez aussi du module Bourse et de sa fonction infoTitre qui retourne un
dictionnaire contenant différentes informations relatives à un titre boursier, dont l’attribut
valeur qui correspond à sa valeur.
On vous demande d’écrire le code Python de la fonction membre transiger qui reçoit un
titre et une quantité. Si le titre est invalide, une exception de type TitreInvalide doit être
soulevée. Si la quantité est positive, les titres doivent être achetés. Si le capital est insuffisant,
une exception de type CapitalInsuffisant doit être soulevée. Si la quantité est négative,
les titres doivent être vendus. Si les titres détenus dans le portefeuille sont insuffisants, une
exception de type TitreInvalide doit être soulevée. Si la quantité est nulle, une exception
de type AssertionError doit être soulevée.
Solution:
def transiger(self, titre, qtte):
# déterminer la valeur du titre
try:
valeur = Bourse.infoTitre(titre)[’valeur’]
except Bourse.TitreInvalide:
raise TitreInvalide()
Page 4 de 8
GLO-1901 Examen Final 17 décembre 2012
# vérifier que le capital est suffisant
if valeur *qtte > self.capital:
raise CapitalInsuffisant()
# vérifier que la quantité est non nulle
assert qtte != 0
# vérifier que la quantité est suffisante
if self.titres.get(titre, 0) < -qtte:
raise TitreInvalide()
# procéder à la transaction
self.titres[titre] = self.titres.get(titre, 0) + qtte
self.capital -= valeur *qtte
# éliminer le titre si sa quantité est nulle
if self.titres[titre] == 0:
del self.titres[titre]
Question 4 (10 points sur 100)
Soit les énoncés suivants :
import numpy
from math import pi
x = numpy.linspace(-pi, pi, 50)
y = numpy.cos(x)
qui construisent un tableau numpy de cinquante valeurs uniformément distribuées entre πet
+π, et calculent le cosinus de ces valeurs. On vous demande d’écrire les énoncés qui utilisent
le module matplotlib pour produire le graphique suivant :
Page 5 de 8
1 / 8 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!