Exercice 1 : Tableau de valeurs d'une fonction
On considère la fonction définie sur par , et le programme suivant.
for x in range(-1, 6):
print(x, x*x - 4*x + 1)- a) Dressez le tableau des valeurs affichées par ce programme.
- b) Quelle valeur de donne le plus petit résultat ? Retrouvez-la par le calcul.
- c) On veut maintenant un tableau de valeurs allant de à avec un pas de . Écrivez le programme correspondant.
- d) Un élève écrit `for x in range(-1, 5)`. Que manque-t-il dans son tableau ?
Voir la correction
Réponses
- a) ; ; ; ; ; ;
- b) ;
- c) `for k in range(-2, 11):` puis `x = k/2` : lignes
- d) Il manque
a) La boucle `range(-1, 6)` parcourt les entiers de à , la borne de droite étant EXCLUE. On calcule pour chacun : , , , , , , . Le tableau affiché est donc .
b) Le plus petit résultat, , est obtenu pour . Le calcul le confirme et va plus loin que la machine : la forme canonique s'écrit , car et il faut retirer pour retrouver le . Comme un carré est toujours positif ou nul, pour tout , avec égalité uniquement en . Le programme SUGGÈRE le minimum sur sept valeurs, le calcul le DÉMONTRE sur tous les réels : la différence est exactement celle entre une observation et une preuve.
c) `range` ne fabrique que des entiers, donc on ne peut pas lui demander un pas de . On boucle sur des entiers et on divise : `for k in range(-2, 11):` puis `x = k/2` puis `print(x, x*x - 4*x + 1)`. Le compteur va de à , ce qui donne bien de à par pas de , soit treize lignes.
d) Il manque la dernière ligne, celle de : `range(-1, 5)` s'arrête à inclus, alors que la version de l'énoncé allait jusqu'à . C'est l'erreur la plus fréquente du chapitre. La règle à retenir dans les deux sens : `range(a, b)` contient , ne contient pas , et compte valeurs. Ici valeurs au lieu de sept.
Le fil de tout l'exercice : le programme ne fait rien d'autre que remplacer par des valeurs successives dans une expression que l'on a écrite soi-même. S'il affiche des résultats faux, ce n'est presque jamais la machine, c'est la formule ou les bornes de la boucle.
for k in range(-2, 11):
x = k/2
print(x, x*x - 4*x + 1)