Eléments de Programmation - Thème 7
©Equipe enseignants 1i-001
UPMC – Licence 1 – 2014/2015
Table des matières
Exercice 1 : Nombres complexes 1
Exercice 2 : Nombre d’occurrence du maximum dans une liste 3
Exercice 3 : Fractions 3
Exercice 4 : Tester l’alignement de points 6
Exercice 5 : Base de données des étudiants 7
Exercice 6 : Intersection de listes 9
Exercice 7 : Carrés magiques 10
Exercice 1 : Nombres complexes
Le but de cet exercice est de définir quelques opérations simples sur les nombres complexes ce
qui amène à définir des fonctions simples manipulant des couples de flottants.
Question 1
Les nombres complexes sont décrits la plupart du temps par un couple de réels qui définit
leur partie réelle et leur partie imaginaire. Définissons donc un type
Complexe = tuple[float
float]
pour une telle représentation. Ainsi le nombre complexe 2 + 3i sera représenté par le
couple (2.0,3.0), le nombre ipar (0.0,1.0) et un réel rpar (r, 0.0).
Donner la spécification et une définition en Python des fonctions
partie_relle
et
partie_imaginaire
telle que
partie_reelle(c)
(resp.
partie_imaginaire(c)
) renvoie la
partie réelle (resp. imaginaire) d’un nombre complexe. Par exemple :
1
>>> partie_reelle((2.0,3.0))
2.0
>>> partie_imaginaire((2.0,3.0))
3.0
>>> partie_reelle((0.0,1.0))
0.0
>>> partie_imaginaire((0.0,1.0))
1.0
>>> partie_reelle((4.0,0.0))
4.0
>>> partie_imaginaire((4.0,0.0))
0.0
Question 2
Donner la spécification et une définition en Python de la fonction
addition_complexe
telle que
addition_complexe(c1, c2) renvoie l’addition des nombres complexes c1 et c2
Par exemple :
>>> addition_complexe((1.0,0.0), (0.0,1.0))
(1.0,1.0)
>>> addition_complexe((2.0,3.0), (0.0,1.0))
(2.0,4.0)
Question 3
On rappelle que le produit de deux nombres complexes (
a
+
bi
)et (
c
+
di
)est donné par
(
a
+
bi
)
(
c
+
di
)=(
ac bd
) + (
ad
+
bc
)
i
. Donner la spécification et une définition en Python
de la fonction
produit_complexe
telle que
produit_complexe(c1, c2)
renvoie le produit des
nombres complexes c1 et c2
Par exemple :
>>> produit_complexe((0.0,0.0), (1.0,1.0))
(0.0,0.0)
>>> produit_complexe((0.0,1.0), (0.0,1.0))
(-1.0,0.0)
2
>>> produit_complexe((2.0,3.0), (0.0,1.0))
(-3.0,2.0)
Remarque : les nombres complexes existent en fait en Python. Ils ont pour type complex.
Exercice 2 : Nombre d’occurrence du maximum dans une
liste
Cet exercice montre l’utilisation de n-uplet pour améliorer l’efficacité de la résolution d’un
problème.
Question 1
Dans l’exercice 2 du Thème 6, nous avons écrit une fonction (
nb_max
) permettant de calculer
le nombre de fois que le maximum d’une liste apparaît dans cette liste. La solution proposée
consistait à parcourir une première fois la liste pour déterminer le maximum, puis une seconde
fois pour compter le nombre d’occurrences de ce maximum.
Afin d’améliorer l’efficacité de cette fonction, on aimerait ne parcourir qu’une seule fois la liste
afin de déterminer à la fois le maximum et le nombre d’occurrences de ce dernier.
Donner la spécification et une définition en Python de la fonction
nb_de_max
qui, étant donnée
une liste non vide de nombres, renvoie un couple contenant le maximum et le nombre de fois
ce maximum apparaît dans la liste. Par exemple
>>> nb_de_max([10])
(10,1)
>>> nb_de_max([3,7,9,5.4,8.9,9,8.999,5])
(9,2)
>>> nb_de_max([-2, -1, -5, -3, -1, -4, -1])
(-1,3)
Exercice 3 : Fractions
Dans cet exercice, nous manipulons des fractions rationnelles représentées par le type :
tuple[int, int]
Par exemple, la fraction 2
3est représentée par le couple (2, 3) en Python.
3
Question 1
Une fraction
a
b
a
et
b
sont des entiers (
b6
= 0) représente un nombre rationnel. Un inconvénient
de cette représentation est qu’un même nombre rationnel peut-être représenté par une infinité
de fractions.
Par exemple : le rationnel 1
.
5peut être représenté par la fraction
3
2
mais également la fraction
6
4,30
20 , etc. La fraction 3
2est appelée la fraction canonique (ou irréductible) de 1.5.
A partir d’une fraction quelconque a
b(avec b6= 0), la fraction canonique correspondante est :
a/p
b/p avec p=pgcd(a, b)
Par exemple : la fraction canonique de 9
12 est :
9/3
12/3=3
4avec pgcd(9,12) = 3.
Définir une fonction
fraction
qui, étant donnés deux entiers
a
et
b
avec
b
non-nul, retourne la
fraction canonique de a
b.
Par exemple :
>>> fraction(9,12)
(3,4)
>>> fraction(12,9)
(4,3)
>>> fraction(180,240)
(3,4)
>>> fraction(121,187)
(11,17)
Rappel : le cours 3 propose une fonction du calcul du pgcd de deux entiers aet b.
Question 2
Proposer une définition de la fonction
frac_mult
qui retourne la multiplication de deux fractions
f1 et f2 sous la forme d’une fraction canonique.
Par exemple :
>>> frac_mult( (3,4), (8,4) )
(3,2)
>>> frac_mult( (3,4), (4,3) )
(1,1)
4
>>> frac_mult( (3,4), (1,1) )
(3,4)
>>> frac_mult( (3,4), (0,2) )
(0,1)
Question 3
En utilisant
frac_mult
, proposer une définition de la fonction
frac_div
de division entre deux
fractions rationnelles.
Question 4
La somme de deux fractions est obtenue par la formule suivante :
a
b+c
d=a×(p/b) + c×(p/d)
p
avec p=ppcm(b, d)
Pour le calcul du ppcm on utilise la fonction suivante :
def ppcm(a, b):
""" int * int -> int
Hypothèse : (a != 0) and (b != 0)
retourne le plus petit commun multiplicateur
de a et b."""
# p : int
p=0# pgcd de a et b
if a >= b:
p = pgcd(a, b)
else:
p = pgcd(b, a)
return abs(a * b) // p
# Jeu de tests
assert ppcm(3,4)==12
assert ppcm(4,3)==12
assert ppcm(11,17)==187
assert ppcm(15,9)==45
Proposer une définition de la fonction
frac_add
qui retourne la fraction canonique correspondant
à la somme de deux fractions f1 et f2.
Par exemple :
5
1 / 14 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !