TP 2 : Nombres et calculs avec Python
Avant tout :
Lancer SPYDER directement avec l’icône sur le bureau ;
Retrouver votre configuration de la semaine dernière avec Fichier/Charger une session en al-
lant chercher le fichier spyder.session dans Mes documents.
Exercice 1 Quelques calculs avec le module math :On utilisera en général ce module en écrivant :
from math import *
au début d’un programme ou dans une console. On a ainsi accès directement à toutes les fonctions
du module math, par exemple :
print pi, sin(pi),cos(pi)
print e, exp(1), log(e)
Utiliser les fonctions du module math pour traiter les calculs des questions suivantes.
(a) Datation au carbone 14.À la mort d’un être vivant, le carbone 14 présent dans son organisme
se désintègre au fil des années de sorte que, si pest la proportion de C14 restante au bout de
Nannées, alors N= −8310ln(p).
Écrire une fonction datation_C14(p) qui calcule Nen fonction de p.
La momie Ötzi retrouvée dans un glacier en 1991 contenait 52.8% du C14 initial à 1%
près. Donner un encadrement de son âge.
• LAustralopithecus afarensis Lucy, découverte en 1974 a un âge estimé à 4.4 millions d’an-
nées. Estimer la proportion de C14 restante. A-t-on pu effectuer la datation du squelette
au C14 ?
(b) Calculs de distances. Un bateau navigue en suivant un certain cap. À un instant donné, le ba-
teau est en position B1et le commandant repère un récif Rsous un angle de 22. Un mile plus
loin, en position B2, le commandant repère ce même récif Rsous un angle de 34. Calculer la
distance HR (distance entre le récif et la trajectoire).
B1B2H
R
Trajectoire
1 mile
2234
On pourra commencer par calculer la distance : B2H=tan(22)
tan(34)tan(22).
BLes fonctions trigonométriques sin,cos,tan de PYTHON travaillent en radians et non en
degrés.
Exercice 2 Nombres complexes avec PYTHON et module cmath :On peut définir et calculer avec
des nombres complexes. Un nombre complexe z=a+ibse note a+bj ou complex(a,b) avec
PYTHON. Attention : le complexe i se note ici complex(0,1)ou 0+1j ou plus simplement 1j.
(a) Tester dans une console les commandes suivantes :
z1=2+1j
z2=complex(1,2)
z1+z2
z1*z2
z1/z2
z1**2
z1.real
z1.imag
z1.conjugate()
BIl y a bien des parenthèses après
conjugate (et pas après real et imag).
(b) Chercher dans la documentation en ligne de PYTHON le module cmath et regarder les diffé-
rentes fonctions proposées. À quoi correspondent les fonctions abs,phase,polar et rect ?
(c) Écrire sous forme algébrique les nombres complexes :
12i
3+i,2+i
2i,(14i)(1 i)
(1+i)2
Déterminer également le module et un argument de chacun de ces nombres.
(d) On considère les nombres a=3, b=6 et c=8+i. Vérifier numériquement, avec PYTHON, que
arg(c)+arg(ca)+arg(cb)=π/4.
Exercice 3 Comprendre et modifier un programme :On considère la fonction suivante :
def ecriture_base_10(n):
if n==0:
print 0
else:
print n%10
ecriture_base_10(n/10)
(a) Taper ce programme dans l’éditeur et l’enregistrer sous un nom pertinent.
(b) Lancer le programme puis faire quelques tests dans la console (essayer par exemple dans la
console ecriture_base_10(209), essayer ensuite avec d’autres nombres).
(c) Que réalise la fonction ecriture_base_10 ?
(d) En s’inspirant de cette fonction, écrire une fonction qui réalise la décomposition en binaire
(base 2).
(e) Modifier les deux fonctions précédentes pour qu’elles affichent les chiffres de la décomposi-
tion « de la gauche vers la droite. »
Exercice 4 Quelques calculs en base 10 et en base 2:
(a) Quel est le plus grand nombre que l’on peut écrire avec (au plus) pchiffres en base 10 ?
(b) Quel est le plus petit nombre qui s’écrit avec exactement pchiffres en base 10 ?
(c) Soit nun entier et ple nombre de chiffres dans l’écriture de nen base 10. Déterminer un
encadrement de nà l’aide de ppuis en déduire un encadrement de pà l’aide de ln(n).
(d) Reprendre les questions précédentes en base 2.
Exercice 5 Les nombres flottants :Un nombre flottant xest représenté dans l’ordinateur sous la
forme :
x=m·2p
met psont des entiers relatifs (il y a de plus quelques conditions sur met p). Le nombre 0.25
peut-il se représenter exactement sous cette forme ? Montrer que le nombre 0.1 ne peut pas être
représenté exactement sous cette forme. Ceci explique que même un calcul simple comme 0.1 +0.2
présente déjà des problèmes d’approximation.
TP 2 : Nombres et calculs avec Python
Éléments de correction
Ex. 3 : Pour afficher les chiffres de la décomposition de la gauche vers la droite :
def ecriture_base_10_gauche(n):
if n==0:
print 0
else:
ecriture_base_10_gauche(n/10)
print n%10
Par exemple :
ecriture_base_10_gauche(209)
0 2 0 9
Pour avoir des décompositions en binaire, on remplace les 10 par des 2 dans les programmes précé-
dents.
Ex. 4 : (a) Le plus grand nombre que l’on peut écrire avec au plus pchiffres en base 10 est :
99···9
pchiffres
=10p1
Par exemple le plus grand nombre qui s’écrit avec 3 chiffres en base 10 est 999 =1000 1=
1031.
(b) Le plus petit nombre qui s’écrit avec exactement pchiffres en base 10 est :
100···0
pchiffres
=10p1
Par exemple le plus petit nombre qui s’écrit avec 3 chiffres en base 10 est 100 =102.
(c) Si ns’écrit avec pchiffres en base 10, alors d’après ce qui précède 10p1ÉnÉ10p1, ou
encore :
10p1Én<10p
On applique la fonction ln (strictement croissante) :
(p1)ln(10) Éln(n)<pln(10)
puis on divise par ln(10) (qui est strictement positif) :
p1Éln(n)
ln(10) <p
On en déduit l’encadrement de p:
ln(n)
ln(10) <pÉln(n)
ln(10) +1
(d) Dans le cas de la base 2 :
Le plus grand nombre qui s’écrit avec pchiffres en base 2 est 2p1 ;
Le plus petit nombre qui s’écrit avec exactement pchiffres en base 2 est 2p1;
Si un entier ns’écrit avec exactement pchiffres en base 2, alors 2p1ÉnÉ2p1 ou
encore 2p1Én<2p;
En appliquant la fonction ln, on obtient (p1)ln(2) Éln(n)<pln(2) et on en déduit :
ln(n)
ln(2) <pÉln(n)
ln(2) +1
Ex. 5 : Le nombre 0.25 est égal à 1/4, on a donc 0.25 =22. Par conséquent, 0.25 peut s’écrire sous
la forme m·2pavec m=1 et p= −2. Pour montrer que 0.1 ne peut pas s’écrire exactement sous
la forme m·2p, on fait un raisonnement par l’absurde. On suppose donc que le nombre 0.1 peut
s’écrire 0.1 =m·2pavec met pdes entiers. Alors mest un entier strictement positif, donc mÊ1.
Comme 0.1 <1, on a nécessairement p<0 (car si o avait pÊ0, on aurait 2pÊ1 et m·2pÊ1). Notons
q= −pde sorte que q>0. L’égalité 0.1 =m·2ppeut également s’écrire 2q=10m. On en déduit que
le nombre 2qdoit être divisible par 5, or ceci est impossible. On donne deux justifications possibles :
On remarque qu’une puissance de 2 a nécessairement pour dernier chiffre 2, 4, 6 ou 8 (excepté
20) alors qu’un nombre divisible par 5 a pour dernier chiffre 0 un 5. Ainsi, une puissance de 2
n’est jamais divisible par 5 ;
Le seul facteur premier qui apparait dans la décomposition de 2qest 2 alors que le nombre 5
apparait dans la décomposition en facteurs premiers de 10m. Par conséquent 2qne peut pas
être égal à10m.
On en déduit donc que 0.1 ne peut pas s’écrire sous la forme m·2p. Par conséquent, le nombre 0.1
ne peut pas être représenté de manière exacte par un flottant dans l’ordinateur.
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !