Chapitres de Maths complémentaires

Algorithmique et programmation

  1. 1

    Exercice 1

    Facile

    On considère la suite (un)(u_n) définie par u0=5u_0 = 5 et, pour tout entier naturel nn,

    un+1=0,8un.u_{n+1} = 0{,}8\, u_n.

    On souhaite déterminer le plus petit entier nn tel que un<0,01u_n < 0{,}01. Voici une fonction Python incomplète censée renvoyer cet entier. Recopier et compléter les trois zones marquées ..... .

    def seuil():
        u = 5
        n = 0
        while u ..... 0.01:        # (1) condition d'arret
            u = ..... * u          # (2) mise a jour du terme
            n = ..... + 1          # (3) mise a jour du compteur
        return n
    
    Voir un indice

    La boucle doit continuer tant que le terme n'est pas encore passé sous le seuil 0,010{,}01. À chaque tour, on calcule le terme suivant et on augmente le compteur de 11.

    Voir la correction

    La suite est décroissante et tend vers 00 : il existe donc bien un rang à partir duquel un<0,01u_n < 0{,}01. On arrête la boucle dès que la condition u0,01u \geq 0{,}01 devient fausse, donc la condition de continuation est u >= 0.01. La complétion est :

    def seuil():
        u = 5
        n = 0
        while u >= 0.01:
            u = 0.8 * u
            n = n + 1
        return n
    

    Comme un=5×0,8nu_n = 5 \times 0{,}8^{\,n}, résoudre 5×0,8n<0,015 \times 0{,}8^{\,n} < 0{,}01 revient à 0,8n<0,0020{,}8^{\,n} < 0{,}002, soit

    n>ln(0,002)ln(0,8)27,85.n > \frac{\ln(0{,}002)}{\ln(0{,}8)} \approx 27{,}85.

    Le plus petit entier convenable est donc n=28n = 28. On vérifie : u270,01210,01u_{27} \approx 0{,}0121 \geq 0{,}01 et u280,0097<0,01u_{28} \approx 0{,}0097 < 0{,}01. La fonction renvoie bien 28.

  2. 2

    Exercice 2

    Facile

    On donne le script Python suivant.

    u = 0
    for n in range(4):
        u = 0.5 * u + 2
        print(u)
    
    1. Recopier et compléter le tableau ci-dessous en indiquant la valeur de u affichée à chaque passage dans la boucle.
    2. Quelle suite (un)(u_n) ce script calcule-t-il ? Préciser u0u_0 et la relation de récurrence.

    \medskip

    Tour de boucle1234
    Valeur affichée
    Voir un indice

    Suivre la boucle pas à pas : à chaque tour, on remplace u par 0.5 * u + 2 en utilisant la valeur précédente de u. La valeur initiale est 00.

    Voir la correction

    On part de u = 0 puis on applique la transformation à chaque tour.

    • Tour 1 : u=0,5×0+2=2u = 0{,}5 \times 0 + 2 = 2, on affiche 22.
    • Tour 2 : u=0,5×2+2=3u = 0{,}5 \times 2 + 2 = 3, on affiche 33.
    • Tour 3 : u=0,5×3+2=3,5u = 0{,}5 \times 3 + 2 = 3{,}5, on affiche 3,53{,}5.
    • Tour 4 : u=0,5×3,5+2=3,75u = 0{,}5 \times 3{,}5 + 2 = 3{,}75, on affiche 3,753{,}75.
    Tour de boucle1234
    Valeur affichée22333,53{,}53,753{,}75

    Le script calcule les termes u1,u2,u3,u4u_1, u_2, u_3, u_4 de la suite définie par

    u0=0etun+1=0,5un+2.u_0 = 0 \qquad \text{et} \qquad u_{n+1} = 0{,}5\, u_n + 2.

    (Cette suite converge vers le point fixe =4\ell = 4, ce que confirment les valeurs qui s'en rapprochent.)

  3. 3

    Exercice 3

    Facile

    On rappelle que le coefficient binomial (nk)\displaystyle \binom{n}{k} se calcule par

    (nk)=n!k!(nk)!.\binom{n}{k} = \frac{n!}{k!\,(n-k)!}.
    1. Écrire une fonction Python factorielle(n) qui, pour un entier n0n \geq 0, renvoie n!n! (on rappelle que 0!=10! = 1).
    2. En réutilisant cette fonction, écrire une fonction binomial(n, k) qui renvoie (nk)\binom{n}{k}.
    3. Que renvoie binomial(5, 2) ?
    Voir un indice

    Pour la factorielle, initialiser un produit à 11 puis le multiplier successivement par 1,2,,n1, 2, \dots, n. Pour le coefficient binomial, appeler trois fois la fonction précédente et utiliser la division entière // (le résultat est un entier).

    Voir la correction

    On adopte une démarche modulaire : la fonction binomial s'appuie sur factorielle.

    def factorielle(n):
        p = 1
        for k in range(1, n + 1):
            p = p * k
        return p
    
    def binomial(n, k):
        return factorielle(n) // (factorielle(k) * factorielle(n - k))
    

    Pour n=0n = 0, la boucle range(1, 1) est vide et factorielle(0) renvoie bien 11.

    Enfin :

    binomial(5,2)=(52)=5!2!3!=1202×6=10.`binomial(5, 2)` = \binom{5}{2} = \frac{5!}{2!\,3!} = \frac{120}{2 \times 6} = 10.

    La fonction renvoie 10.

  4. 4

    Exercice 4

    Facile

    On veut approcher l'aire sous la courbe de la fonction f:xx2f : x \mapsto x^2 sur l'intervalle [0;1][0\,;1] par la méthode des rectangles à gauche. On découpe [0;1][0\,;1] en nn intervalles de même largeur hh et on somme les aires des rectangles s'appuyant sur la valeur de ff au bord gauche de chaque sous-intervalle.

    1. Recopier et compléter la fonction ci-dessous (zones .....).
    def f(x):
        return x**2
    
    def rectangles(n):
        a = 0
        b = 1
        h = ..... / n              # (1) largeur d'un rectangle
        S = 0
        for k in range(n):
            x = a + k * h
            S = S + ..... * h      # (2) aire d'un rectangle
        return S
    
    1. Calculer « à la main » la valeur renvoyée par rectangles(4).
    Voir un indice

    La largeur commune vaut h=banh = \dfrac{b-a}{n}. L'aire d'un rectangle est (hauteur ×\times largeur) =f(x)×h= f(x) \times h. Pour n=4n=4, les bords gauches sont 0; 0,25; 0,5; 0,750\,;\ 0{,}25\,;\ 0{,}5\,;\ 0{,}75.

    Voir la correction

    La largeur d'un rectangle est h=ban=10nh = \dfrac{b-a}{n} = \dfrac{1-0}{n}, et chaque rectangle a pour aire f(x)×hf(x)\times h. D'où :

    def rectangles(n):
        a = 0
        b = 1
        h = (b - a) / n
        S = 0
        for k in range(n):
            x = a + k * h
            S = S + f(x) * h
        return S
    

    Pour n=4n = 4 : h=0,25h = 0{,}25 et les abscisses gauches sont 0; 0,25; 0,5; 0,750\,;\ 0{,}25\,;\ 0{,}5\,;\ 0{,}75.

    S=0,25×(f(0)+f(0,25)+f(0,5)+f(0,75))=0,25×(0+0,0625+0,25+0,5625).S = 0{,}25 \times \bigl(f(0) + f(0{,}25) + f(0{,}5) + f(0{,}75)\bigr) = 0{,}25 \times (0 + 0{,}0625 + 0{,}25 + 0{,}5625). S=0,25×0,875=0,21875.S = 0{,}25 \times 0{,}875 = 0{,}21875.

    rectangles(4) renvoie 0,218750{,}21875. La valeur exacte de l'intégrale étant 01x2dx=130,333\displaystyle\int_0^1 x^2\,\mathrm{d}x = \frac{1}{3} \approx 0{,}333, l'approximation par rectangles à gauche est ici sous-estimée (la fonction est croissante).

  5. 5

    Suite récurrente d'un capital épargne

    Moyen

    Le 1er janvier 2026, une personne ouvre un compte épargne avec 10001000 €. Chaque année, la banque augmente le capital de 3%3\,\% (intérêts), puis la personne verse 200200 € supplémentaires. On note CnC_n le capital, en euros, disponible au bout de nn années. Ainsi C0=1000C_0 = 1000 et, pour tout nn,

    Cn+1=1,03Cn+200.C_{n+1} = 1{,}03\, C_n + 200.
    1. Écrire une fonction Python duree() qui renvoie le nombre d'années nécessaires pour que le capital atteigne (au moins) 50005000 €.
    2. Déterminer, en justifiant, la valeur renvoyée par cette fonction.
    Voir un indice

    On simule les termes de la suite un par un dans une boucle while qui tourne tant que le capital est strictement inférieur à 50005000, en comptant les années écoulées.

    Voir la correction

    Ce contenu est réservé : laisse tes coordonnées pour débloquer toutes les indications et corrections du site, gratuitement.

    Tes coordonnées servent uniquement à t'informer de nos ressources et stages — jamais de spam. Politique de confidentialité

  6. 6

    Méthode de dichotomie en Python

    Moyen

    On considère la fonction ff définie sur R\mathbb{R} par f(x)=x3+x1f(x) = x^3 + x - 1. On admet que l'équation f(x)=0f(x) = 0 possède une unique solution α\alpha, et que α[0;1]\alpha \in [0\,;1] car f(0)=1<0f(0) = -1 < 0 et f(1)=1>0f(1) = 1 > 0.

    1. Effectuer « à la main » les trois premières étapes de la méthode de dichotomie sur [0;1][0\,;1] : préciser à chaque fois le milieu, le signe de ff en ce milieu, et le nouvel intervalle retenu.
    2. Recopier et compléter la fonction Python ci-dessous, qui renvoie une valeur approchée de α\alpha à la précision e près.
    def f(x):
        return x**3 + x - 1
    
    def dichotomie(a, b, e):
        while b - a > e:
            m = (a + b) / 2
            if f(a) * f(m) <= 0:
                b = .....          # la racine est dans [a, m]
            else:
                a = .....          # la racine est dans [m, b]
        return (a + b) / 2
    
    Voir un indice

    À chaque étape, on coupe l'intervalle en deux et on garde la moitié aux bornes de laquelle ff change de signe. Si f(a)f(a) et f(m)f(m) sont de signes contraires (produit 0\leq 0), la racine est dans [a;m][a\,;m], donc on remplace bb par mm.

    Voir la correction

    Ce contenu est réservé : laisse tes coordonnées pour débloquer toutes les indications et corrections du site, gratuitement.

    Tes coordonnées servent uniquement à t'informer de nos ressources et stages — jamais de spam. Politique de confidentialité

  7. 7

    Méthode d'Euler pour une équation différentielle

    Moyen

    On cherche à approcher la fonction yy solution de l'équation différentielle

    y=y,y(0)=1y' = y, \qquad y(0) = 1

    sur l'intervalle [0;1][0\,;1] (dont la solution exacte est y(x)=exy(x) = \mathrm{e}^x). On utilise la méthode d'Euler avec nn pas de même longueur h=1nh = \dfrac{1}{n} : à partir de y0=1y_0 = 1, on calcule

    yk+1=yk+h×y(xk)=yk+hyk.y_{k+1} = y_k + h\,\times\, y'(x_k) = y_k + h\, y_k.
    1. Écrire une fonction Python euler(n) qui renvoie l'approximation de y(1)y(1) obtenue avec nn pas.
    2. Calculer « à la main » la valeur renvoyée par euler(4) et la comparer à e2,718\mathrm{e} \approx 2{,}718.
    Voir un indice

    Ici y=yy' = y, donc la mise à jour est yy+hyy \leftarrow y + h\,y. On répète cette opération nn fois en partant de y0=1y_0 = 1. Pour n=4n = 4, h=0,25h = 0{,}25 et y1,25yy \leftarrow 1{,}25\, y à chaque pas.

    Voir la correction

    Ce contenu est réservé : laisse tes coordonnées pour débloquer toutes les indications et corrections du site, gratuitement.

    Tes coordonnées servent uniquement à t'informer de nos ressources et stages — jamais de spam. Politique de confidentialité

  8. 8

    Exercice 8

    Difficile

    On veut comparer deux méthodes d'approximation de I=01x2dx=13\displaystyle I = \int_0^1 x^2\,\mathrm{d}x = \frac{1}{3} : la méthode des rectangles à gauche et la méthode des trapèzes. Pour la méthode des trapèzes avec nn sous-intervalles de largeur h=banh = \dfrac{b-a}{n}, on utilise la formule

    Tn=h(f(a)+f(b)2+k=1n1f(a+kh)).T_n = h\left(\frac{f(a) + f(b)}{2} + \sum_{k=1}^{n-1} f(a + k h)\right).
    1. Écrire une fonction Python trapezes(f, a, b, n) qui renvoie TnT_n.
    2. Pour f:xx2f : x \mapsto x^2, calculer T4T_4 sur [0;1][0\,;1] et comparer l'erreur commise à celle de la méthode des rectangles à gauche (qui donne 0,218750{,}21875 pour n=4n=4).
    3. Expliquer géométriquement pourquoi la méthode des trapèzes est plus précise.
    Voir un indice

    Ce contenu est réservé : laisse tes coordonnées pour débloquer toutes les indications et corrections du site, gratuitement.

    Tes coordonnées servent uniquement à t'informer de nos ressources et stages — jamais de spam. Politique de confidentialité

    Voir la correction

    Ce contenu est réservé : laisse tes coordonnées pour débloquer toutes les indications et corrections du site, gratuitement.

    Tes coordonnées servent uniquement à t'informer de nos ressources et stages — jamais de spam. Politique de confidentialité

  9. 9

    Exercice 9

    Difficile

    On estime le nombre π\pi par une méthode de Monte-Carlo. On tire au hasard un point (x;y)(x\,;y) dans le carré [0;1]×[0;1][0\,;1] \times [0\,;1]. La probabilité qu'il tombe dans le quart de disque de centre OO et de rayon 11 (c'est-à-dire que x2+y21x^2 + y^2 \leq 1) est égale à l'aire de ce quart de disque, soit π4\dfrac{\pi}{4}.

    1. En notant pp la proportion de points tombés dans le quart de disque sur NN tirages, expliquer pourquoi 4p4p est une estimation de π\pi.
    2. Écrire une fonction Python monte_carlo(N) qui renvoie cette estimation. On utilisera random() du module random, qui renvoie un flottant aléatoire dans [0;1[[0\,;1[.
    3. Selon la loi des grands nombres, que se passe-t-il quand NN devient très grand ? Pourquoi faut-il multiplier NN par 100100 pour gagner environ un chiffre significatif ?
    Voir un indice

    Ce contenu est réservé : laisse tes coordonnées pour débloquer toutes les indications et corrections du site, gratuitement.

    Tes coordonnées servent uniquement à t'informer de nos ressources et stages — jamais de spam. Politique de confidentialité

    Voir la correction

    Ce contenu est réservé : laisse tes coordonnées pour débloquer toutes les indications et corrections du site, gratuitement.

    Tes coordonnées servent uniquement à t'informer de nos ressources et stages — jamais de spam. Politique de confidentialité