Séance d`exos

publicité
INFO-F206 : Informatique
Syllabus d’exercices
Liran Lerman
Nikita Veschikov
Catharina Olsen
Partiellement réalisé sur la base du syllabus d’exercices du cours INFO-F-101
Édition 2013–2014
Chapitre 1
Introduction
Ex. 1.1. Allez dans le menu Applications et cherchez à lancer l’application IDLE située dans
l’onglet Programmation.
Ex. 1.2. Entrez les expressions suivantes dans l’interpréteur et regardez le résultat :
1.
5
2.
5 + 1
3.
x = 5
4.
x + 1
5.
x = x + 1
6.
x
Ex. 1.3. Utilisez l’interpréteur pour afficher les textes suivants (rappel : print) :
1. Hello World
2. Aujourd’hui
3. C’est "Dommage !"
4. Hum \0/
Ex. 1.4. Évaluez (à la main) les expressions suivantes et essayez de deviner le type du résultat.
Utilisez ensuite l’interpréteur Python pour vérifier vos réponses (rappel : type()) :
1. 14 - 14
2. 1 + 6.9
3. 1.0 + 2.0
4.
5.
18
7+1
(3+2)∗2.5
4∗2
1
6. 3− 2
7. 0 * 0.0
Ex. 1.5. Allez sur le site Python.org et cherchez dans la documentation du langage (« language
reference ») de l’aide à propos de print. Comparez avec le résultat obtenu dans l’interpréteur
lorsque vous entrez help(’print’). Cherchez à vous renseigner sur d’autres aspects de
Python vus au cours (int, str, les opérateurs, . . .).
1
2
Ex. 1.6. Certaines des lignes de code suivantes contiennent des erreurs. Il peut s’agir d’erreurs
syntaxiques ou sémantiques et certaines lignes génèrent des exceptions. Indiquez pour chacune
d’entre elles le type d’erreur (s’il y en a) ou le résultat et expliquez brièvement. Vérifiez ensuite
à l’aide de l’interpréteur. Le résultat désiré par le programmeur est indiqué en gras.
1. print ’’Bonjour’
Bonjour
2. ’bla’ * 3.0
’blablabla’
3. ((1 + 4) / (6 * 2)
0.4166666666666667
4. int(’’14’’)
14
5. int(’3+4’)
7
6. ’3 * 3’ * 3 ** 2
81
7. 3 + 2 / 0 + 2
2
8. print ’Il y a ’ + 31 + ’ jours en janvier’
Il y a 31 jours en janvier
Ex. 1.7. Résolvez les problèmes suivants à l’aide de l’interpréteur :
1. Le volume d’une sphère de rayon r est donné par 34 πr3 . Quel est le volume d’une sphère
de rayon 5 ? (Notez que 392.6 n’est pas la bonne réponse !)
2. Le prix affiché d’un livre est de $24.95, mais vous bénéficiez d’une réduction de 40 %.
Par ailleurs, les frais d’envoi sont de $3 pour le premier livre et de 75 cents pour chaque
livre supplémentaire. Quel est le prix total pour 60 livres ?
3. Si vous parcourez 10 kilomètres en 43 minutes et 30 secondes, quel est votre temps moyen
par mile ? Quelle est votre vitesse moyenne en miles par heure ? (Pour rappel, 1.61 km =
1 mile)
4. Supposez que la vitesse d’une marche normale est de 8 minutes et 15 secondes par kilomètre et la vitesse d’une marche soutenue est de 7 minutes et 12 secondes par kilomètre.
Si vous partez à 6h52 et que vous parcourez un kilomètre à un rythme normal, puis 3 kilomètres à un rythme soutenu et encore un kilomêtre à un rythme normal, à quelle heure
vous arrêterez-vous ?
Ex. 1.8. Supposez que vous ayez quatre variables : a, b, c et d. Comment pourriez-vous vous
y prendre pour inverser l’ordre des valeurs qu’elles rèfèrent sans utiliser l’assignation multiple
comme a,b,c,d = d,c,b,a ? Par exemple, si à l’initialisation, a = 1, b = 2, c = 3 et d = 4,
comment obtenir 4 3 2 1 à l’écran en entrant print (a, b, c, d) ?
Chapitre 2
Branchements conditionnels
Ex. 2.1. Que font les fonctions suivantes ? Testez avec des exemples.
– def function1(n) :
if n%2==0 :
return True
return False
– def function2(n) :
result = n
if n%2==0 :
result = result/2
else :
result = result-1
result = result/2
return result
– def function3(n) :
if n%3==0 and not n%2==0:
res = True
elif n%4==0 and n%7==0:
res = True
else:
res = False
return res
Ex. 2.2. Adaptez les fonctions de l’exercice précédent comme l’assistant vous l’indique.
Ex. 2.3. Écrivez un programme pour calculer les racines réelles d’une équation du second
degré ax2 + bx + c = 0. Utilisez l’algorithme suivant :
– Le programme demande à l’utilisateur de taper les valeurs de a, b et c.
– Il calcule ensuite les racines réelles de l’équation sur la base des règles suivantes :
– ∆ = b2 − 4ac
– si ∆ est négatif, le programme affiche "il n’y a pas de solutions réelles",
– si ∆ est nul, le programme affiche la solution unique : −b
2a
– si ∆ est positif,
le programme affiche les 2 solutions :
√
b2 −4ac
– x1 = −b+ 2a
– x2 =
√
−b− b2 −4ac
2a
Ex. 2.4. Faire un programme qui calcule l’Indice de Masse Corporelle d’une personne (IMC
= masse [kg] / taille2 [m]) et qui indique l’état dans lequel cette personne se trouve en se ba3
4
sant sur la valeur de l’IMC :
IMC (kg/m2 )
moins de 16,5
16,5 à 18,5
18,5 à 25
25 à 30
30 à 35
35 à 40
plus de 40
Interprétation
dénutrition ou famine
maigreur
corpulence normale
surpoids
obésité modérée
obésité sévère
obésitê morbide ou massive
Chapitre 3
Boucles
Ex. 3.1. Que fait cette suite d’instructions lorsque b vaut 0 et lorsqu’il vaut 3 ?
a = 1
while a <= b:
print(a,end=" ")
a += 1
print(a)
Ex. 3.2. Que fait cette suite d’instructions lorsque b vaut 1 et lorsqu’il vaut 4 ?
for a in range(b):
print(a,end=" ")
print(a)
Ex. 3.3.
Modifiez le code suivant pour obtenir la factorielle de 4 à l’aide d’une boucle while.
res=0
for a in range(1,5):
res = res + a
print(res)
Ex. 3.4. Modifiez le code suivant pour obtenir le résultat de 46 à l’aide d’une boucle for.
res=0
i = 1
while i < 7:
res = res + 4
i = i+1
print(res)
Ex. 3.5. Donnez un code Python, utilisant une boucle for, réalisant l’algorithme ci-dessous.
– Pour chaque entier compris entre −10 et 10
– Si ce nombre est strictement plus petit que 0, afficher « négatif »
– Si ce nombre est strictement supérieur à 0, afficher « positif »
– Si ce nombre est égal à 0, afficher « nul »
Ex. 3.6. Donnez un code Python, utilisant une boucle while, réalisant l’algorithme ci-dessous.
– Pour chaque entier compris entre 1 et 5
– Si ce nombre est strictement plus petit que 2, afficher sa valeur multipliée par deux
– Sinon afficher sa valeur multipliée par trois
5
6
Ex. 3.7. Écrire un programme avec une boucle while qui calcule la moyenne des résultats
d’une interrogation, ces notes étant données en input, la fin des données étant signalée par la
valeur sentinelle −1 (c’est-à-dire une valeur particulière qui détermine la fin du relevé de note
pour calculer la moyenne). On suppose aussi que la suite des notes contient toujours au moins
un élément.
Ex. 3.8. Écrire un programme avec une boucle for qui calcule la moyenne arithmétique des
nombres compris entre les entiers 3 et 480.
Ex. 3.9. Écrire une fonction Python qui résout de manière approchée des équations du type :
xd − ax − b = 0,
avec a, b, deux nombres réels strictement positifs, et d un nombre entier strictement positif.
La méthode utilisée sera itérative. On calculera les termes initiaux de la suite {xk }k≥0 ,
définie par la valeur initiale x0 = 0 et la relation suivante :
1
xk+1 = (axk + b) d .
Le critère d’arrêt des itérations sera double : soit on atteint un nombre maximal d’itérations fixé
à l’avance, et la fonction renvoie la valeur None, soit l’écart en valeur absolue entre les deux
dernières valeurs calculées est inférieur à un certain ε, et la fonction renvoie la dernière valeur.
La fonction sera de la forme iter (a, b, d, n, eps), où a, b et d sont les paramètres de l’équation, n le nombre maximal d’itérations, et eps la valeur ε utilisée pour l’arrêt
des itérations.
Ex. 3.10. Soit (Fn )n∈N la suite de Fibonacci définie par :
F0 = 0
F1 = 1
Fn = Fn−1 + Fn−2 pour n ≥ 2
On considère la somme (Sn )n∈N définie par :
Sn =
n
X
1
Fi
i=1
Donnez une fonction python qui calcule une approximation de la limite de la somme (Sn )n∈N .
L’en-tête de cette fonction est :
somme_inv_fibo ( N, epsilon)
Cette fonction s’arrête :
– soit lorsque l’on a calculé N termes de la suite (Sn ),
– soit lorsque le dernier terme de la somme, F1n , est inférieur à epsilon.
Chapitre 4
Listes
Ex. 4.1. En supposant que L est une liste et que e est un objet quelconque, que renverra la
fonction suivante ?
def f(L,e):
n = 0
for elem in L:
if elem == e:
n += 1
return n
Ex. 4.2. En supposant que max est un entier positif et que b est un nombre réel (float), que
renverra la fonction suivante ?
def f(max,b):
resultat = []
n = 1
for i in range(max):
resultat.append(n)
n = n * b
return resultat
Ex. 4.3. Adaptez la fonction suivante pour qu’elle renvoie l’élément minimal de la liste donnée en paramètre.
def f(L):
resultat = L[0]
for elem in L:
if elem > resultat:
resultat = elem
return resultat
Ex. 4.4. Adaptez la fonction suivante pour qu’au retour de la fonction, chaque élément de L
est remplacé par la somme de tous les éléments qui le précédaient dans la liste. Par exemple, la
liste [1,2,3,4,5] deviendrait [1,3,6,10,15].
def f(L):
for i in range(len(L)):
L[i] *= L[i]
Ex. 4.5. Écrivez une fonction qui prend une liste L (dont la longueur sera dénotée par n dans
la suite) de nombres en paramètre et qui effectue l’algorithme suivant :
7
8
– Dans une nouvelle liste L2 de même longueur que L, recopier les deux premiers éléments
de L aux mêmes cases de L2
– Pour chaque entier i entre 2 et n − 1
– Stocker dans la ie case de L2 la somme des éléments de L en positions (i − 1) et
(i − 2).
– Renvoyer L2
Ex. 4.6. Écrivez une fonction qui, pour une liste L donnée en paramètre, renvoie la longueur
de la plus longue séquence triée dans l’ordre croissant.
Ex. 4.7. La fonction suivante vérifie si, dans une liste L donnée, les éléments d’indice impair
sont triés entre eux dans l’ordre croissant. Écrivez une fonction qui dira si les éléments de valeur
paire sont triés dans l’ordre croissant.
def indices_impairs_tries(L):
trie = True
i = 1
while trie and i < len(L)-2:
if L[i] > L[i+2]:
trie = False
i += 2
return trie
Chapitre 5
Matrices
Ex. 5.1. Ecrivez une fonction init_mat(m,n) et une fonction print_mat(M). La première construit une matrice d’entiers initialisée à la matrice nulle et de dimension m × n. La
seconde prend une matrice en paramètre et affiche son contenu.
Ex. 5.2. Que fait la fonction suivante ?
def symetrie(m):
sym = True
i = 0
n = len(m)
while i < n and sym:
j = 0
while j < i and sym:
if m[i][j] != m [j][i]:
sym = False
j += 1
i += 1
return sym
Ex. 5.3. Ecrivez une fonction sumMat(a,b) qui calcule et renvoie une matrice result –
la somme des matrices a et b :
resulti,j = ai,j + bi,j , ∀i ∈ [0, m − 1], j ∈ [0, n − 1]
Vous pouvez supposer que les matrices a et b ont les mêmes dimensions (m × n).
Ex. 5.4. Écrivez une fonction trace(M) qui prend en paramètre une matrice M de taille
n × n et qui calcule sa trace de la manière suivante :
tr(A) =
n
X
i=1
.
.
.
.
9
Aii
10
Ex. 5.5. On se donne un tableau de nombres, encodé ligne par ligne, sous forme d’une liste
dont chaque élément est lui-même une liste d’entiers. Par exemple le tableau


1 2 3
 4 5 6 
7 8 9
sera encodé sous forme de la liste [[1,2,3], [4,5,6], [7, 8, 9]].
Ecrire une fonction flip(M) qui reçoit un tel tableau en paramètre, et échange chaque
élément d’indice i, j avec l’élément d’indice n − i − 1, m − j − 1, où n est le nombre de
lignes et m le nombre de colonnes de M. (On utilise ici la convention Python pour les indices,
commençant donc à 0.)
Par exemple, le tableau ci-dessus sera modifié de la façon suivante :


9 8 7
 6 5 4 
3 2 1
Ex. 5.6. Une matrice M = {mij } de taille n × n est dite antisymétrique lorsque pour toute
paire d’indices i, j, on a mij = −mji . Ecrire une fonction booléenne qui teste si une matrice est
antisymétrique. La matrice sera passée en paramètre sous forme d’une liste de n listes, chacune
de taille n. Le nombre n peut être passé en paramètre également.
Ex. 5.7. Écrivez une fonction booléenne qui reçoit en paramètre un tableau de taille n × n et
qui répond à la question suivante : existe-t-il une ligne, une colonne, ou une des deux diagonales
du tableau qui ne contient que des valeurs identiques ?
Le tableau sera représenté par une liste de listes, chacune de ces dernières représentant une ligne
du tableau. Par exemple, la fonction renverra la valeur True pour le tableau
[[1,2,3],[3,2,1],[2,2,1]] car la seconde colonne ne contient que la valeur 2.
Téléchargement