Feuille d’exercices 4#
Objectifs
Fonctions natives
Bibliothèques python : math, random, matplotlib
Exercice 1 : manipulations élémentaires#
Question 1 : En important (ou non) les bibliothèques appropriées, réaliser les instructions suivantes :
calculer la partie entière inférieure de \(\sqrt{1000}\)
calculer l’arrondi de \(\tan(\frac{101\pi}{200})\)
tirer aléatoirement un nombre décimal parmi \(\{ 0, 0.01, 0.02, 0.03, \dots, 0.98, 0.99 \}\).
# Votre réponse ici
# Votre réponse ici
# Votre réponse ici
Question 2 : Observer et expliquer les erreurs dans les calculs suivants.
import math
math.sqrt(-2)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Cell In[4], line 3
1 import math
----> 3 math.sqrt(-2)
ValueError: math domain error
math.log(exp(-10), 2)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[5], line 1
----> 1 math.log(exp(-10), 2)
NameError: name 'exp' is not defined
Question 3 : Essayer de calculer \(\tan(\pi/2)\) grâce à la fonction tan et au nombre pi de la bibliothèque math. Obtient-on une erreur ? Pourquoi ?
# Votre réponse ici
Question 4 (optionnelle) : Écrire une fonction maxabs(L) qui retourne la plus grande valeur absolue de la liste L. Si possible, votre fonction utilisera un parcours de liste par compréhension.
# Votre réponse ici
Exercice 2 : affichage graphique#
Question 1 : En utilisant matplotlib.pyplot, tracez le graphe de la fonction \(\sin(x)\) pour \(x\) entre \(0\) et \(4 \pi\). Pour tracer la fonction, on utilisera un pas de \(0.01\).
# Votre réponse ici
Question 2 : On rappelle que dans le plan, un cercle de centre \((x, y)\) et de rayon \(r\) a pour équation paramétrique :
Écrire une fonction cercle(x, y, r) qui trace un cercle dont le centre est le point de coordonnées \((x,y)\) et dont le rayon est \(r\). Votre fonction n’aura pas de valeur de retour : elle tracera simplement le cercle.
Indication : pour que les axes de la figure soient à la même échelle (et ne pas observer une ellipse lors de l’affichage), il faut utiliser l’instruction plt.axis('equal') avant d’afficher le graphique.
# Votre réponse ici
Exercice 3 : pgcd#
Question 1 : Écrire une fonction pgcd(a, b) qui retourne le pgcd de deux entiers a et b. Pour cela, rappelons l’algorithme d’Euclide :
Tant que \(b \ne 0\):
Calculer \(q\) et \(r\) le quotient et le reste de la division euclidienne de \(a\) par \(b\)
Remplacer \(a\) par \(b\) et \(b\) par \(r\)
Retourner \(a\)
# Votre réponse ici
Question 2 : En utilisant la fonction gcd de la bibliothèque math, vérifier que votre fonction est correctement implémentée. Pour cela, on pourra tirer des entiers \(a\) et \(b\) aléatoirement.
# Votre réponse ici
Exercice 4 : La suite de Syracuse#
La suite de Syracuse est une suite récursive de nombres naturels définie par un premier terme \(s_0 \ge 1\), et par la relation de récurrence suivante (pour \(n \ge 0\)) :
si \(s_n\) est pair, alors \(s_{n+1} = s_n/2\),
si \(s_n\) est impair, alors \(s_{n+1} = 3 s_n + 1\).
Par exemple, les \(15\) premiers termes de la suite de terme initial \(s_0 = 6\) sont :
On observe alors que, lorsque la suite atteint le nombre \(1\), la suite devient périodique : le motif \((4, 2, 1)\) se répète indéfiniment. On appelle prépériode les termes \((s_0, s_1, \dots, s_m)\) de la suite de Syracuse, où \(s_m\) est la première occurence de la valeur \(1\) dans la suite.
Question 1 : Implanter une fonction syracuse(s) qui prend en entrée un entier \(s \ge 1\), et qui retourne la liste des termes de prépériode de la suite de Syracuse de terme initial \(s\).
# Votre réponse ici
Question 2 : Parmi les termes initiaux \(s_0\) compris entre \(1\) et \(1000\), lequel produit une suite de Syracuse de plus grande prépériode ?
# Votre réponse ici
Question 3 : À l’aide de la bibliothèque matplotlib, tracer le graphe de la prépériode de la suite de Syracuse (c’est-à-dire, \(s_n\) en fonction de \(n\)) pour \(s_0 = 7\). Si on le souhaite, on pourra afficher seulement des points (et non la ligne continue les reliant) avec les arguments optionnels linestyle='', marker='o' de plot().
# Votre réponse ici
Question 4 : Tracer sur un même graphe les prépériodes des suites de Syracuse de termes initiaux \(s_0 = 8192\) et \(s_0 = 1234\).
# Votre réponse ici