PC 2014-2015 Informatique Lyc´ee Bertran de Born
Devoir maison 1
pour le mardi 4 novembre 2014
Consignes. Si ce n’est pas encore fait installez Python sur votre machine ; les r´eponses aux questions doivent ˆetre
r´edig´ees sur une copie. Testez vos programmes en machine.
Exercice 1. Home-made square root
Q1. Expliquer le fonctionnement du programme Python racine2.py ci-dessous.
1from math import sqrt
2 nbre=input(”Donnez un nombre postif : ”)
3 a=float(nbre)
4if a>=0 :
5print(”La racine carr´ee de ”,a,”vaut approximativement ”,sqrt(a))
6else :
7print(”Ceci n’est pas un nombre positif.”)
On se propose de concevoir un programme Python calculant une racine carr´ee sans utiliser la fonction sqrt. Pour
extraire la racine carr´ee d’un nombre positif aon utilise la m´ethode suivante :
•on part d’une valeur x0≥√a;
•on calcule les termes de la suite d´efinie par la relation de r´ecurrence :
xk+1 =1
2xk+a
xk;
•on justifie que la suite (xk)k≥1est d´ecroissante et a pour limite √a. Les termes xkpour des valeurs suffisamment
grandes de kdonnent une approximation de √a.
La convergence de la suite est quadratique : notant δk=uk−√aon v´erifie que pour k≥1:δk+1 ≤δ2
k
2√a. Cela signifie
donc que si δk≤10−palors δk+1 ≤10−2p
2√a. On consid`ere donc que le nombre de d´ecimales exactes dans l’approximation
de √apar xkdouble `a chaque it´eration (pour a≥1).
Q.2 Puisque tout nombre d´ecimal peut s’´ecrire sous la forme N.102kavec Nun entier naturel et kun entier re-
latif, il est suffisant de savoir calculer des racines carr´ees d’entiers. On se propose de concevoir une fonction
racine2ent(N) dont l’argument d’entr´ee Nest de type int. La fonction retourne la partie enti`ere de la racine
carr´ee de N. La fonction met en œuvre la m´ethode d´ecrite ci-dessus pour le nombre a=N.
(a) Proposer une m´ethode simple permettant de choisir un terme initial x0relativement proche de √N.`
A
d´efaut on prend x0=N.
(b) R´ediger la fonction racine2ent(N). Elle s’appuie sur un calcul it´eratif des termes xkqui prend fin lorsque
bxkc2≤No`u bxkcd´esigne la partie enti`ere de xk. Expliquer pourquoi l’algorithme termine. Tester votre
fonction pour les valeurs N= 1010,1020 ,1040 et 1060. Estimer le nombre d’it´erations ? Quel(s) constat(s)
peut-on faire ?
Remarque. Il serait pr´ef´erable d’utiliser une m´ethode qui ne fait pas appel au calcul sur les nombres de type float :
pour cela, on peut substituer les divisions dans la relation de r´ecurrence par des divisions enti`eres. Les questions de
terminaison et correction seraient alors `a nouveau pos´ees : on admet que c’est encore correct.
Q3. `
A l’aide des deux questions pr´ec´edentes concevoir un programme Python qui demande `a l’utilisateur un nombre
entier Nainsi qu’un entier p. Le programme affiche la valeur de √Navec au moins pd´ecimales justes.
L’´ex´ecution du programme donne dans l’interpr´eteur :
>>>
Donnez un nombre entier positif : 2
Nombre de d´ecimales pour la racine carr´ee ? 99
La racine carr´ee de 2 vaut approximativement :
1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641572
1