Python en Mathématiques - Niveau 2

Boucle while : encore des exercices

Plus tard ! Les exercices de cette page peuvent être travaillés en seconde lecture.

Seuil pour une somme

Sortez une feuille.

  • Information supplémentaire

En fait, vous aviez déjà sorti une feuille, n'est-ce pas ?
Une activité de programmation est normalement précédée d'une activité d'algorithmique et nécessite papier et crayon.

  1. Recopiez puis complétez l'algorithme ci-dessous pour qu'il renvoie le plus petit entier n tel que la somme des entiers de 1 à n soit supérieure ou égale à un entier k (strictement positif) donné en paramètre :
    
    n ← 1
    
    Tant que ...
    						
  2. Voici une traduction de cet algorithme en Python. Le programme contient des erreurs de logique (mais aucune erreur de syntaxe).
    Corrigez ce programme puis déterminer le plus petit entier $n$ tel que $$\sum_{i=1}^n i \geqslant 10000$$
    
    							
    							
  • Question 1°/
  • Question 2°/

L'algorithme ci-dessous calcule la valeur de l'entier n recherché. k est un entier (strictement positif) donné en paramètre.


n ← 1
S ← n
Tant que S < k:
	n ← n+1
	S ← S+n
							

Notez que la valeur renvoyée par l'algorithme est donnée par le « cahier des charges » de la question.

Voici une proposition de programme. L'interaction avec l'utilisateur permet de visualiser le plus petit entier $n$ tel que $$\sum_{i=1}^n i \geqslant 10000$$


								
								

Boucler un certain nombre de fois

Autant la syntaxe d'utilisation de la boucle while en Python est proche de la rédaction algorithmique de « Tant que », autant la syntaxe (et la philosophie) de la boucle for a quelques différences avec la rédaction de « Pour ».

  1. Recopiez puis complétez l'algorithme ci-dessous pour qu'il renvoie la somme des entiers de 1 à nn est un entier strictement positif donné en paramètre :
    
    S ← 0
    
    Pour ...
    						
  2. Voici une traduction de cet algorithme sous la forme d'une fonction en Python. Compléter ce programme pour déterminer si un entier k strictement positif saisi en paramètre peut être la somme d'entiers consécutifs à partir de 1.
    
    							
    							
  • Question 1°/
  • Question 2°/

L'algorithme ci-dessous calcule la valeur de l'entier S, somme des entiers de 1 à nn est un entier strictement positif donné en paramètre.


S ← 0
Pour i allant de 1 à n:
	S ← S+i
							

A nouveau, la valeur renvoyée par l'algorithme est donnée par le « cahier des charges » de la question.

Voici une proposition de programme. On définit et utilise une nouvelle fonction afin de déterminer si un entier k strictement positif saisi en paramètre peut être la somme d'entiers consécutifs à partir de 1. Cette nouvelle fonction renvoie un booléen, résultat d'un test d'égalité entre deux valeurs.


								
								

Fonction constante par morceaux

On définit une fonction \(f\) sur \( \left[ 0 ; +\infty\right[ \) par :

  1. \( f(x) = 0 \) pour \( x \in [0;1[ \) (constante sur un intervalle de longueur 1)
  2. \( f(x) = 1 \) pour \( x \in [1;3[ \) (constante sur un intervalle de longueur 2)
  3. \( f(x) = 2 \) pour \( x \in [3;6[ \) (constante sur un intervalle de longueur 3)
  4. \( f(x) = 3 \) pour \( x \in [6;10[ \) (constante sur un intervalle de longueur 4)
  5. \( f(x) = 4 \) pour \( x \in [10;15[ \) (constante sur un intervalle de longueur 5)
  6. ...

Écrire une fonction en Python qui respecte les spécifications suivantes :

Paramètres un nombre x (de type float)
Valeur renvoyée l'image de x par la fonction \(f\)

Tester ensuite cette fonction sur plusieurs exemples.

  • Principe
  • Un code possible
  • Représentation graphique

Notons \( T(n) = \sum_{j=0}^{n} j \).

Pour tout réel \(x\), il existe un entier (unique) \(n\) tel que \( T(n) \leqslant x < T(n+1) \). Dès lors, \( f(x) = n \).


	
def floorTriangulaire(x):
    n = 0
    t = 0
    while t <= x :
        n += 1
        t += n
    return n-1


X = [0, 0.5, 1, 2, 3, 5, 6, 9.8, 10, 12.3, 15, 15.2]
for x in X :
    print( "f({}) = {}.".format(x,floorTriangulaire(x)) )

 

La bibliothèque matplotlib contient des fonctions qui permettent de tracer des représentations graphiques. Par contre, matplotlib n'est pas une bibliothèque incluse dans la distribution usuelle de Python. Un « tutoriel » pour installer des modules supplémentaires est disponible à la page [Sources] → [Modules complémentaires]).

Représentation graphique de f

Voici les éléments de code permettant d'obtenir la représentation graphique ci-dessus :


from pylab import plot, show, axis, grid 
from numpy import arange


def floorTriangulaire(x):
    n = 0
    t = 0
    while t <= x :
        n += 1
        t += n
    return n-1

 

X = arange(0, 23, 0.1) # liste [0, 0+0.1, 0+2*0.1, 0+3*0.1, ..., 22.9]
Y = [ floorTriangulaire(x)  for x  in X] # liste des images 

# construction du graphique :
plot(X, Y,'.')
# tracé d'une grille en fond :
grid()
# pour voir le résultat :
show()