$$\newcommand{\mtn}{\mathbb{N}}\newcommand{\mtns}{\mathbb{N}^*}\newcommand{\mtz}{\mathbb{Z}}\newcommand{\mtr}{\mathbb{R}}\newcommand{\mtk}{\mathbb{K}}\newcommand{\mtq}{\mathbb{Q}}\newcommand{\mtc}{\mathbb{C}}\newcommand{\mch}{\mathcal{H}}\newcommand{\mcp}{\mathcal{P}}\newcommand{\mcb}{\mathcal{B}}\newcommand{\mcl}{\mathcal{L}} \newcommand{\mcm}{\mathcal{M}}\newcommand{\mcc}{\mathcal{C}} \newcommand{\mcmn}{\mathcal{M}}\newcommand{\mcmnr}{\mathcal{M}_n(\mtr)} \newcommand{\mcmnk}{\mathcal{M}_n(\mtk)}\newcommand{\mcsn}{\mathcal{S}_n} \newcommand{\mcs}{\mathcal{S}}\newcommand{\mcd}{\mathcal{D}} \newcommand{\mcsns}{\mathcal{S}_n^{++}}\newcommand{\glnk}{GL_n(\mtk)} \newcommand{\mnr}{\mathcal{M}_n(\mtr)}\DeclareMathOperator{\ch}{ch} \DeclareMathOperator{\sh}{sh}\DeclareMathOperator{\th}{th} \DeclareMathOperator{\vect}{vect}\DeclareMathOperator{\card}{card} \DeclareMathOperator{\comat}{comat}\DeclareMathOperator{\imv}{Im} \DeclareMathOperator{\rang}{rg}\DeclareMathOperator{\Fr}{Fr} \DeclareMathOperator{\diam}{diam}\DeclareMathOperator{\supp}{supp} \newcommand{\veps}{\varepsilon}\newcommand{\mcu}{\mathcal{U}} \newcommand{\mcun}{\mcu_n}\newcommand{\dis}{\displaystyle} \newcommand{\croouv}{[\![}\newcommand{\crofer}{]\!]} \newcommand{\rab}{\mathcal{R}(a,b)}\newcommand{\pss}[2]{\langle #1,#2\rangle} $$
Bibm@th
Lien copié  ✅

Exercices corrigés - Algorithmes : écrire et analyser des algorithmes en maths

Algorithmes en analyse
Exercice 1 - Temps d'arrêt [Signaler une erreur] [Ajouter à ma feuille d'exos] [Copier le lien]
Enoncé
On note $H_n$ la somme $H_n=\sum_{k=1}^n \frac 1k$. On admet que $(H_n)$ tend vers $+\infty$. Écrire un algorithme qui détermine le plus petit entier $n$ tel que $H_n$ dépasse un réel $a$ donné.
Corrigé
Exercice 2 - Pas cette limite ! [Signaler une erreur] [Ajouter à ma feuille d'exos] [Copier le lien]
Enoncé
Pour $n\geq 1$, on pose $$S_n=\sum_{k=1}^n \frac 1{k^3}.$$ On admet que $(S_n)$ converge vers un réel appelé constante d'Apéry qui vaut environ $1,\!20205690316$. Écrire un algorithme qui prouve que $(S_n)$ ne converge pas vers $$\beta=\frac{\pi^3}{\sqrt[6]{294542216}}\simeq 1,\!20205690198.$$
Indication
Corrigé
Exercice 3 - Maximum d'une suite [Signaler une erreur] [Ajouter à ma feuille d'exos] [Copier le lien]
Enoncé
On pose $p=0,9$, et on admet que la fonction $x\mapsto p^x-\frac{1}x$ est croissante sur $[1,a]$ et décroissante sur $[a,+\infty[$, où $a>1$. Écrire un algorithme permettant de déterminer pour quelle valeur de l'entier $r$ le nombre $p^r-\frac 1r$ est maximal.
Corrigé
Exercice 4 - Encadrement d'intégrale [Signaler une erreur] [Ajouter à ma feuille d'exos] [Copier le lien]
Enoncé
Soit $f:[0,1]\to\mathbb R$ une fonction croissante. Pour $n\geq 1$, on pose $$U_n=\frac 1n\sum_{k=0}^{n-1}f(k/n)\textrm{ et }V_n=\frac 1n\sum_{k=1}^{n}f(k/n).$$
  1. Démontrer que, pour tout $n\geq 1$, on a $U_n\leq \int_0^1 f(x)dx\leq V_n$.
  2. On admet que $(U_n)$ et $(V_n)$ convergent vers $\int_0^1 f(x)dx$. Écrire un algorithme donnant une valeur approchée de $\int_0^1 e^{x^2}dx$ à $10^{-3}$ près.
Indication
Corrigé
Exercice 5 - Des limites de l'informatique [Signaler une erreur] [Ajouter à ma feuille d'exos] [Copier le lien]
Enoncé
Pour $n\geq 0$, on considère la suite $(I_n)$ définie par $$I_n=\int_0^1 e^x (1-x)^n dx.$$
  1. Calculer $I_0$ puis démontrer que, pour tout $n\geq 0$, $I_{n+1}=(n+1)I_n-1$.
  2. Écrire sous Python une fonction permettant de calculer $I_n$ en utilisant la relation de récurrence obtenue précédemment. Exécuter cette fonction. Quelle conjecture peut-on formuler sur la nature de la suite $(I_n)$?
  3. Démontrer que $(I_n)$ est une suite décroissante, puis qu'elle est convergente. Quelle est sa limite? Comparer avec votre conjecture.
  4. Pour $a\in \mathbb R$, on définit une suite $(J_n)$ par $J_{n+1}=(n+1)J_n-1$ et $J_0=a$. Démontrer que, pour tout $n\in\mathbb N$, $J_{n+1}-I_{n+1}=(n+1)(J_n-I_n)$.
  5. En déduire, suivant la valeur de $a$, le comportement de la suite $(J_n)$.
  6. Expliquer le phénomène conduisant à la conjecture formulée à la question 2.
Indication
Corrigé
Exercice 6 - Algorithme de trichotomie [Signaler une erreur] [Ajouter à ma feuille d'exos] [Copier le lien]
Enoncé
Soit $f:[a,b]\to\mathbb R$ une fonction convexe. On pose $a_0=a$, $a_1=(2a+b)/3$, $a_2=(a+2b)/3$ et $a_3=b$. On pose également $$\mu=\frac{f(a_2)-f(a_1)}{a_2-a_1}.$$
  1. On suppose que $\mu\leq 0$. Justifier que $f$ atteint son minimum sur $[a,b]$ sur l'intervalle $[a_1,a_3]$.
  2. On suppose que $\mu>0$. Justifier que $f$ atteint son minimum sur $[a,b]$ sur l'intervalle $[a_0,a_2]$.
  3. Écrire une fonction sous Python permettant de donner un encadrement d'amplitude $\veps$ du minimum de la fonction convexe $x\mapsto e^x+x^2$, sachant que ce minimum se situe dans l'intervalle $[-1,0]$.
Indication
Corrigé
Algorithmes en arithmétique
Exercice 7 - Renversant! [Signaler une erreur] [Ajouter à ma feuille d'exos] [Copier le lien]
Enoncé
Écrire une fonction qui prend en entrée un entier naturel $a$ et retourne cet entier écrit à l'envers. Par exemple, si $a=1234$, la fonction devra retourner $a=4321$. On pourra utiliser les fonctions quotient(n,p) et reste(n,p) qui donnent le quotient et le reste de la division de n par p.
Corrigé
Exercice 8 - Algorithme pour compter le nombre de nombres premiers inférieurs à un entier $n$ [Signaler une erreur] [Ajouter à ma feuille d'exos] [Copier le lien]
Enoncé
  1. Écrire une fonction $\textrm{divise}(p,q)$ d'argument deux entiers naturels non nuls $p$ et $q$ et renvoyant True si $p$ divise $q$, et False sinon.
  2. Écrire une fonction $\textrm{estpremier}(p)$ d'argument un entier naturel $p$, renvoyant $1$ si $p$ est premier, et renvoyant $0$ sinon.
  3. Écrire une fonction $\phi(n)$ d'argument un entier naturel $n$ et renvoyant le nombre de nombres premiers inférieurs ou égaux à $n$.
Corrigé
Exercice 9 - Équation de Pell-Fermat [Signaler une erreur] [Ajouter à ma feuille d'exos] [Copier le lien]
Enoncé
On considère l'équation $x^2-2y^2=1$ d'inconnues $x,y\in\mathbb N^*$. Écrire un algorithme permettant de déterminer toutes les solutions de cette équation pour lesquelles $y\leq 100$.
Corrigé
Exercice 10 - En base 2 [Signaler une erreur] [Ajouter à ma feuille d'exos] [Copier le lien]
Enoncé
  1. Écrire 21 en base 2.
  2. Proposer un algorithme qui prend en entrée un entier $n$ et retourne son écriture en base 2.
Indication
Corrigé
Exercice 11 - Algorithme de décomposition en produit de facteurs premiers [Signaler une erreur] [Ajouter à ma feuille d'exos] [Copier le lien]
Enoncé
Le but de l'exercice est d'écrire un algorithme pour décomposer un entier en produit de nombres premiers. Si $n$ est un entier naturel non nul et $p$ est un nombre premier, on note $v_p(n)$ le plus grand entier $k$ tel que $p^k$ divise $n$. Si $p$ ne divise pas $n$, on pose $v_p(n)=0$. L'entier $v_p(n)$ s'appelle la valuation $p$-adique de $n$.
  1. Écrire une fonction booléenne $\textrm{estPremier}(n)$ qui prend en argument un entier naturel non nul $n$ et qui renvoie le booléen $\textrm{True}$ si $n$ est premier et la booléen $\textrm{False}$ sinon. On pourra utiliser le critère suivant : un entier $n\geq 2$ qui n'est divisible par aucun entier $d\geq 2$ tel que $d^2\leq n$ n'est pas premier.
  2. En déduire une fonction $\textrm{liste_premiers}(n)$ qui prend en argument un entier naturel non nul $n$ et renvoie la liste des nombres premiers inférieurs ou égaux à $n$.
  3. Pour calculer la valuation 2-adique de 40, on peut utiliser la méthode suivante:
    • 40 est divisible par 2 et le quotient vaut 20
    • 20 est divisible par 2 et le quotient vaut 10
    • 10 est divisible par 2 et le quotient vaut 5
    • 5 n'est pas divisible par 2.
    La valuation 2-adique de 40 vaut donc 3.
    Écrire une fonction $\textrm{valuation_p_adique(n, p)}$ non récursive qui implémente cet algorithme. Elle prend en arguments un entier naturel $n$ non nul et un nombre premier $p$ et renvoie la valuation $p$-adique de $n$. Par exemple, puisque $40=2^3\times 5$, $\textrm{valuation_p_adique(40, 2)}$ renvoie 3, $\textrm{valuation_p_adique(40, 5)}$ renvoie 1 et $\textrm{valuation_p_adique(40, 7)}$ renvoie 0.
  4. Écrire une deuxième fonction cette fois-ci récursive, $\textrm{val}(n, p)$ qui renvoie la valuation $p$-adique de $n$.
  5. En déduire une fonction $\textrm{decomposition_facteurs_premiers(n)}$ qui calcule la décomposition en facteurs premiers d'un entier $n\geq 2$. Cette fonction doit renvoyer la liste des couples $(p,v_p(n))$ pour tous les nombres premiers $p$ qui divisent $n$. Par exemple, $\textrm{decomposition_facteurs_premiers}(40)$ renvoie la liste $[[2,3],[5, 1]]$.
Corrigé
Simulations
Exercice 12 - Simulation d'une rangée de spots [Signaler une erreur] [Ajouter à ma feuille d'exos] [Copier le lien]
Enoncé
Une rampe verticale de spots nommés de bas en haut $S_1,\ S_2,\ S_3,\ S_4$ change d'état de la manière suivante :
  • à l'instant $t=0$, le spot $S_1$ est allumé.
  • si, à l'instant $t=n,\ n\geq 0$, le spot $S_1$ est allumé, alors un (et un seul) des spots $S_1,\ S_2,\ S_3,\ S_4$ s'allume à l'instant $t=n+1$, et ceci de manière équiprobable.
  • si, à l'instant $t=n,\ n\geq 0$, le spot $S_k$ ($2\leq k\leq 4$) est allumé, le spot $S_{k-1}$ s'allume à l'instant $t=n+1$.
On pourra remarquer qu'à chaque instant, un et un seul spot est allumé. On note $X$ la variable aléatoire représentant le premier instant (s'il existe) où le spot $S_2$ s'allume. Écrire une fonction sous Python simulant le fonctionnement de la variable aléatoire $X$. On rappelle que la fonction $\verb+randint(a,b)+$ du module random renvoie un nombre entier aléatoire compris entre $a$ et $b$ (avec $a$ et $b$ inclus).
Indication
Corrigé
Exercice 13 - Crèmes brûlées [Signaler une erreur] [Ajouter à ma feuille d'exos] [Copier le lien]
Enoncé
Un restaurateur accueille 70 clients chaque soir. Il sait qu'en moyenne, 2 clients sur 5 prennent une crème brûlée. Il pense que, s'il prépare 30 crèmes brûlées, dans plus de 70\% des cas, la demande en crèmes brûlées sera satisfaite. Ecrire un algorithme permettant de conjecturer s'il a raison.
Corrigé
Polynômes
Exercice 14 - Schéma de Horner [Signaler une erreur] [Ajouter à ma feuille d'exos] [Copier le lien]
Enoncé
Soit $P(x)=a_n x^n+a_{n-1}x^{n-1}+\dots+a_0$. Pour évaluer $P(x)$, le mathématicien anglais Horner a proposé la méthode suivante : $$P(x)= (\cdots(((a_n x+a_{n-1})x+a_{n-2})x+a_{n-3})\cdots)x+a_0.$$ Écrire une fonction sous Python qui prend en entrée la liste des coefficients d'un polynôme $P$ et un nombre réel $x$ et qui retourne $P(x)$ suivant la méthode de Horner.
Corrigé
Exercice 15 - Polynôme interpolateur de Lagrange [Signaler une erreur] [Ajouter à ma feuille d'exos] [Copier le lien]
Enoncé
Soit $n\geq 1$ un entier. On se donne $(n+1)$ réels $x_0,\dots,x_n$ deux à deux distincts, et $y_0,\dots,y_{n}$ une autre liste de $(n+1)$ réels (non nécessairement deux à deux distincts). Pour tout entier $i=0,\dots,n$, on définit le polynôme $L_i$ de $\mathbb R_n[X]$ par $$L_i(x)=\prod_{k=0, k\neq i}^n \frac{X-x_k}{x_i-x_k}$$ puis le polynôme $$P(X)=\sum_{i=0}^n y_i L_i(X).$$
  1. Vérifier que $P(x_i)=y_i$ pour tout $i=0,\dots,n$.
  2. Écrire une fonction lagrange qui prend en arguments une liste $x$ de points d'interpolation $x_i$, une liste $y$ de valeurs $y_i$, de même longueur que $x$, $a$ un réel, et qui renvoie la valeur de $P(a)$, où $P$ est le polynôme interpolateur défini précédemment.
Indication
Corrigé
Algèbre
Exercice 16 - Groupe des permutations [Signaler une erreur] [Ajouter à ma feuille d'exos] [Copier le lien]
Enoncé
Pour $n\in\mathbb N^*,$ on note $S_n$ le groupe des permutations de l’ensemble $\{0,\dots,n-1\}$. Une élément de $S_n$ sera représenté en Python par une liste, dont l’élément d’indice $i$ est l’image de $i$ par cette permutation. Par exemple, la liste $[3,1,0,2]$ représente la permutation $\sigma\in S_4$ définie par $\sigma(0)=3,$ $\sigma(1)=1,$ $\sigma(2)=0$ et $\sigma(3)=2.$
  1. Quelle liste Python représente la transposition $(2\quad 3)\in S_4$ ?
  2. Écrire une fonction Python $\verb+comp(s1, s2)+$ prenant en entrée deux listes représentant des permutations $\sigma_1$ et $\sigma_2$ du même groupe de permutations et renvoyant la liste représentant la permutation $\sigma_1\circ\sigma_2.$
  3. Écrire une fonction Python $\verb+inv(s)+$ prenant en entrée une liste représentant une permutation $\sigma$ et renvoyant la liste représentant $\sigma^{-1}$.
  4. On souhaite tester si un sous-ensemble $G$ de $S_n$ est ou non un sous-groupe de $S_n.$ Écrire une fonction Python $\verb+groupe(G)+$ prenant en entrée une liste de listes, où chaque sous-liste représente une permutation de $S_n$ et renvoyant $\verb+True+$ s’il s’agit bien d’un sous-groupe de $S_n$ et $\verb+False+$ sinon.
  5. Écrire une fonction Python $\verb+cyclique(s)+$ prenant en entrée une liste $s$ représentant une permutation $\sigma$ $S_n$ et renvoyant le sous-groupe de $S_n$ engendré par $\sigma$ sous la forme d’une liste de listes.
Corrigé
Dénombrement
Exercice 17 - Partitions d'un entier [Signaler une erreur] [Ajouter à ma feuille d'exos] [Copier le lien]
Enoncé
On appelle partition d'un entier naturel $n$ toute suite finie $(\alpha_1,\dots,\alpha_k)\in (\mathbb N^*)^k$ telle que $\alpha_1\geq \cdots\geq\alpha_k$ et $\alpha_1+\cdots+\alpha_k=n$. On note $\Gamma_n$ l'ensemble des partitions de l'entier $n$.
  1. Déterminer $\Gamma_1,\Gamma_2,\Gamma_3,\Gamma_4$.
  2. Pour $j,n\in\mathbb N$, on note $Y_{n,j}$ l'ensemble des partitions de $n$ dont le premier terme est inférieur ou égal à $j$, et on note $y_{n,j}$ le cardinal de $Y_{n,j}$. On convient que $y_{0,0}=1$.
    1. Calculer $y_{n,1}$.
    2. On se propose de démontrer que, si $2\leq j\leq n$, alors $y_{n,j}=y_{n,j-1}+y_{n-j,\min(j,n-j)}$. Démontrer cette relation pour $j=n$.
    3. Pour $2\leq j<n$, vérifier que $y_{n,j}=y_{n,j-1}+y_{n-j,j}$ puis conclure.
  3. Écrire une fonction Python qui prend en argument un entier $n\geq 1$ et qui renvoie le cardinal de $\Gamma_n$.
Indication
Corrigé
Récursivité
Exercice 18 - Factorielle [Signaler une erreur] [Ajouter à ma feuille d'exos] [Copier le lien]
Enoncé
Écrire une fonction récursive factorielle qui prend en argument un entier naturel $n$ et renvoie l'entier $n!$.
Indication
Corrigé
Exercice 19 - Coefficients binomiaux [Signaler une erreur] [Ajouter à ma feuille d'exos] [Copier le lien]
Enoncé
On rappelle que si $n$, $k$ sont deux entiers naturels, le coefficient binomial $\binom nk$ vérifie
  • $\binom nk=0$ si $k>n$.
  • $\binom n0=\binom nn=1$.
  • $\binom nk=\binom {n-1}{k-1}+\binom {n-1}k$ si $1\leq k\leq n-1$.
Écrire une fonction récursive permettant de calculer $\binom nk$ à partir des formules précédentes.
Corrigé
Exercice 20 - Une suite récurrente [Signaler une erreur] [Ajouter à ma feuille d'exos] [Copier le lien]
Enoncé
On considère une suite récurrente $(u_n)$ donnée par $u_1=1$, $u_2=3$, et les formules de récurrence : $$\left\{ \begin{array}{rcl} u_{2n}&=&u_n^2+5\\ u_{2n+1}&=&u_n u_{n+1}+7. \end{array}\right. $$
  1. Recopier et compléter la fonction récursive suivante, de sorte que suite(n) renvoie le couple $(u_n,u_{n+1})$.
    def suite(n):
        if n==1:
            return(1,3)
        k=n//2
        a,b=suite(....)
        if n%2==0:
            return (...,...)
        else:
            return (...,...)
    
  2. Pour tout entier $n\geq 2$, exprimer en fonction de $n$ le nombre d'appels récursifs que réalise suite(n).
Indication
Corrigé
Exercice 21 - Complexité de l'algorithme d'exponentiation rapide [Signaler une erreur] [Ajouter à ma feuille d'exos] [Copier le lien]
Enoncé
L'algorithme d'exponentiation rapide est basé sur la remarque suivante : on a $a^{2p}=a^p\cdot a^p$ et $a^{2p+1}=a^p\cdot a^p\cdot a$. Ainsi, pour calculer $a^{2p}$, il suffit de savoir calculer $a^p$ et de faire une multiplication, et pour calculer $a^{2p+1}$, il suffit de savoir calculer $a^p$ et de faire deux multiplications. L'algorithme suivant implémente récursivement l'algorithme d'exponentiation rapide sous Python :
def exporapide(a,n):
    if n==0:
        return 1
    b=exporapide(a,n//2)
    if (n%2)==1:
        return b*b*a
    else:
        return b*b
Démontrer que, pour tout $n\geq 1$, le nombre total de multiplications effectuées par un appel à exporapide(a,n) est inférieur ou égal à $2+2\lfloor \log_2 n\rfloor$.
Indication
Corrigé
Analyser des algorithmes
Exercice 22 - pgcd [Signaler une erreur] [Ajouter à ma feuille d'exos] [Copier le lien]
Enoncé
L'algorithme suivant propose de calculer le pgcd de deux entiers $a$ et $b$, avec $a>b$. Fonctionne-t-il? Sinon, corriger cet algorithme.
Lire a
Lire b
Tant que (b non nul) Faire
  a=b
  b=reste de a par b
Fin Tant que.
Afficher a.
Corrigé
Exercice 23 - Marche aléatoire [Signaler une erreur] [Ajouter à ma feuille d'exos] [Copier le lien]
Enoncé
Une puce se déplace sur un axe gradué. Au temps $t=0$, la puce est en 0. Si la puce est en $x$, à l'instant $n+1$, elle est en $x+1$ avec probabilité $1/3$, en $x+2$ avec probabilité $1/3$, en $x-3$ avec probabilité $1/3$. On souhaite programmer un algorithme simulant la position de la puce après 50 itérations. On propose l'algorithme suivant :
x=0
Pour t allant de 1 à 50 Faire
  Si (random()<1/3) alors x=x+1
  Si (random()>=1/3) et (random()<2/3) alors x=x+2
  Si (random()>=2/3) alors x=x-3
Fin Pour.
Afficher x.
Cet algorithme fonctionne-t-il? Sinon, le corriger (la fonction random() retourne un nombre (pseudo)-aléatoire entre 0 et 1).
Corrigé
Exercice 24 - Triplets pythagoriciens [Signaler une erreur] [Ajouter à ma feuille d'exos] [Copier le lien]
Enoncé
Voici l'énoncé posé à des étudiants : ``On rappelle qu'un triplet d'entiers naturels $(a,b,c)$ est un triplet pythagoricien si $a^2+b^2=c^2$. Écrire un algorithme donnant tous les triplets pythagoriciens de sorte que $a+b+c\leq 10000$.''
Voici les réponses de quelques étudiants. Déterminer les algorithmes qui donnent le bon résultat. Expliquer.
Étudiant 1 :
Pour k1 allant de 0 à 10000 faire
  Pour k2 allant de 0 à 10000 faire
     Pour k3 allant de 0 à 10000 faire
         Si $k1^2+k2^2=k3^2$ et k1+k2+k3<=10000 alors afficher (k1,k2,k3) 
         Fin Si
     Fin pour
  Fin pour
Fin pour.
Étudiant 2 :
a=0, b=0,c=0
Pour b allant de 0 à 10000
  $a^2+b^2\to c$.
  Si a+b+sqrt(c)<10000 et sqrt(c) entier alors afficher (a,b,sqrt(c))
  c=0;
  a=a+1;
Fin Pour.
Étudiant 3 :
a=0, b=0, c=0
Tant que a+b+c<=10000 faire
  Tant que a+b+c<=10000 faire
      afficher(a,b,c)
      b=b+1
      c=sqrt(a*a+b*b)
  Fin tant que
  a=a+1
  b=0
Fin tant que.
Étudiant 4 :
Pour a allant de 0 à 10000 faire
  Pour b allant de 0 à 10000-a faire
     Pour c allant de 0 à 10000-a-b faire
         Si a*a+b*b=c*c afficher (a,b,c) Fin si
     Fin pour
   Fin pour.
Fin pour.
Étudiant 5 :
a=0, b=0
Tant que a+b+sqrt(a*a+b*b)<=10000 faire
  b=0
  Tant que a+b+sqrt(a*a+b*b)<=10000 faire
      Si Ent(sqrt(a*a+b*b))=sqrt(a*a+b*b) alors afficher (a,b,sqrt(a*a+b*b)) 
      Fin si
      b=b+1
  Fin tant que
  a=a+1
Fin tant que.
Étudiant 6 :
Pour a allant de 0 à 10000 faire
   Pour b allant de 0 à 10000 faire
      c=0
      Tant que a+b+c<=10000 faire
         si a*a+b*b=c*c alors afficher (a,b,c)
         sinon c=c+1
      Fin tant que
   Fin pour.
Fin pour.
Corrigé
Exercice 25 - Somme [Signaler une erreur] [Ajouter à ma feuille d'exos] [Copier le lien]
Enoncé
Dans l'exercice donné aux étudiants, on considère la suite $(S_n)$ définie par $$S_n=\sum_{k=0}^n \frac{(-1)^k}{k+1}.$$ On a prouvé que $(S_n)$ converge vers une limite $\ell$, et que, si on pose $u_n=S_{2n}$ et $v_n=S_{2n+1}$, alors pour tout entier $n$, on a $v_n\leq \ell\leq u_n$. Il est demandé aux étudiants d'écrire un algorithme donnant un encadrement de $\ell$ d'amplitude inférieur ou égal à $0.001$. Voici leurs réponses. Analysez-les.
Étudiant 1 :
n:=2 
u:=5/6 
v:=7/12 
Tant que u-v>0.001 faire
  u=u-1/(2n)+1/(2n+1)
  v=u-1/(2n+2)
Fin Tant que
Retourner u et v. 
Étudiant 2 :
a=1
c=1/2 
n=0 
b=a 
d=c 
tant que (a-c>0.001) faire 
  n=n+1 
  b=a
  a=b+(-1)/(2n+1)+1/(2n+2)
  d=c 
  c=d+1/(2n+2)-1/(2n+3) 
Afficher a et b
Étudiant 3 :
Entrées :  
u=1 
v=1/2 
n=0 
Traitement : 
Tant que (v-u>0.001)  
  n=n+1 
  u=u+somme{k=0 à 2n}(-1)^k/(k+1)
  v=v+somme{k=0 à 2n+1}(-1)^k/(k+1) 
Sortie : u,v 
Étudiant 4 :
Variables : u,v,n,k 
Initialisation : 
u=1 
v=1/2
k=0 
n=0 
Traitement :
Tant que (u-v>0.001) faire 
  Pour k allant de 1 à 2n faire 
     u=u+(-1)^k/k+1 
  Pour k allant de 1 à 2n+1 faire 
     v=v+(-1)^k/(k+1)
  n=n+1
Sortie : Afficher u,v 
Étudiant 5 :
Variables : a,b,n,u,v 
Initialisation : 
u=1 
v=1/2
a=1/2 
b=1 
Traitement 
Tant que (a>0.001)  
  n=n+1 
  a=1/(2n+2) 
  b=1/(2n+1) 
  u=v+b 
  v=u-a 
Sortie : u,v 
Étudiant 6 :
s=0 
t=0 
Pour k=0 à 1000 faire 
  s=s+(-1)^k/(k+1) 
Fin Pour.
t=s+(-1)^(1001)/1002 
Afficher s,t 
Corrigé