Exercices
Chapitre 5: Notion de programme*
1 Vocabulaire
- Donner deux exemples qui montrent pourquoi un programme est aussi une donnée.
- Quelle est la différence entre la calculabilité et la décidabilité d’un problème ?
- Donner des exemples de problèmes décidables.
- Donner un exemple de problème indécidable.
2 Exemple de fonction calculable: la racine carrée
On définit ci-dessous une fonction racine_carrée
.
def racine_carrée(n, precision=1E-2):
"""Recherche d'une racine carrée par une méthode dichotomique
Paramètres
----------
n: float
le nombre dont on recherche la racine
precision: float 0.01 par défaut
precision du calcul du carré
Returns
-------
float
la racine carrée de n
"""
gauche, droite, milieu = 0, n, n
while abs(milieu ** 2 - n) > precision :
milieu = (gauche + droite) / 2
if milieu ** 2 - n > 0:
droite = milieu - precision
else:
gauche = milieu + precision
return milieu
- Expliquer pourquoi il est nécessaire d’utiliser une précision dans ce calcul ?
- Expliquer la ligne:
while abs(milieu ** 2 - n) > precision :
- Pourquoi peut-on qualifier cet algorithme de dichotomique ?
3 Problèmes de décision sur les entiers
-
Implémenter en Python deux fonctions :
est_pair(n)
: RenvoieTrue
si le nombre entier est pair,False
sinon.est_premier(n)
: RenvoieTrue
si le nombre entier est premier,False
sinon.
-
Tester ces fonctions avec des petites entrées, puis avec des grandes pour voir si ces algorithmes seraient utilisables en pratique.
4 Non-décidabilité de l’arrêt
- Pourquoi dit-on que le problème de l’arrêt est indécidable ?
Supposons qu’il existe une fonction calculable termine(fonction, données)
qui prend 2 arguments
:
- une fonction,
- et des données d’entrée pour cette fonction
et qui renverra True
si le programme termine et False
s’il entre dans une boucle
infinie.
On définit les deux fonctions suivantes :
def fonction1(n):
if n % 3 != 0:
return True
else:
return False
def fonction2(n):
while n % 3 != 0:
print("True")
print("False")
-
Que renverront les appels suivants ?
Justifier vos réponses.
-
On définit une fonction
test_sur_soi
.Que se passe-t-il si on appelle
test_sur_soi
sur elle-même:test_sur_soi(test_sur_soi)
?