Variables, opérations : exercices

\(\newcommand{\ds}{\displaystyle}\) \(\newcommand{\Frac}{\ds\frac}\) \(\renewcommand{\r}{\mathbb{ R}}\) \(\newcommand{\C}{\mathbb{ C}}\) \(\newcommand{\n}{\mathbb{ N}}\) \(\newcommand{\z}{\mathbb{ Z}}\) \(\newcommand{\Q}{\mathbb{ Q}}\) \(\newcommand{\N}{\mathbb{ N}}\) \(\newcommand{\n}{\mathbb{ N}}\) \(\newcommand{\ol}{\overline}\) \(\newcommand{\abs}[1]{\left| \,{#1} \right|}\) \(\newcommand{\pv}{\;;\;}\) \(\newcommand{\ens}[1]{\left\{ {#1} \right\}}\) \(\newcommand{\mens}[1]{\setminus\left\{ {#1} \right\}}\) \(\newcommand{\Par}[1]{\left({#1}\right)}\) \(\newcommand{\pe}[1]{\left\lfloor {#1} \right\rfloor}\) \(\newcommand{\trans}[1]{\,^t\!{#1}}\)

Variables, opérations : exercices

Exercices

Demi-carré en mode texte

Ecrire un code Python qui affiche exactement ceci (les caractères sont des lettres X majuscules) :

X
XX
XXX
XXXX

Bien sûr, et même si vous avez déjà rencontré cela, aucune boucle for n’est à utiliser.

Echanger deux variables

Cet exercice sera plutôt à faire en 2e lecture.

Étant donné deux variables \(x\) et \(y\), on veut permuter leurs valeurs. Par exemple si au départ \(x=81\) et \(y=31\) alors, après échange, on doit avoir: \(x=31\) et \(y=81\). On pourra compléter le code ci-dessous :

x=81
y=31
print(x,y)

# VOTRE
# CODE
# ICI

print(x,y)

Bien sûr votre code doit fonctionner correctement si on donne d’autres valeurs à x et y aux lignes 1 et 2.

On fera comme lorsqu’on veut échanger deux étiquettes A et B placées sur des objets : on utilise une étiquette de nommage temporaire.

La finance aime Python

En utilisant des puissances de 10, une variable milliard et une variable million, traduire l’opération suivante :

200 milliards de millions augmenté de 2020 millions et privé de 925 milliards.

Afficher le résultat (on trouvera 199999077020000000).

[De fait, Python est assez utilisé en finances, cf. par exemple Python in finance ou encore Best Python Librariess for Finance]

Factorielle de 10

Calculer la valeur de factorielle 10, c’est-à-dire du produit \(p\) des 10 premiers entiers en commençant avec 1 :

\(p=1\times 2\times \dots\times 10\)

On devra trouver 3628800. Bien sûr, aucune instruction de boucle (for ou while) n’est à utiliser.

Volume du ballon de rugby

Consulter l’article de wikipedia donnant le volume d’un ellipsoïde de révolution.

On donne la hauteur H d’un ballon de rugby, sa largeur L et on demande de calculer son volume V. On posera pi = 3.14 et on calculera le volume en litres d’un ballon standard (\(H = 29 \text{cm}\) et \(L= 19 \text{cm}\)) et on trouvera environ 5,5 litres.

Rappel. 1 litre vaut \(1 \mathtt{dm^3}\).

Formule de Héron

La formule du Héron donne l’aire \(\mathcal{A}\) d’un triangle \(\mathtt{ABC}\) connaissant la longueur de ses trois côtés \(\mathtt{a=BC}\), \(\mathtt{b=CA}\) et \(\mathtt{c=AB}\) :

\(\mathtt{\mathcal{A}=\sqrt{p(p-a)(p-b)(p-c)}}\)\(\mathtt{p=\frac{a+b+c}{2}}\) est le demi-périmètre du triangle.

Ecrire cette formule en utilisant la variable auxiliaire accompagnant la formule. Appliquer à un triangle de côtés 3, 4, 5 (on trouvera une aire de 6).

Volume d’un tétraèdre

On considère un tétraèdre

../../../_images/tetraedre.png

et on suppose que les côtés adjacents à un sommet donné sont de longueurs \(a\), \(b\) et \(c\). Les longueurs des côtés opposés aux côtés de longueurs \(a\), \(b\) et \(c\) sont respectivement \(x\), \(y\) et \(z\).

On admet que le volume \(V\) du tétraèdre est donné par la formule

\(V=\frac{1}{12} \, \sqrt{4 \, a^{2} b^{2} c^{2} - X^{2} a^{2} - Y^{2} b^{2} - Z^{2} c^{2} + X Y Z}\)

\(X=b^2+c^2-x^2,\quad Y=a^2+c^2-y^2,\quad Z=a^2+b^2-z^2\)

Ecrire en Python une formule qui donne le volume du tétraèdre. Appliquer au tétraèdre ABCD de dimensions : AB=8, BC=5, CA=6, DA=4, DB=7 et DC=3. On trouvera un volume de 5.59 à 1/1000 près.

La formule utilisée vient de wikipedia, la formule dont le dénominateur est 12.

Volume d’un sac-poubelle

Un sac-poubelle prêt à l’emploi est assimilé à une superposition de deux feuilles de plastique rectangulaires de dimensions \(d\) et \(D\) avec \(d\leq D\). On peut approcher le volume maximal que peut contenir le sac poubelle par la formule suivante :

\(V=d^3\left[\frac{D}{\pi d}-0,142\times\left(1-\frac{1}{10^{\frac{D}{d}}}\right)\right]\)

d’après la formule trouvée dans Paper bag problem.

Un sac du commerce a pour dimensions 8 dm et 8,5 dm. En appliquant la formule ci-dessus, calculer le volume du sac, en arrondissant aux 10 litres les plus proches (on doit trouver un résultat pas trop éloigné de 100 litres). Pour arrondir un nombre \(\mathtt{x}\) à \(\mathtt{1/10^k}\) près, où \(\mathtt{k}\) est un entier de signe quelconque, on utilisera \(\mathtt{round(x, k)}\).

Fromage sur la pizza

Une pizza de diamètre \(D\) possède une couverture de fromage que l’on assimile à un disque de même centre que la pizza. Le disque de fromage s’arrête à une distance \(C\) du bord.

On vous demande de calculer le pourcentage \(P\) de fromage par rapport à la pizza. On arrondira le pourcentage à l’entier le plus proche avec la fonction round :

round(3.8)=4 ou round(2.3)=2.

Par exemple, si \(D=40\) et \(C=3\) alors on trouvera que \(P=72\%\).

L’aire d’un disque de diamètre \(d\) est \(\pi d^2/4\) mais en fait aucune formule utilisant \(\mathtt{\pi=3.14}\) n’est à connaître. Il vous suffit juste de savoir que si on multiple le diamètre d’une pizza par \(k\), alors sa surface est multipliée par \(k^2\).

Cet exercice est inspiré d’un exercice de Kattis qui est un site de concours de programmation.

Valeur approchée de \(e= \text{2,718...}\)

Lorsque l’entier \(n\) est grand, l’expression \(\left(1+\displaystyle\frac 1n\right)^n\) a une valeur proche de la constante mathématique \(e= \text{2,718...}\) qui est la base des logarithmes népériens. Donner la valeur approchée fournie par \(n=100000\).

Calculs

Faire effectuer par Python les calculs suivants :

\(\displaystyle a=10 ^{ 2 \times 3}\quad b=\displaystyle\frac {666}{74\times 9}\quad \displaystyle c = 2 \times 3,14159 + 2,71828 + 1,4142 \times 5 \quad \displaystyle d=\frac{1}{1000^{\frac{2}{3}}}\)

Périmètre d’une ellipse

Il n’existe pas de formule donnant une valeur exacte du périmètre d’une ellipse d’axes de longueurs \(a\) et \(b\) avec \(b\leq a\).

../../../_images/ellipse_a_b.png

Toutefois, il existe plusieurs formules donnant une valeur approchée.

Par exemple, voici l’approximation de Ramanujan :

\(P=\pi {\left[3 \, a + 3 \, b - \sqrt{3 \, a^{2} + 10 \, a b + 3 \, b^{2}}\right]}\)

On dispose aussi de cette approximation de Padé :

\(P= \pi (a+b)\frac{135168-85760h-5568h^2+3867h^3}{135168-119552h+22208h^2-345h^2} \text{ avec } h=\left(\frac{a-b}{a+b}\right)^2\)

Comparer ces approximations pour \(a=2\) et \(b=1\), une approximation très précise étant \(\mathtt{P=9.688448220547675}\).

Aire d’un segment circulaire

On découpe sur un disque de rayon \(\mathtt{R}\) donné une tranche de largeur \(\mathtt{h\leq R}\) donnée :

../../../_images/segment_circulaire.png

En appliquant la formule donnée sur Wikipedia, calculer l’aire \(\mathtt{A}\) de la zone découpée en fonction de R et \(\mathtt{h}\). On importera du module math la fonction acos qui correspond à la fonction arccos. Vérifier en particulier que si \(\mathtt{R=1}\) et \(\mathtt{h=2/3}\) alors \(\mathtt{A\simeq 0.92}\).

Combien d’oranges pour un jus ?

On veut remplir un verre d’un volume V cl de jus d’orange frais sans pulpe. Le verre sera rempli dans une proportion p, par exemple p=0.75 pour signifier que le verre sera rempli aux 3/4 de son volume. Une orange est assimilée à une sphère de diamètre de d cm. Une fois pressée, en retirant la pulpe et la peau, elle restitue du jus dans une proportion qu’on appelera taux, par exemple, taux = 0.7 signifie que l’orange délivre \(\mathtt{70\%}\) de son volume en jus. On utilisera pi = 3.14 et on rappelle que la formule du volume d’une sphère de rayon R est

\(\mathtt{V=\dfrac 43\pi R^3}\).

En utilisant des variables V, p, d et taux, trouver une expression donnant le nombre N d’oranges nécessaires pour remplir le verre.

On utilisera que la partie entière d’un flottant positif z est donnée par int(z), par exemple, int(42.81) vaut 42.

Application numérique : V=50, p=90%, d=7, taux=70% ce qui doit nécessiter N = 4 oranges.

Vulnerant omnes, ultimat necat

  1. Combien y-a-t-il de secondes dans un siècle ? (utiliser des variables une_heure, j, an et siecle et supposer qu’une année est constituée de 365 jours 1/4)
  2. À partir de quel âge un individu a vécu au moins 1 milliard de secondes ? (réponse : entre 31 et 32 ans)

Date fournie par le GPS

La date initiale à partir de laquelle est mesuré le temps par les GPS est le 6 janvier 1980. La date courante lue par le GPS en utilisation est déterminée à l’aide d’un nombre de semaines codé sur 13 bits compté depuis la date initiale. Autrement dit, le GPS ne peut mesurer que \(2^{13}\) semaines, ensuite il revient à zéro. Indiquer l’année à laquelle le GPS va se réinitiliser. On utilisera qu’une année comporte 365,256 jours.

Pour information, initialement, le nombre de semaines était codé sur 10 bits, donc 1024 semaines, soit un peu moins de 20 ans, ce qui a entraîné deux réinitilisations des GPS (en 1999 et en avril 2019).

Priorités des opérateurs

L’expression 2 + 3 * 5 pourrait a priori s’interpréter (2 + 3) * 5 ou 2 + (3 * 5). Demandons à Python la valeur des trois expressions :

x=2 + 3 * 5
y=(2 + 3) * 5
z=2 + (3 * 5)

print (x==y, x==z)
False True

Donc la bonne interprétation avec les parenthèses est 2 + (3 * 5).

Faire de même pour les cinq expressions suivantes autrement dit placer toutes les parenthèses utiles dans l’expression pour obtenir une expression non ambiguë et de même valeur :

- 1 ** 2
10 ** 2 ** 3
7 * 29 / 7
2 / 1 * 2
60 / 6 / 2 / 5

Puissances sans parenthèses

Si \(a\) est un nombre, on considère les deux expressions

\(b=a^{\left({a^a}\right)}\quad c={\left({a^a}\right)}^a\)

c’est-à-dire que

  • le nombre \(b\) est \(a\) élevé à la puissance \(a^a\), par exemple, si \(a=2\) alors \(b=2^4=16\)
  • le nombre \(c\) est \(a^a\) élevé à la puissance \(a\), par exemple, si \(a=2\) alors \(c=4^2=16\)

Est-il possible sous Python de calculer l’expression \(b\) ci-dessus sans utiliser de parenthèses ?

Même question pour \(c\) ?

Calculer \(b\) et de \(c\) pour les valeurs 2, 3, etc jusqu’à ce que le temps de calcul devienne prohibitif.

Formule

On connaît la formule mathématique suivante \(\mathtt{1+x+x^2+x^3 = \displaystyle\frac{x^4-1}{x-1}}\).

  1. Introduire une variable x, par exemple \(\mathtt{x=42}\) et traduire les deux expressions (celle de gauche et celle de droite) de la formule ci-dessus par du code Python avec deux variables gauche et droite. ATTENTION aux parenthèses !

    Afficher un booléen qui indique si les valeurs de gauche et droite sont égales.

  2. Vérifiez l’exactitude de cette formule pour \(\mathtt{x=208066}\). Si la formule n’est pas exacte, modifiez votre code en observant que le quotient exact au membre de droite doit être un entier puisque le membre de gauche est un entier.

Diviseur, multiple

  1. Vérifier que 29 est un diviseur de 2030.
  2. Montrer que 192642212037519549 et 138633362400520509 ont même reste dans la division entière par 2030.

Multiples de 421

Ecrire la liste des 5 premiers multiples de 421. On donnera deux codes :

  • un code affichant les nombres les uns en-dessous des autres,
  • un code affichant les nombres les uns à côtés des autres.

Nombre de tours

Utiliser des variables pour résoudre le problème suivant :

un coureur fait un tour de circuit en \(c\) minutes. Quel est le nombre \(x\) de tours complets qu’il effectuera en \(n\) minutes ? Appliquer avec \(c=7\), \(n=240\).

Plus petit multiple strictement supérieur

On donne un entier \(d>0\) et un entier \(a\) et on demande de trouver le plus petit multiple \(m\) de \(d\) tel que \(m>a\). Par exemple, si \(d=10\) alors :

  • si \(a=42\) alors \(m=50\)
  • si \(a=2020\) alors \(m=2030\).

Plus petit multiple supérieur ou égal

On donne un entier \(d>0\) et un entier \(a\) et on demande de trouver le plus petit multiple \(m\) de \(d\) tel que \(m\geq a\). Par exemple, si \(d=10\) alors :

  • si \(a=42\) alors \(m=50\)
  • si \(a=2020\) alors \(m=2020\).

Nombre d’entiers impairs entre deux entiers donnés (formule)

On donne deux entiers \(a\) et \(b\) avec \(a\leq b\). On demande de déterminer le nombre d’entiers impairs \(n\) entre \(a\) et \(b\), c’est-à-dire, vérifiant \(a\leq n\leq b\). On pourra utiliser que si \(A\) et \(B\) sont des entiers tels que \(A\leq B\) alors le nombre d’entiers entre \(A\) et \(B\), au sens large, est \(B-A+1\). Le résultat s’appuyera sur une formule (à trouver) utilisant des divisions entières par 2.

Voici quelques exemples de comportement :

Entre 42 et 50 : 4
Entre 42 et 51 : 5
Entre 43 et 50 : 4
Entre 43 et 51 : 5
Entre 42 et 42 : 0
Entre 42 et 43 : 1
Entre 43 et 43 : 1
Entre 43 et 44 : 1
Entre 123456789 et 987654321 : 432098767

Nombre de carrés dans une figure (formule)

Cet exercice n’est pas un exercice de dessin

On considère une figure carrée composée de disques alignés, comme ci-dessous :

../../../_images/carre_jetons.png

Le côté du carré est formé de \(n\) disques. La figure est formée d’une succession de \(p\) carrés concentriques, tracés ici avec des couleurs différentes pour qu’ils soient bien identifiables. Dans le modèle ci-dessus, on a \(n=13\) et \(p=7\).

On demande d’écrire une formule exprimant \(p\) en fonction de \(n\) (réaliser plusieurs figures pour comprendre le lien entre \(n\) et \(p\)).

Nombre de multiples de \(d\) entre deux valeurs données

On donne deux entiers \(\mathtt{a}\) et \(\mathtt{b}\) avec \(\mathtt{a\leq b}\) et un entier \(\mathtt{d>0}\). Le nombre \(\mathtt{N}\) de multiples de \(\mathtt{d}\) tels que \(\mathtt{a\leq m\leq b}\) est donné par la formule suivante :

\(\mathtt{N=\pe{\frac bd+\frac{-a}d+1}}\)

\(\mathtt{\pe{x}}\) désigne la partie entière de \(\mathtt{x}\) (en Python, c’est la fonction floor du module math).

Ecrire un code qui partant de \(\mathtt{a, b}\) et \(\mathtt{d}\) calcule le nombre \(\mathtt{N}\) ci-dessus. Par exemple, si \(\mathtt{d=2030}\), si \(\mathtt{a}\) vaut 100 milliards et si \(\mathtt{b}\) vaut 1000 milliards alors on trouvera que \(\mathtt{N=443349754}\).

Variable définie suivant la parité

Soit un entier n référençant une variable entière. A l’aide de la division entière, définir une variable N valant n-1 si n est impair et valant n sinon.

Répétitions sans boucle

Cet exercice réclame de l’astuce !

  1. Soit l’entier N dont l’écriture en base 10 est formée du chiffre 9 répété 2020 fois :

    Afficher la valeur N en base 10. Indication : que se passe-t-il si on ajoute 1 à N ?

  2. Soit l’entier N dont l’écriture en base 2 est formé du chiffre 1 répété 2020 fois. Afficher la valeur N en base 10.

Diviser pour carreler

Une pièce mesure \(a\) cm de long et \(b\) cm de large. On veut carreler la pièce avec des carreaux (carrés) de côté \(c\) cm. Combien doit-on acheter de carreaux pour être certain de pouvoir recouvrir complètement la pièce (ignorer l’épaisseur du joint) ?

Par exemple, si a = 500, b = 430 et c = 50, le nombre de carreaux à acheter est 90. En effet, il y a besoin d’exactement 10 carreaux dans la longueur (\(\mathtt{10\times 50 = a}\)). Pour recouvrir complètement la largeur, 8 carreaux ne suffisent pas (cela ferait une largeur de \(\mathtt{8\times 50 = 400}\) cm au lieu des 430 cm) et il en faut donc 9 dans la largeur. On a donc besoin de \(\mathtt{10\times 9 = 90}\) carreaux et il y aura une « chute » non réutilisable de 30 cm de large.

Formule pour arrondir une note au quart de point

  1. La fonction standard round(x) arrondit un nombre entier ou flottant à l’entier le plus proche. La fonction int(x) supprime la partie décimale d’un flottant \(\mathtt{x}\), par exemple int(3.14) vaut 3. Tester ces deux fonctions sur les exemples suivants :

    22.64
    47.1778
    42
    42.5
    
  2. On cherche à arrondir une note au quart de point. Par exemple, une note de 8.33 s’arrondit en 8.25 et une note de 15.66 s’arrondit en 15.75. Une note qui tombe pile entre deux quarts de point est arrondie au quart supérieur. Par exemple, la note de 19.875 est arrondie à 20.

    Observation 1 : pour arrondir une note au quart de point, il suffit juste de savoir arrondir la partie décimale de la note (qui est un nombre entre 0 et 1 donc). Par exemple, comme 0.33 s’arrondit 0.25, la note de 8.33 s’arrondit en 8.25.

    Observation 2 : pour arrondir au quart de point une note x comprise entre 0 et 1, il suffit de

    • diviser cette note par 0.25,
    • prendre l’entier le plus proche,
    • remultiplier le résultat par 0.25.

    Par exemple, pour 0.66, on obtient successivement 2.64 puis 3 puis 0.75.

    En utilisant ces deux observations, écrire une formule utilisant les fonctions round et int qui partant d’une note x, crée une variable arrondi qui est l’arrondi de la note x au quart de point. Voici quelques exemples de comportement :

    9 → 9.0
    10.5 → 10.5
    11.75 → 11.75
    12.25 → 12.25
    10.375 → 10.5
    8.33 → 8.25
    5.66 → 5.75
    10.14 → 10.25
    10.13 → 10.25
    19.875 → 20.0
    

Plus grand entier pair tel que …

On donne un entier \(\mathtt{n\geq 0}\). On demande de trouver le plus grand entier pair \(\mathtt{N}\) tel que \(\mathtt{N\leq n/2}\).

Par exemple,

  • si \(\mathtt{n=42}\) alors \(\mathtt{n/2=21}\) et donc \(\mathtt{N=20}\)
  • si \(\mathtt{n=2019}\) alors \(\mathtt{n/2=1009.5}\) et donc \(\mathtt{N=1008}\).

Le calcul de \(\mathtt{N}\) devrait pouvoir tenir en une ligne.

Deux mois plus tôt

On numérote les mois m de 1 à 12 et on recherche le numéro M du mois quand on va deux mois en arrière dans le calendrier. Par exemple, si m = 9 (septembre), deux mois plus tôt c’est le mois de juillet, (donc M = 7). Attention, si m = 1 (janvier), deux mois plutôt c’est M = 11 (novembre) et si m = 2, (février donc) deux mois plutôt c’est M = 12 (décembre).

On demande de trouver une formule apparaissant sous la forme d’une expression, utilisant m (entre 1 et 12) et des opérateurs arithmétiques (+, -, etc) et en particulier l’opérateur modulo et qui calcule M expliqué ci-dessus et entre (1 et 12).

Il n’est pas attendu d’utiliser la valeur entière des booléens (ce qui n’a pas été vu dans ce cours d’ailleurs). On pourra essayer de traiter un décalage quelconque, avant ou après la date (par exemple, 6 mois en arrière ou 3 mois plus tard).

Position après des allers et retours

Cet exercice est à caractère algorithmique et nécessitera un certain temps de recherche (sur feuille) et une analyse préalable. Il faudra utiliser une division entière.

On se donne deux entiers \(a\) et \(b\) avec \(a\leq b\) ainsi qu’un entier \(\mathtt{N\geq 0}\). Un puce, placée initialement à l’entier \(a\), se déplace pendant \(\mathtt{N}\) secondes. A l’issue des \(\mathtt{N}\) secondes elle s’arrête à la position où elle se trouve. La puce se déplace toujours d’un entier à un de ses voisins et le déplacement se fait en exactement une seconde. Quand elle atteint \(b\) et que le temps n’est pas écoulé, elle repart vers \(a\) et, de même, quand elle atteint \(a\) elle repart vers \(b\). On demande de calculer la position \(\mathtt{c}\) de la puce à l’instant \(\mathtt{N}\).

Par exemple, si \(a=4\), \(b=7\) alors si \(N=10\) on aura \(\mathtt{c=6}\) et si \(N=2040\) on aura \(\mathtt{c=4}\).

On pourra remarquer que la puce passe en \(a\) et en direction de \(b\) de manière périodique.

Affichages empilés, côte-à-côte

On vous donne un entier \(x\), par exemple \(x=2020\). Ecrire le code d’un programme qui réalise l’affichage de

\(x\), \(x+1\) et \(x+2\)

avec un seul nombre par ligne puis qui saute une ligne et affiche en ligne de \(x\), \(x+1\) et \(x+2\). L’ensemble doit être entouré d’un séparateur formé de 25 tirets. Avec l’exemple \(x=2020\), on obtient les 7 lignes suivantes :

-------------------------
2020
2021
2022

2020 2021 2022
-------------------------

Reproduire un affichage

Soit une variable x, représentant un entier. On cherche à fournir un affichage du calcul de \(10x+1\). Si, par exemple, \(x=42\), on veut que l’affichage ait EXACTEMENT la forme suivante

x = 42 => 10 * x + 1 = 421

ou encore (si \(x=3\)) :

x = 3 => 10 * x + 1 = 31

Écrire un code qui produise ce type d’affichage.

Copier-coller pour Fibonacci

Voici les 12 premiers termes de la suite de Fibonacci :

\(1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144\)

Plus généralement, les deux premiers termes de cette suite sont 1 et encore 1 et, chaque terme de la suite à partir du troisième s’obtient en faisant la somme des deux précédents. Par exemple, ci-dessus, \(89 = 34 + 55\).

On cherche à calculer le \(\mathtt{n}\)-ème terme de la suite de Fibonacci. Comme on ne dispose pas encore de la structure de contrôle Python permettant de le faire de manière appropriée (la boucle \(\mathtt{for}\)), on va utiliser une astuce pas très élégante, des copier-coller. On calculera le 200e terme. On trouvera que c’est un entier de 42 chiffres et qui commence par 2805. Pour accélérer la saisie, on fera des copier-coller de copier-coller.

On utilisera quatre variables :

Variable Initialisation Rôle
\(\mathtt{n}\) \(\mathtt{n=2}\) Rang du terme courant
\(\mathtt{x}\) \(\mathtt{x=1}\) Avant-dernière valeur de la suite
\(\mathtt{y}\) \(\mathtt{y=1}\) Dernière valeur calculée
\(\mathtt{z}\) Aucune \(\mathtt{z = x + y}\) : valeur suivante

Indications

La répétition sera assurée par des copier-coller. Supposons stockés

  • l’avant-dernier terme, disons x, de rang n-1
  • le dernier terme, disons y, de rang n

Alors le prochain terme sera z=x+y et il faut penser à remettre à jour les variables pour l’étape suivante.

Factorielles

On rappelle que la notation \(k!\) désigne la factorielle de l’entier positif \(k\) c’est-à-dire le nombre

\(1\times 2\times \cdots \times k.\)

Par exemple \(5!=1\times 2\times 3\times 4\times 5=6\times 20=120\).

  1. Faites calculer \(20!\) par Python en écrivant explicitement le produit des 20 entiers.

  2. L’instruction suivante :

    from math import *
    

    placée dans un code Python, est une instruction d’importation. Elle permet d’importer dans votre code toutes les fonctionnalités du module math. Donc une fois l’instruction validée, votre code peut utiliser librement les fonctions mathématiques comme cosinus, sinus, etc, le nombre \(\pi\), le nombre \(\mathrm e = 2,71828...\) (la base du logarithme naturel) ou encore la fonction factorielle.

    Après avoir placé dans votre code la ligne ci-dessus, faites calculer directement

    • factorielle de 20
    • factorielle de 2020
    • \(\displaystyle\cos\frac\pi 4\)
    • \(\displaystyle\frac 1e\)

    Utilisez que :

    • la fonction factorielle s’appelle factorial
    • la fonction cosinus s’appelle cos,
    • la constante \(\pi\) s’appelle pi,
    • la constante \(\mathrm e\) s’appelle e
  3. La formule de Stirling donne une approximation de \(n!\) pour de grandes valeurs de \(n\). Cette formule énonce que \(n! \approx \text{sn}\) où :

    \(\text{sn} = \left(\frac ne\right)^n\;\sqrt{2\pi n}\)

    Pour \(n=20\), \(n=170\) et \(n=2020\) calculer

    • la valeur exacte de \(n!\) en utilisant la fonction factorial,
    • la valeur approchée sn donnée par la formule de Stirling.
    • l’erreur relative err donnée en pourcentage : \(\displaystyle\text{err}=100\frac{n!-\text{sn}}{n!}\)

    Pour \(n=2020\), vous aurez une erreur. Essayez de comprendre cette erreur.