Eléments de Programmation - Thème 4
©Equipe enseignants 1i-001
UPMC – Licence 1 – 2014/2015
Table des matières
Exercice 1 : Retour sur la factorielle 1
Exercice 2 : Somme des cubes 2
Exercice 3 : Fonction mystère II 4
Exercice 4 : Combinaisons 6
Exercice 5 : Couples et intervalles 8
Exercice 6 : Retour sur l’algorithme d’Euclide 11
Exercice 7 : Nombres codés 12
Exercice 8 : Jeu de la devinette (TME) 14
Exercice 1 : Retour sur la factorielle
Cet exercice reprend la définition de la factorielle vue en cours et étudie les problèmes de
correction et de terminaison la concernant.
La définition proposée en cours est rappelée ci-dessous :
def factorielle(n):
"""int -> int
hypothese : n >= 0
Retourne le produit factoriel n!
1
"""
# k : int
k=1# on démarre au rang 1
# f : int
f=1# factorielle au rang 1
while k <= n:
f=f*k
k=k+1
return f
Question 1
Proposer un jeu de tests pour valider la fonction factorielle.
Question 2
Effectuer la simulation de boucle pour l’application factorielle(5).
Question 3 : à propos de la correction
Afin de vérifier que la définition proposée ci-dessus réalise correctement le calcul de la factorielle :
proposer un invariant de boucle
vérifier cet invariant sur la simulation de boucle pour factorielle(5).
en supposant que cet invariant est vérifié pour n’importe quelle valeur de
n
satisfaisant
l’hypothèse n>0, justifier le fait que factorielle(n) calcule bien n!.
Question 4 : à propos de la terminaison
Afin d’assurer la terminaison de la fonction factorielle :
proposer un variant de boucle
vérifier ce variant sur la simulation de boucle factorielle(5)
justifier informellement le fait que factorielle(n) termine toujours.
Exercice 2 : Somme des cubes
Cet exercice illustre le fait qu’une même boucle peut être vue de plusieurs façons différentes :
chaque vue correspondant à un invariant de boucle spécifique. On discute également d’efficacité.
2
Question 1
Compléter la définition de la fonction somme_cubes ci-dessous, qui calcule la somme :
n
X
k=1
k3
Remarque : pour votre jeu de tests on vérifiera les cas pour ndans l’intervalle [0; 4].
def somme_cubes(n):
""" ??
??
retourne ??? """
# s : ??
s=0# ??
??
while k <= n:
s = ??
??
return s
Question 2
Proposer un invariant de boucle qui semble le plus naturel et le vérifier sur la simulation
somme_cubes(4).
Justifier la correction de la boucle si on suppose cet invariant vrai pour n’importe qu’elle valeur
de n.
Question 3
Combien d’opérations arithmétiques (additions et multiplications) faut-il effectuer pour calculer
somme_cubes(n) ?
Question 4
Il est important de noter que pour une même boucle plusieurs invariants intéressants sont
possibles.
On propose donc (à priori) un autre candidat :
invariant de boucle :s=k×(k1)
22
3
Vérifier cet invariant, toujours sur la simulation somme_cubes(4).
Quel est l’expression de l’invariant en sortie de boucle ?
Question 5
En déduire une définition de la fonction somme_cubes_rapide qui effectue le même calcul que
somme_cubes mais de manière plus efficace.
Combien d’opérations arithmétiques sont nécessaires pour calculer somme_cubes_rapide(n) ?
Remarque
: dans le jeu de test on exploitera le lien entre
somme_cubes_rapide
et
somme_cubes
.
Exercice 3 : Fonction mystère II
Le but de cet exercice est de réussir à déterminer ce que calcule une fonction mystère en simulant
des boucles imbriquées.
Considérer la fonction «mystère» fsuivante :
def f(n,m):
a=n
b=0
c=0
while a>0:
while a>0:
a=a-1
b=b+1
a=b-1
b=0
c = c+m
return c
Question 1
Compléter la définition ci-dessus avec la signature de la fonction ainsi que les déclarations de
variables.
Question 2
Calculer “à la main” différentes valeurs de f(sur de petits entiers).
On explique ici comment effectuer une simulation de boucles imbriquées, avec l’appel de
f(3,4)
.
4
Les variables
a
,
b
et
c
sont modifiées dans cet ordre à chaque tour de boucle, ce seront donc les
colonnes principales de notre simulation.
Dans le cas de deux boucles imbriquées, on distingue la boucle extérieure et la boucle intérieure.
On construit un tableau où la première colonne indique à quel tour de la boucle extérieure l’on
se trouve et la deuxième colonne indique à quel tour de la boucle intérieure l’on se trouve (ou
«-») quand on est en dehors de cette boucle). Les valeurs des variables sont celles en fin de tour
de boucle comme pour les simulations «simples».
tour de boucle ext. tour de boucle int. a b c
entrée - 3 0 0
entrée 3 0 0
1er 2 1 0
2e 1 2 0
3e (sortie) 0 3 0
1er - 2 0 4
entrée 2 0 4
1er 1 1 4
2e (sortie) 0 2 4
2e - 1 0 8
entrée 1 0 8
1er (sortie) 0 1 8
3e (sortie) - 0 0 12
Expliquer comment interpréter cette simulation.
Question 3
Conjecturer ce que calcule f.
Que pensez-vous de :
f(3, -4) ?
f(-3, 4) ?
En déduire une définition compléte de la fonction, en lui trouvant un nom plus explicite.
Question 4
Question subsidiaire
: combien d’opérations arithmétiques sont nécessaires pour calculer
f(n,
m) en fonction de net m?
5
1 / 16 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 !