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