Informatique en CPGE (2014-2015) Devoir surveillé 4

Transcription

Informatique en CPGE (2014-2015) Devoir surveillé 4
http://mathematice.fr
Nom :
Informatique en CPGE (2014-2015)
Devoir surveillé 4
Durée : 1 heure.
Exercice 1 (7 points)
La fonction factorielle prend en argument un entier naturel n et renvoie n! ; elle est définie par le
code suivant :
def factorielle(n):
f=1
for p in range(2,n+1):
f*=p
return f
1. Ecrire le code d’une fonction seuil qui prend en argument un entier k et renvoie le plus petit entier
n tel que n! > k.
2. Ecrire le code d’une fonction divisible qui prend en argument un entier n et renvoie True si n! est
divisible par n + 1 et False sinon.
3. On considère la fonction suivante :
def somme_fact(n):
s=0
for p in range(1,n+1):
s+=factorielle(p)
return s
(a) Quelle valeur renvoie somme_fact(4) ?
Réponse :
Serge Bays
1
Lycée Les Eucalyptus
http://mathematice.fr
(b) Déterminer en fonction de n le nombre d’additions et le nombre de multiplications effectuées
par somme_fact(n).
Réponse justifiée :
(c) Quelles modifications peut-on apporter à la fonction somme_fact afin d’obtenir une complexité
linéaire ?
def somme_fact(n):
s=0
return s
Exercice 2 (5 points)
√
On considère la fonction f définie sur R par f (x) = ln
x2 + 1 .
1. Ecrire le code complet permettant d’écrire dans un fichier nommé "data.txt" un tableau de valeurs
de la fonction f sur l’intervalle [0; 3]. L’abscisse x décrit l’intervalle [0; 3] avec un pas de 10−2 et
chaque ligne du fichier contiendra, pour chaque valeur de x, les deux nombres x et y (y = f (x))
séparés par un point-virgule.
2. Chaque ligne d’un fichier "tableau.txt" est une chaîne de caractères contenant deux valeurs (représentant des nombres flottants), séparées par un point-virgule, respectivement l’abscisse et l’ordonnée
d’un point. Les points sont ordonnés par abscisses croissantes.
Le programme suivant permet de lire le fichier et construire la liste des coordonnées, abscisses et
ordonnées de type flottant, contenues dans ce fichier. Compléter ce programme.
fic=open(.......................)
coord=[]
for ligne in fic:
x,y=ligne.rstrip().split(.....)
coord.append(......................)
fic.close()
Serge Bays
2
Lycée Les Eucalyptus
http://mathematice.fr
Exercice 3 (5 points)
Compléter la fonction suivante qui permet de résoudre une équation f (x) = 0 en utilisant la méthode
de dichotomie : (on utilise une boucle "while").
def zeroDic(f,a,b,eps):
return a,b
1. Que représentent les valeurs de a et b renvoyées par la fonction zeroDic ?
Réponse :
2. Combien d’itérations sont nécessaires pour obtenir un encadrement d’amplitude 10−3 si l’intervalle
initial [a; b] est l’intervalle [3; 5] ?
Réponse :
3. Si f est la fonction définie par f (x) = (x2 − 2)(x + 1), a = 0, 2, b = 2, 6, eps = 0, 1 :
- lors de l’appel de la fonction zeroDic, combien de fois sera parcourue la boucle "while" ?
Réponse :
- lors de l’appel de la fonction zeroDic, combien d’opérations seront effectuées ?
Réponse :
- quel sera l’affichage résultant de l’instruction print(zeroDic(f,a,b,eps)) ?
Réponse :
Exercice 4 (3 points)
Compléter le programme suivant permettant de résoudre l’équation e−x − x = 0 sur l’intervalle [0; 1]
avec la méthode de Newton en utilisant un maximum de 100 itérations ; la fonction newton renvoie une
valeur approchée de la solution à eps près et le nombre d’itérations effectuées :
Serge Bays
3
Lycée Les Eucalyptus
http://mathematice.fr
from math import exp
def f(x):
return ..........
def dfdx(x):
return .........
def newton(f,x,dfdx,eps,N=100):
cpt=0
while .................................. :
.....................
.........
return ..........
print(’Solution approchée avec Newton’,newton(f,1,dfdx,0.001))
Serge Bays
4
Lycée Les Eucalyptus