Les exercices de cette page peuvent être travaillés en seconde lecture.
Boucle while
: encore des exercices
Les exercices de cette page peuvent être travaillés en seconde lecture.
Sortez une feuille.
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.
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 ...
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$$
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
à n
où n
est un entier strictement positif donné en paramètre :
S ← 0
Pour ...
k
strictement positif saisi en
paramètre peut être la somme d'entiers consécutifs à partir de 1
.
L'algorithme ci-dessous calcule la valeur de l'entier S
,
somme des entiers de 1
à n
où n
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.
On définit une fonction \(f\) sur \( \left[ 0 ; +\infty\right[ \) par :
É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.
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]).
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()