Académique Documents
Professionnel Documents
Culture Documents
SPÉCIALITÉ
PROGRAMME 2020 C O L L E C T I O N B A R B A Z O
CAHIER d’ALGO
Algorithmique
et programmation en Python
Sous la direction d’Éric Barbazo
Fanny Plassin
Nathalie Teulié
Sommaire
PARTIE 1 Démarrage
1 Variables, fonctions et instruction conditionnelle ...................................................... 8
3 Listes ......................................................................................................................................... 12
PARTIE 2 Entraînement et TP
1 Fonctions de référence : logarithme et exponentielle............................................... 14
2 Dénombrement et permutation ........................................................................................ 16
TP Algèbre Dénombrements................................................................................................... 18
3 Suites et limites ..................................................................................................................... 20
TP Suites numériques Suites, limites et recherche de seuils ......................................... 22
TP Suites numériques Approximation de ln(2)..................................................................... 24
4 Méthode de la sécante et de Newton .............................................................................. 26
TP Logarithme Algorithme de Briggs ................................................................................... 28
TP Équation différentielle Méthode d’Euler .......................................................................... 30
5 Calcul approché d’intégrales (rectangles, trapèzes) ................................................. 32
TP Probabilités Méthode de Monte Carlo ............................................................................ 34
6 Planche de Galton et simulation d’une variable aléatoire binomiale................... 36
TP Probabilités Marche aléatoire .......................................................................................... 38
Les fichiers des scripts sont disponibles dans le manuel numérique et sur le site
lycee.hachette-education.com/Barbazo/cahier-tle
La boucle bornée
▶ Lorsqu’on doit répéter une ou plusieurs instructions un nombre défini de fois connu à l’avance, on
utilise une boucle bornée.
La syntaxe d’une boucle bornée en langage naturel Exemple :
Pour variable allant de valeur minimale à valeur maximale Pour i allant de 3 à 100
instruction(s) somme = somme + i
Fin Pour Fin Pour
Bouton permettant
d’exécuter le script
Éditeur : zone
d’écriture des
programmes
et des fonctions
Console : zone
où le programme
s’exécute
▶ L’éditeur permet d’écrire des programmes. Après l’écriture d’un programme ou d’une fonction, on
l’exécute avec l’icône . Après l’exécution d’un programme, on peut utiliser la console pour connaître
le contenu des variables calculées.
▶ La console permet de dialoguer directement avec le programme à l’aide du clavier. L’utilisateur saisit
des instructions dans la console, tape sur la touche entrée et le programme affiche une donnée à
l’écran en réponse.
La console est ainsi le lieu où s’affichent les données des programmes écrits dans l’éditeur.
Exemple :
Programme saisi dans l’éditeur et exécuté Instruction saisie dans la console et affichage
Introduction ‹ 5
Introduction
L’instruction conditionnelle if
▶ Le mot français Si du langage naturel se traduit par le mot anglais if en langage Python.
▶ Le mot français Alors du langage naturel ne se traduit pas par un mot en anglais en langage Python,
mais par un retour à la ligne, appelé indentation.
▶ Le mot français Sinon du langage naturel se traduit par le mot anglais else en langage Python.
▶ Une instruction conditionnelle peut exécuter une, deux ou plusieurs instructions selon la situation
étudiée.
• L’instruction conditionnelle en langage Exemple :
Python ci-dessous n’a qu’une seule
condition. Si la condition n’est pas réalisée,
le script n’effectue pas l’instruction.
▶ Le mot français Tant que en langage naturel se traduit par le mot anglais while en langage Python.
6 Les graphiques
▶ Le langage Python est un langage informatique
qui permet de réaliser des calculs qui sont trop
longs et compliqués à faire manuellement, mais
c’est également un traceur de courbes. Les
graphiques permettent en général de conjecturer
des solutions d’équations ou d’inéquations, de
déterminer des coordonnées de points ou de
faire de la géométrie.
▶ Pour réaliser des graphiques avec le langage
Python, il faut utiliser plusieurs bibliothèques :
matplotlib.pyplot, ou pylab et numpy.
▶ Lorsqu’on exécute un script de tracé de
graphique, l’affichage se réalise dans une fenêtre
qui s’ouvre indépendamment de l’environnement
EduPython. Il faut fermer cette fenêtre après
l’avoir visualisée.
Introduction ‹ 7
papier & crayon
Démarrage d é b ra
nché
Instruction conditionnelle
Si condition1 Faire
……..
Sinon Si condition2 Faire
……..
Sinon Faire
………
Fin Si
Fonction informatique
Chaque fonction possède un nom, renvoie un résultat et peut
avoir aucun, un ou plusieurs arguments.
b.
False 4. On écrit dans la console l’expression suivante.
Recopier le script et écrire le résultat ci-dessous. 5. Écrire le script d’une fonction que l’on appellera
racine qui renvoie comme résultat la valeur
a.
2 f ( x ) −1 pour une fonction f donnée calculée en
True un réel x donné lorsque le calcul est possible et
renvoie comme résultat le mot ‘non défini’ sinon.
b.
On n’oubliera pas d’importer la fonction sqrt de la
False bibliothèque math.
3. Expliquer ce que renvoie la fonction test2.
Elle teste si un nombre est compris entre 2 et 6 inclus.
Une instruction conditionnelle n’est pas nécessaire
ici car le test renvoie un booléen.
Démarrage ‹ 9
papier & crayon
Démarrage d é b ra
nché
2 Compléter la fonction suivante qui compte le nombre choisit un nombre aléatoire entier entre 1 et 6.
d’espaces dans une phrase écrite par l’utilisateur. La variable nbre compte donc le nombre de coup
1 def compte_espace(phrase): réalisé avant d’obtenir 5.
2 nbre=0
3 for caractere in phrase :
4 if caractere=="":
5 nbre=nbre+1
6 return nbre
Démarrage ‹ 11
papier & crayon
Démarrage d é b ra
nché
3. Listes
MÉMO
Lorsqu’on a besoin de garder et d’utiliser plusieurs variables au cours d’un programme, on utilise des listes
pour les stocker. Une liste est une collection d’objets de différents types (variables numériques, chaînes de
caractères, booléens, listes, etc.). Une liste est une variable que l’on peut nommer comme on le souhaite. Dans
les exemples ci-dessous, la variable liste est nommée L.
Python
Listes
Liste vide
Remarques :
• Les listes contiennent des objets de types différents, contrairement aux chaînes de caractères qui ne
contiennent que des objets de type chaîne.
• La boucle bornée for element in liste possède la même syntaxe que pour la chaîne de caractères. La
variable element va prendre les valeurs successives des objets de la liste.
12 › Listes
ordinateur
4 1. a. Écrire dans l’éditeur l’instruction Compléter la fonction ci-dessous qui renvoie la liste
des n lancers et la somme des faces des dés obtenue.
On utilisera la fonction lancers de la question 1.
b. Quel est le contenu de la liste L ?
1ƒ def somme_dés(n):
Cette instruction crée la liste des dix premiers
2 L=lancers(n)
nombres impairs positifs. 3 somme=0
2. Créer la liste appelée cubes, des cubes des cinq 4 for i in range( len(L) ):
premiers nombres impairs positifs. 5 somme=somme+L[i]
6 return L,somme
5 m=m/somme(effectifs)
Que renvoie-t-elle ?
6 return m
Elle renvoie l’élément de rang 1 de la liste liste
Que renvoie-t-elle ?
Que renvoie cette fonction lorsqu’on écrit dans la
console l’instruction ? Elle renvoie le dernier objet de la liste liste,
soit la liste L .
6. On écrit dans la console l’instruction :
Démarrage ‹ 13
papier & crayon
Entraînement déb r
anch
é
a+b
a+b
2 On considère la fonction incomplète fonc2 écrite en a< x! ⇔ e a < e x < e 2 et
2
Python. a+b a+b
! x < b ⇔ e 2 ! e x < eb .
1 from math import * 2
b. Compléter l’algorithme en langage naturel
2 def fonc2(a,b):
ci-dessous afin que a ! x ! b.
3 return exp(a+b)-exp(a)*exp(b)
a, b, m, M ← 0,1,1,e
1. Compléter la fonction afin que, quels que soient Tant que M − m >10−3 :
les valeurs a et b choisies par l’utilisateur, le résul- a+b
Si x ! :
tat dans la console suite à l’appel de fonc2(a,b) 2
fasse toujours 0. a+b
b ←
2
2. a. Soient a , b et x trois réels tels que a < x < b. M ← m×M
a+b Sinon :
Prouver que, si a < x ! , alors e a <e x ! e a × e b .
2 a+b
De la même façon, déterminer un encadrement de a ←
2
a+b m← m×M
e x lorsque !x<b.
2
La fonction exponentielle est croissante c. Que représente [ m ; M ] pour le réel x ?
a+b
C’est un encadrement de e x à 10−3 près.
strictement et e 2 = e a × e b , donc on a :
4 La notion de magnitude a été créée par le physicien b. Proposer une fonction energie qui, connaissant la
américain Richter en 1935. La magnitude permet magnitude M d’un séisme, renvoie l’énergie libérée
d’estimer l’énergie (en joule) libérée par un séisme. en joule.
Richter proposa comme loi liant la magnitude M
d’un séisme avec l’énergie (E en joule (J)) libérée
par celui-ci la formule log( E ) = 4,8 +1,5M.
a. Proposer une fonction magnitude sous Python c. Utiliser les fonctions ci-dessus pour compléter le
qui, connaissant l’énergie, en joule, libérée par un tableau ci-dessous (arrondir au dixième).
séisme, renvoie sa magnitude arrondie à 10−1 près.
Lieu E (joules) M
Haïti 2010 2 ×1015 7
Japon 2011 1,4 ×1018 8,9
Bordeaux 2016 4 ×1012 5,2
ln( x ) 9 x2=x2+prec
6 Soit f la fonction définie sur ]0; +∞[ par f ( x ) = .
x2 10 res=x1,x2
Le tableau de variation de f est donné ci-dessous.
11 elif alpha
: <=0 :
x 0 e0,5 −∞ 12 while f(x)-alpha>=0
: :
0,5e −1 13 x=x-prec
Variation de f 14 res=x
−∞ 0
15 else : res=[]
On cherche à déterminer une valeur approchée, 16 return res
avec une précision donnée par l’utilisateur, de(s)
solution(s) de l’équation f ( x ) = α , où α ∈R . 2. Écrire dans un éditeur Python la fonction f et la
1. Compléter la fonction sol(prec,alpha) ci-des- fonction sol et déterminer le(s) solutions(s) à 10−4
sous afin qu’elle réponde au problème. près de f ( x ) = 0,01 puis f ( x ) = −2,3.
>>> sol(0.0001,0.01)
1 def sol(prec,alpha):
2 x=sqrt(e) (1.0102212707001985, 16.79632127067449)
3 if 0<alpha <= f(x): Pour f ( x ) = 0,01, les solutions sont 1,0102 et 16,7963.
4 x1 = x
>>> sol(0.0001,-2.3)
5 while f(x1)-alpha >=0:
6 x1=x1-prec 0.5273212707002517
7 x2=x Pour f ( x ) = −2,3 , la solution est 0,5273.
8 while f(x2)-alpha >=0:
Entraînement ‹ 15
papier & crayon
Entraînement déb r
anch
é
2. Dénombrement et permutation
1 On considère dans un repère orthonormé, les points 3. Modifier la fonction précédente en une fonction
M ( x ; y ) avec x et y entiers naturel tels que 0 ! x ! 8 points2, avec quatre arguments, pour qu’elle affiche
et 0 ! y !10. la liste des points M ( x ; y ) avec xmin ! x ! xmax et
ymin ! y ! ymax et également le nombre de points
1. Combien y a-t-il de points M ( x ; y ) ?
M ( x ; y ) affichés.
Pour tout entier x compris entre 0 et 8, il y a
9 points M ( x ; 0) . Comme il y a 11 lignes de points,
on a alors en tout 99 points.
2. Compléter la fonction suivante, nommée points,
sans argument, pour qu’elle renvoie la liste de tous
les points M ( x ; y ) avec x et y entiers naturel tels
que 0 ! x ! 8 et 0 ! y !10.
1 def points():
2 L=[]
3 for i in range( 9 ):
4 for j in range(11) :
5 L.append( [i,j] )
6 return L
3 On considère les algorithmes suivants écrits en lan- 2. Écrire un calcul direct de la valeur de la variable
gage naturel. resultat renvoyée par cet algorithme.
20 ×19 ×18
N ← 20
resultat ← 20
Pour i allant de 1 à 3
resultat ← resultat × ( N − i )
3. Compléter la fonction Python suivante pour
qu’elle renvoie la valeur N × ( N −1)…× ( N −10)
1. Quelle est la valeur de la variable resultat lorsque pour un entier N !10 entré en argument.
cet algorithme a été utilisé ?
1 def produit(N):
La variable résultat contient la valeur 6 840.
2 resultat=N
3 for i in range( 1 , 11 ):
4 resultat=resultat*(N-i)
5 return resultat
16 › Dénombrement et permutation
ordinateur
5 La fonction Python chr renvoie la lettre correspon- pour les lettres. On a, pour chacun de ces choix,
dant au code ASCII donné selon le tableau suivant. 102 choix possibles pour les deux chiffres.
Code On a alors en tout 1 757 600 codes possibles.
65 66 67 … 90
ASCII
Lettre A B C … Z
b. Compléter la fonction code ci-contre pour qu’elle
1. Que renvoie l’instruction chr(67) ?
génère un code sous la forme d’une liste à envoyer
Elle renvoie la lettre C par sms lors d’une demande de paiement en ligne.
2. Pour sécuriser un paiement par carte bleu en 1 from random import randint
ligne, on doit recevoir par sms un code constitué 2 def code():
de trois lettres de l’alphabet (pas nécessairement
distinctes) et deux chiffres compris entre 0 et 9 pas 3 i=randint(65,90)
nécessairement distincts. 4 j=randint(65,90)
Entraînement ‹ 17
Objectifs
Algèbre Dénombrements
18 › Dénombrements
PARTIE 2 Nombre de parties d’un ensemble à n éléments
1 On considère un ensemble Ω à n éléments.
a. Combien y a-t-il de parties de Ω à k éléments, pour un entier naturel k compris entre 0 et n ?
n
Il y a ⎛ ⎞ parties à k éléments.
⎝ k⎠
2 Compléter la fonction nbre_parties suivante, d’argument un entier naturel n , pour qu’elle
renvoie le nombre total de parties de Ω . On utilisera les fonctions factorielle et combinai-
son écrites plus haut.
1 def factorielle(n):
2 resultat=1
3 for k in range(1,n+1):
4 resultat=resultat*k
5 return resultat
6
7 def combinaison(k,n):
8 if k>n:
9 resultat=False
10 else:
11 resultat=factorielle(n)/(factorielle(k)*factorielle(n-k))
12 return resultat
13
14 def nbre_parties(n):
15 N=0
16 for k in range(n+1) :
17 N= N+combinaison(k,n)
18 return N
Travaux pratiques ‹ 19
papier & crayon
Entraînement déb r
anch
é
3. Suites et limites
1 On considère la suite ( un ) définie par u0 = 0 et, pour
tout entier naturel n, un+1 = un + 3n − 7.
Quel sera l’affichage lorsqu’on saisit dans la console
1. Calculer u1, u2, u3 et u4 .
Python ?
u1 = −7, u2 = −11, u3 = −12, u4 = −10 .
[0, -7, -11, -12, -10]
2. Compléter la fonction rangsuite ci-dessous pour
4. On admet que lim un = +∞. Écrire une fonction
qu’elle affiche le terme de rang n. n→+∞
seuil qui permet de déterminer le plus petit entier n
1 def rangsuite(n):
tel que un >1000.
2 u=0
3 for k in range ( n ):
4 u = u + 3*k - 7
5 return u
20 › Suites et limites
ordinateur
4 1. Donner la définition de la suite ( un ) définie par la 5. On considère la suite ( v n ) définie pour tout entier
fonction ci-dessous. naturel n par v n = un+1 − un .
Écrire une fonction v qui prend pour paramètre n
et qui affiche les n + 1 premiers termes de la suite
( vn ) .
u0 = 0 et un+1 = un + 2n + 2
2. Compléter et recopier la fonction plotu qui affiche 6. Que peut-on conjecturer sur la nature de la suite
la représentation graphique des n + 1 premiers ( vn ) ? Donner son expression explicite.
termes la suite ( un ) . On conjecture que la suite est arithmétique.
1 import matplotlib.pyplot as plt v n = 2 + 2n
2 def plotu(n): 7. En déduire l’expression explicite de la suite ( S n )
n
3 for k in range( n+1 ):
définie par S n = ∑v k .
4 plt.plot( k , u(k) ,'r.') k=0
5 plt.show() ( n +1)(4 + 2n )
Sn = = ( n +1)(2 + n )
2
3. En utilisant la fonction plotu, conjecturer le sens 8. En déduire l’expression explicite de un et démon-
de variation de la suite ( un ) . trer le résultat par récurrence.
On conjecture que la suite est croissante. On obtient un = S n−1 = n ( n +1)
4. Sous quelle forme semble être l’expression expli- Preuve par récurrence.
cite de un ?
Sous la forme d’un polynôme de degré 2.
5 On se place dans un repère orthonormé et, pour tout 2. Montrer que pour tout entier naturel n,
entier naturel n, on définit les points ( An ) par leurs An An+1 = OAn+1.
coordonnées ( x n ; yn ) de la façon suivante : x 2 y2
An An+12 = ( x n+1 − x n ) + ( yn+1 − yn ) = n + n = OAn+12
2 2
⎧ x = x n − yn 2 2
{x0 = 4
y0 = 0
⎪ n+1 2 2
et, pour tout entier naturel n, ⎨
x y
⎪ yn+1 = n + n
. 3. Écrire une fonction longueurligne qui prend pour
paramètre n et qui retourne la longueur ℓ n de la
⎩ 2 2 ligne brisée A0 A1… An .
1. Compléter la fonction ci-dessous afin de
construire les points A0 à An
1 import matplotlib.pyplot as plt
2 def points(n):
3 x,y = 4,0
4 plt.plot(x,y,'r.')
5 for k in range( n+1 ):
6 x,y = x/2-y/2,x/2+y/2
7 plt.plot(x,y,'r.')
8 plt.show()
4. Conjecturer alors la limite de ℓ n lorsque n tend
vers +∞.
On conjecture que la suite tend vers environ 9,66.
Entraînement ‹ 21
Objectif
PARTIE 1 Modélisation
1 Calculer le nombre de caddies présents le soir dans chaque point un jour et deux jours
après la veille de l’ouverture.
a1 = 432, b1 = 280 et c1 = 288 a2 = 419,52, b2 = 304 et c2 = 276,48
2 Compléter la fonction caddies qui affiche les représentations graphiques des trois suites ain-
si que les nombres de caddies dans chaque point le soir, n jours après la veille de l’ouverture.
1 import matplotlib.pyplot as plt
2 def caddies(n):
3 a,b,c = 450,250,300
4 plt.plot(0,a,'r.')
5 plt.plot(0,b,'k.')
6 plt.plot(0,c,'b.')
7 for k in range(1,n+1):
8 a,b,c = 0.88*a+0.12*b+0.02*c , 0.12*a+0.88*b+0.02*c , 0.96*c
9 plt.plot(k,a,'r.')
10 plt.plot(k,b,'k.' )
11 plt.plot(k,c,'b.')
12 plt.show()
13 return a,b,c
PARTIE 3 Un seuil
1 Écrire une nouvelle fonction nommée seuilcaddies de paramètre M qui retourne le nombre
de jours nécessaires après la veille de l’ouverture du supermarché à partir desquels le
nombre de caddies dans les points A et B dépassera M.
Travaux pratiques ‹ 23
Objectif
Dans la suite de cette partie, on notera, pour n entier naturel non nul, un la somme précédente.
1 1 1 7 1 1 1 37
2 Donner les valeurs exactes de u1, u2 et u3 . u1 = , u2 = + = et u3 = + + = .
2 3 4 12 4 5 6 60
3 Recopier la fonction suite dans l’éditeur Python. Quel est le résultat affiché lorsqu’on écrit
dans la console Python ?
a. suite(10) ? b. suite(100) ?
c. suite(1000) ?
4 Comparer les résultats précédents à ln(2).
ln(2) ≈ 0,693. Les résultats précédents sont d’autant plus proches de ln(2) que n est grand.
1
5 Dans cette question, on admet que pour tout réel x strictement positif, 1− ! ln( x ) ! x −1.
x
k +1
a. En appliquant cet encadrement à x = , avec k entier naturel non nul, montrer que
1 1 k
! ln( k +1) − ln( k ) ! .
k +1 k
k k +1⎞ k +1 1 1
On a 1− ! ln⎛ ! −1, soit, ! ln( k +1) − ln( k ) ! .
k +1 ⎝ k ⎠ k k +1 k
b. Additionner les inégalités de la question 4. a. pour k allant de n à 2n −1 et en déduire un
encadrement de ln(2) .
1 1 1
On obtient un ! ln(2n ) − ln( n ) ! un + − , soit, un ! ln(2) ! un + .
n 2n 2n
1
c. En déduire que 0 ! ln(2) − un ! et justifier alors lim un .
2n n→+∞
1
En soustrayant un à l’encadrement précédent, on obtient 0 ! ln(2) − un ! .
2n
En utilisant le théorème des gendarmes, on en déduit que lim un = ln(2) .
n→+∞
24 › Approximation de ln(2)
b. Quelle est la valeur affichée lorsqu’on
écrit dans la console Python valeurappo-
chée(3) ? valeurapprochée(5) ?
b. Quelle remarque peut-on faire ? On obtient les mêmes valeurs que u1, u2 et u3 .
Travaux pratiques ‹ 25
papier & crayon
Entraînement déb r
anch
é
3 On considère la fonction f définie sur ]0; + ∞[ par 3. En s’inspirant de l’algorithme de la sécante pré-
f (x) + ln( x ) . On admet que l’équation f ( x ) = 0
= e− x cédent, écrire une fonction nommée secanteliste de
admet une unique solution dans l’intervalle ]0;2] . paramètre n qui retourne les valeurs de b0 à bn , où
b0 = 2 et bn+1 est l’abscisse du point d’intersection
1. Écrire dans l’éditeur de Python une fonction f de
de la droite ( ABn ) et de l’axe des abscisses.
paramètre x qui retourne l’image de x par f, puis,
compléter ci-dessous la fonction qui permet d’obtenir
la courbe de la fonction f sur l’intervalle ]0;2] .
4 On considère la fonction f définie sur ℝ par 2. En vous inspirant de l’algorithme de Newton précé-
f ( x ) = 2 − x 3 . On admet que l’équation f ( x ) = 0 dent, écrire une fonction newtonliste de paramètres
admet une unique solution sur l’intervalle [ −1; 3]. u et n qui retourne les valeurs de u0 à un , où u0 = u.
1. En s’inspirant de l’exercice précédent, écrire une
fonction graphef qui affiche la courbe de f sur [ −1; 3].
Entraînement ‹ 27
Objectif
2
1 1
de 0, donc x 2n sera proche de 1. Comme x >1, on a x 2n = 1+ h , avec h proche de 0.
ln(1+ h )
Comme lim = 1, on en déduit que lorsque h est proche de 0, on a ln(1+ h ) ≈ h , donc
h
( )
h→0
1
ln x 2n ≈ h, d’où ln( x ) ≈ 2n h . Résultat qui constitue l’approximation de ln( x ) selon Briggs.
d. Implanter la fonction dans l’éditeur Python et compléter le tableau (arrondir à 10−9 près).
prec 0,01 0,0001 10–8 10–9
suite(prec)[0 ] 1,000677131 1,000084616 1,000000005 1,000000001
suite(prec)[1] 10 13 27 30
e. Compléter les égalités suivantes.
= 0,6933818297000016
= 0,6933818297000016
En utilisant l’algorithme de Briggs, de quelle valeur obtient-on des valeurs approchées ?
( )1
On a, pour x = 2, ln 22n ≈ h, où n = suite(prec)[1] et 1 + h = suite(prec)[0],
donc h = suite(prec)[0]-1. On a des approximations de ln(2).
2 Cas général
Modifier la fonction précédente en créant une fonction
suite(prec,x) afin qu’elle affiche le plus petit entier n
ainsi que la valeur de un en ayant comme paramètre la
précision souhaitée ainsi qu’une valeur de x , où x >1.
28 › Algorithme de Briggs
PARTIE 2 Algorithme de Briggs
1 def briggs(x,prec):
2 n=suite(prec,x)[1]
1 Compléter la fonction briggs ci-contre afin qu’elle ren-
3 h=suite(prec,x)[0]-1
voie une valeur approchée de ln( x ) avec la précision
prec. 4 return h*2**n
Résultats : 1,0324 , 2.
b. Écrire la fonction reduc dans un éditeur Python et retrouver le
résultat précédent.
Travaux pratiques ‹ 29
Objectifs
y = f ′ ( a )( x − a ) + f ( a )
b. En déduire l’ordonnée du point N de la A
droite d d’abscisse a + h avec h non nul. f(a)
L’ordonnée de N est f ( a ) + hf ′ ( a ) .
0 a a+h
c. Donner l’ordonnée du point M.
L’ordonnée de M est f ( a + h ).
d. Que peut-on dire des deux valeurs précédentes lorsque h tend vers 0 ?
Lorsque h tend vers 0, les deux valeurs précédentes sont très proches.
30 › Méthode d’Euler
PARTIE 2 Programmation de la méthode en Python
1 Écrire ci-dessous une fonction nommée Euler_
liste qui prend pour paramètre h et qui renvoie
dans une liste les termes de la suite ( yn ) pour n
600 ⎞
allant de 0 à N où N = E ⎛ .
⎝ h ⎠
4 Saisir dans la console Python graphe_q(5). Quelle conjecture peut-on faire sur la limite de
la fonction q lorsque t tend vers +∞ ?
On conjecture que lim q ( t ) = 5.
t→+∞
2 Quelles sont les valeurs retournées lorsqu’on saisit dans la console Python constante_
temps(5) ? constante_temps(1) ?
Pour constante_temps(5), il s’affiche 100 et pour constante_temps(1), il s’affiche 99.
Travaux pratiques ‹ 31
papier & crayon
Entraînement déb r
anch
é
2 1. On écrit dans l’éditeur Python la fonction ci-dessous. Écrire ci-dessous une fonction trapèze de
paramètres n et a qui retourne la somme des aires
de ces n trapèzes.
Entraînement ‹ 33
Objectif
b. Donner une valeur affichée lorsqu’on écrit dans la console Python monte_
carlo(5000000) ?
Une valeur affichée possible est 3.1416776.
Travaux pratiques ‹ 35
papier & crayon
Entraînement déb r
anch
é
c. On note Y la variable aléatoire qui donne le gain obtenu en fonction du réservoir dans lequel tombe la bille.
Quelles sont les valeurs prises par la variable aléatoire Y ?
Y prend les valeurs 3 €, 2 €, 1 €, 0 €, 1 € et 2 €.
Calculer l’espérance de la variable aléatoire Y.
E (Y ) ≈ 3 × 0,001+ 2 × 0,01+ 0,044 − 0,205 − 2 × 0,246 + …+ 2 × 0,01+ 3 × 0,001= −0,768
En déduire le gain moyen lorsqu’on effectue 1 000 fois le jeu. Le gain moyen est −0,768 ×1000 = −768.
3 Le but de cet exercice est de visualiser la répartition de N billes dans les réservoirs d’arrivés lorsqu’elles ont
été lancées successivement au sommet d’une planche de Galton à L rangées de clous.
1. Modifier la fonction droite précédente afin qu’elle 1 def galton(N,L):
prenne pour argument L et retourne le nombre de 2 réservoir=[ 0,]*(L+1)
rebonds à droite effectués par la bille au bout des L
3 for n in range(N):
rangées de clous.
4 D=droite(L)
5 réservoir[D]=réservoir[D]+1
6 plt.plot( D , réservoir[D] ,'r*')
7 plt.show()
8 return réservoir
Entraînement ‹ 37
Objectif
Quel est le résultat affiché lorsqu’on saisit dans la console Python plusieursjeux(3,100000) ?
Que peut-on conjecturer ?
Un résultat possible affiché est 0,00902. On peut conjecturer que le gain moyen est nul.
d. Compléter le tableau suivant.
X 3 prend
En déduire l’espérance de la variable aléatoire X 3 . −3 −1 1 3
la valeur
L’espérance est égale à 0 1 3 3 1
Probabilité
8 8 8 8
38 › Marche aléatoire
PARTIE 2 Une représentation graphique pour un jeu de 5 lancers
On veut représenter dans un repère du plan une séquence de cinq lancers par une ligne
brisée qui part de l’origine du repère. L’axe des abscisses représente le nombre de lancers
du jeu et l’axe des ordonnées les gains possibles du joueur.
1 Quels sont les gains possibles du joueur 1 import matplotlib.pyplot as plt
lors d’un jeu de cinq lancers d’une pièce
2 def graphejeu():
de monnaie ?
3 plt.axis([0,5,-5 ,5 ])
Les gains possibles sont −5, −3, −1, 1, 3 et 5.
4 plt.grid()
1 Compléter la fonction graphejeu ci-contre
5 x=[0]
qui affiche la ligne brisée correspondant à
un jeu de cinq lancers et qui retourne le 6 y=[0]
gain du joueur. 7 for k in range(5):
2 Combien y-a-t-il de lignes brisées possibles 8 x.append(x[k]+1 )
lors d’un jeu de 5 lancers d’une pièce de 9 if randint(0,1)==1:
monnaie ?
10 y.append( y[k]+1 )
Il y a 25 = 32 lignes brisées possibles 11 else:
12 y.append(y[k]-1)
13 plt.plot(x,y)
14 plt.show()
15 return y[-1]
PARTIE 3 Retour à l’origine
On s’intéresse au problème de la « ruine du joueur ». C’est-à-dire au moment où la fortune
du joueur est nulle.
1 On note n le nombre de lancers de la pièce de monnaie. Quelle doit être la parité de n afin
que le gain du joueur puisse être nul ?
n doit être pair.
2 a. Écrire une fonction gainnul de paramètres n (nombre
de lancers de la pièce de monnaie) et N (nombre de jeux
de n lancers) qui retourne la fréquence des jeux dont le
gain est 0,00 € parmi les N jeux effectués. Cette fonction
devra utiliser la fonction gain précédente.
b. Tester cette fonction dans la console Python pour n = 20 et N = 100 000. Quel est le résul-
tat affiché ?
Le résultat affiché peut être par exemple 0,17615.
3 a. On note Y20 la variable aléatoire qui donne le nombre de pile obtenu par le joueur lors de
20 lancés d’une pièce de monnaie. Donner la loi de probabilité suivie par Y20 .
Y20 suit la loi binomiale de paramètres n = 20 et de probabilité du succès p = 0,5.
b. Compléter la phrase ci-dessous.
« Le gain du joueur est de 0,00 € si et seulement si Y20 prend la valeur 10 »
c. Calculer alors la probabilité d’avoir un gain de 0 euro lors d’un jeu de 20 lancers. Arrondir
le résultat à 10−3 .
P (Y = 20) ≈ 0,176
Travaux pratiques ‹ 39
rs l’ é p re u ve du Bac
Ve
I ←0
Tant que 2I ! A
I ← I +1
On suppose que la variable I contient la valeur 15 en fin d’exécution de cet algorithme.
Affirmation. 15ln(2) ! ln( A ) !16ln(2)
L’affirmation est FAUSSE
Si la variable I contient la valeur 15 à la fin de l’algorithme alors 214 ! A et 215 > A .
Donc 14ln(2) ! ln( A ) !15ln(2) .
1. Combien de voitures ont été louées avec ce 3. En utilisant cette fonction, conjecturer la date à
système de location au mois de février ? laquelle le nombre de voitures louées dépassera le
u1 = 0,9 × u0 + 42 = 0,9 × 280 + 42 = 294 stock de voitures dont dispose la commune.
On trouve que le nombre de voiture louées
294 voitures ont été louées en février.
dépassera 380 au mois de janvier 2020.
2. Compléter la fonction nommée location
ci-dessous, d’argument n, afin qu’elle renvoie la 4. Conjecturer le nombre limite de voitures que la
liste du nombre de voitures louées depuis le mois commune doit avoir en stock pour qu’elle puisse
de janvier jusqu’au n-ième mois. toujours en louer une.
1 def location(n): On conjecture que la limite de la suite ( un ) est 420.
2 u=280 Il faudrait donc que la commune possède au moins
3 L=[u] 420 voitures pour pouvoir toujours en louer une.
4 for i in range( 1 , n+1 ):
5 u=0.9*u+42
6 L.append(u )
7 return L
a ← −4
b ← −2
Tant que ( b − a ) > 0,1
a+b
m←
2
p ← f (a) × f (m)
Si p > 0 alors
a←m
Sinon
b←m
Compléter la troisième ligne du tableau ci-dessous correspondant au deuxième passage dans la boucle.
m Signe de p a b a−b b − a > 0,1
Initialisation −4 −2 2 VRAI
Après le 1er passage dans la boucle −3 Négatif −4 −3 1 VRAI
Après le 2e passage dans la boucle − 3,5 Positif − 3,5 −3 0,5 VRAI
2. Compléter les fonctions Python f et algo suivantes 3. En utilisant les fonctions précédentes, montrer
dans un éditeur Python, pour qu’elles renvoient les que les valeurs de a et de b obtenues sont
valeurs finales de a et b calculées par l’algorithme a = −3,1875 et b = −3,125 .
précédent.
1 from math import exp
2 def f(x):
4. Interpréter le résultat.
3 return 1+(-4*x**2-10*x+8)*exp(-0.5*x)
Cet algorithme est un algorithme de dichotomie. Il
4
5 def algo(): permet d’obtenir un encadrement de la solution α
6 a=-4 de l’équation f ( x ) = 0 dans l’intervalle [ −4 ; −2].
7 b=-2 On peut donc affirmer que −3,1875 < α < −3,125.
8 while b-a>0.1 :
9 m=(a+b)/2
10 p=f(a)*f(m)
11 if p>0 :
12 a=m
13 else:
14 b=m
15 return , a ,b
Quelle valeur renvoie cet algorithme lorsqu’on l’utilise ? Interpréter le résultat dans le contexte de l’exercice.
L’algorithme renvoie la valeur 4. La taille du bambou dépassera 2 mètres au bout de 4 mois.
5. Modifier la fonction précédente pour qu’elle détermine le nombre de mois qu’il faudrait à un bambou de
50 cm pour atteindre ou dépasser10 m. Combien trouve-t-on ?
On trouve 24 mois.
2,5
1,5
0,5
0
0 0,5 1 1,5 2 2,5 3
On construit la suite de nombre réels ( ai ) de la manière suivante.
On partage l’intervalle [1; 3] en n parties égales.
a0 = 1.
2
ai = a0 + × i pour tout entier naturel i compris entre 1 et n −1.
n
2
On construit n rectangles de largeur et de hauteur f ( ai ) pour i = 0;…, n −1.
n
On pose :
S n = a0 f ( a0 ) + a1 f ( a1) + …+ an−1 f ( an−1) .
1. Que représente S n ?
S n représente la somme des aires des n rectangles.
2. Écrire une fonction Python, nommée f qui renvoie la valeur de f ( x ) pour un réel x de l’intervalle [1; 3] .
f
0,23
1. Calculer une valeur approchée de f (1,75) et de a. Quelle est la valeur de la variable t à la fin de cet
f (20) . algorithme ?
f (1,75) ≈ 0,697 et f (20) ≈ 0,031 Par approximations successives, on trouve
2. On admet qu’il existe un unique temps T dans f (15,65) ≈ 0,0351 et f (15,75) ≈ 0,0349 ;
l’intervalle [1,75;20] à partir duquel le taux de CO2
la valeur de t à la fin de l’algorithme est donc 15,75.
devient inférieur ou égal à 3,5 %.
On considère l’algorithme suivant : b. Interpréter cette variable t dans le contexte de
l’exercice.
t ←1,75
p ← 0,1
15,75 est une valeur approchée du temps
Tant que V > 0,035 en minutes à partir duquel le taux de CO2 sera
t ←t+ p
V ← (0,8t + 0,2)e −0,5t + 0,03
inférieur à 3,5 %. Ce temps est donc environ
de 15 minutes et 45 secondes.
S ←0
Pour k variant de 1 à n faire :
2,5 2,5
R← × f ⎛⎜ × k ⎞⎟
n ⎝ n ⎠
S←S+R
Utiliser cet algorithme pour compléter les lignes du tableau suivant. On arrondira les résultats à 10−6 près.
Initialisation S = 0, n = 50
Boucle Pour Étape k R S
1 0,130 116 0,130 116
2 0,130 060 0,260 176
3 0,129 968 0,390 144
4 0,129 837 0,519 981
2. Compléter les fonctions Python ci-dessous, nommées f d’argument x et Int d’argument n, pour qu’elles
renvoient le résultat de l’algorithme précédent.
1 from math import log
2 def f(x):
3 return log(-2*x**2+13.5)
4
5 def Int(n):
6 S=0
7 for k in range( 1 , n+1) :
8 R=2.5/n*f(2.5/n*k)
9 S=S+R
10 return S
3. En utilisant ces fonctions, calculer la valeur de la variable S lorsque n = 50. Interpréter le résultat.
On trouve
4. Compléter la fonction nommée factorielle suivante, 5. Retrouver, en utilisant cette fonction, les résultats
d’argument n, afin qu’elle renvoie le nombre n ! des questions 1, 2 et 3.
1 def factorielle(n):
2 f=1
3 for i in range( 1 , n+1):
4 f=f*i
5 return f
MÉMENTO
DE POCHE
COLLECTION BARBAZO
Le principe de l’algorithmique
Edupython
Lancer un programme Arrêter une boucle infinie
Éditeur : lieu où
les programmes
sont écrits
Console : lieu où
les programmes
sont utilisés
‹1
Le langage naturel
On peut écrire de l’algorithmique sans passer par un langage informatique,
c’est ce qu’on appelle le langage naturel. Il sert à exprimer les programmes
en français, avec peu de syntaxe spécifique, afin de pouvoir les écrire en
langage informatique plus efficacement.
Instructions conditionnelles
Une seule condition Si condition alors
Instructions
Fin Si
‹2
Les bibliothèques de Python
Syntaxe générale
Depuis la bibliotheque
on appelle la fonction.
‹3
Les instructions sous Python
‹4
Affectations et manipulations de variables
Puissance entière de a
Racine carrée de a
Outils de comparaison
Si la variable a est strictement inférieure à 10
(respectivement > pour strictement supérieure)
Si la variable a est inférieure ou égale à 10
(respectivement >= pour supérieure ou égale)
Si la variable a est différente de 10
Si la variable a est strictement égale à 10
‹5
Les affichages et les graphiques
Importe les
bibliothèques.
Grille
Courbe
Dimensions
des axes
‹6
Les affichages et les graphiques
La représentation graphique
d’une suite avec matplotlib.pyplot
Le script suivant, écrit dans l’éditeur, utilise les fonctions usuelles
et les listes.
On veut tracer la représentation graphique de la suite ( un ) définie
3n +1
pour tout entier naturel n par un = .
n+4
Importe la bibliothèque.
‹7
Les variables listes
Liste vide
Longueur ou nombre
d’objets d’une liste
‹8
Dictionnaire
‹9
Les interactions programme-utilisateur
Affectation d’une valeur à une variable de type réel écrite sous la forme d’une
racine carrée ou d’un quotient
‹ 10
Les principales opérations en langage Python
La multiplication et la division sont prioritaires sur l’addition et la soustraction.
Syntaxe Opération
a+b Addition de a et b. (Si les variables a et b sont des chaînes de caractères, on parle de concaténation.)
a*b Multiplication de a et b. (Si la variable a ou b est une chaîne de caractères, on parle de répétition.)
a/b Division de a par b.
a ** b Élévation de a à la puissance b.
sqrt(a) Racine carrée de a. (Il faut importer sqrt() depuis la bibliothèque math.)
a // b Quotient de la division euclidienne de a par b.
a%b Reste de la division euclidienne de a par b.
Listes
Syntaxe Rôle
L = [] Liste vide.
L = [3,"oui",False]
Exemple de listes contenant des objets de types différents.
L = [3,4.2,[0,1,2]]
L[0] Premier objet de la liste ou objet de rang 0
L[k] k + 1-ième objet de la liste ou objet de rang k.
L[-1] Dernier objet de la liste.
len(L) Longueur ou nombre d’objets d’une liste.
L.append(objet) Ajoute un objet en fin de liste.
L.insert(rang,objet) Insère un objet au rang k.
L1+L2 Concatène (rassemble) deux listes.
Graphiques
Syntaxe Rôle Commentaires
grid() Affiche une grille dans un repère.
Affiche un repère gradué de a à b sur l’axe des
axis(a,b,c,d)
abscisses et de c à d sur l’axe des ordonnées.
Définit l’intervalle dans lequel varie x et le nombre Il faut importer les bibliothèques
linspace(a,b, nbrepoints) pylab et numpy ou matplotlib.
de points calculés pour tracer la courbe.
pyplot.
plt.plot(x,y) Trace le point de coordonnées (x ; y).
plt.scatter(x,y) Trace un nuage de points.
plt.show() Montre le graphique dans une nouvelle fenêtre.