Commentaires Mise à jour 2023-11-17 par Mathilde Ohm
|
Novembre (semaine 47)
Après un peu d’hésitation, j’ai fini par comprendre la différence entre suite arithmétique et suite géométrique. Pour calculer le successeur d’un terme au sein d’une suite arithmétique l’opération consiste à ajouter le nombre constant . En revanche, pour calculer le successeur d’un terme au sein d’une suite géométrique il faut multiplier par le nombre constant
.
pour raison et
comme quotient, parce qu’il est fréquent de multiplier par un nombre fractionnaire et notamment dans les emprunts (ou les prêts) qui sont des suites géométriques.
Pour expérimenter les suites géométriques, notre professeur nous soumet un programme Python de calcul de .
Dans le numéro 7 de mai 1979 (page 56), de l’ordinateur individuel, est paru ce programme de calcul de
puissance
, pour calculer les termes d’une suite géométrique de raison
de rang
et de terme initial
.
J’essaye ce programme avec |
Suivons un exemple pas à pas, il s’agit de calculer .
Si j’examiner le programme avec l’intention de le corriger, je peux le suivre à la trace en inscrivant dans un tableau le résultat des actions ligne par ligne.
J’ai noté quelques embuches stupides à dépasser :
- Le caractère «
» signifie « commentaire », c’est-à-dire que la ligne commençant par «
» ne fait rien d’autre que renseigner le lecteur humain ex :« 2 # Ordinateur individuel, numéro 7 de mai 1979 (page 56) » ;
- Il convient de distinguer le caractère «
» du caractère «
». La valeur d’une variable est conservée dans une zone mémoire. Si
SOMME
vaut, la notation
SOMME =
affecte à la zoneSOMME + 5SOMME
la valeur précédente deSOMME
(soit) . Autre exemple :
SOMME =
fait passer la zone valeurSOMME +SOMME SOMME
deà
. En revanche, le caractère «
» signifie que égalité (au sens de pareil)
- J’ai observé que le prof qualifie de variables «
» et «
» qui évoluent au cours de l’éxécution, alors que «
», qui reste inchangé, est désigné aussi comme variables bien que gardant une valeur constante. Je vais essayer de suivre les états successifs de «
» et de «
.
Excellent, semble-t-il :
Et je remarque que la première ligne de la boucle « while » montre bien que l’on calcule
par multiplications successives. Suivons un autre exemple, cette fois calculons
; mais là, surprise, le programme affiche :
aussi.
Quelle conclusion tirer de ces essais ? La première conclusion c’est qu’essayer un programme ne prouve pas qu’il soit correct, au mieux, est-il possible de constater qu’il se trompe.
Bien que je ne puisse pas consulter l’auteur de ce programme, je peux admettre son intention explicitement indiquée par la première ligne : le commentaire (1) # Calculer . Ai-je ma lu ? Ai-je mal utilisé le programme ? Le texte publié, il y a une quarantaine d’années ne semble pas correspondre à ce que je lis. Y aurait-il deux lectures différentes du même programme ? Cela m’évoque l’écoute de la toccata de Jean-Sébastien Bach l’une interprétée par Michel Chapuis et l’autre par Jacques Loussier.
Cependant, si je peux comprendre qu’une partition d’œuvre musicales puisse être interprétée de façons différentes par deux musiciens, je ne pense pas qu’un programme puisse se comporter différemment dans deux usages aussi proches. La recherche de ce qui distingue les deux exécutions ( et
) m’a demandé un peu de patience et mobilisé mon désir d’élucider le problème.
Pour cela j’ai ajouté une utilisé une instruction particulière : assert, une sorte de commentaire, une espèce d’hypothèse, que j’ai insérée dans le programme.
Il y a toutes sortes de commentaires ! Mais, notre prof nous conseille d’utiliser l’instruction assert pour s’assurer de la justesse de la proposition. (C’est du globish, ie global-english), en français on peut dire assertion, affirmation croyance…). On peut, essentiellement l’utiliser pour comprendre le sens de ce qui est écrit dans le programme.
Inutile, dit le prof, de l’employer à la place d’une condition comme if then else :
|
En revanche, c’est fort utile pour s’assurer des relations entre les variables par exemple :
Bon, c’est vrai que cela réclame quelques minutes pour comprendre, mais, franchement c’est utile. ! |
Il me faut entrer dans les détails. La ligne (9) opère par multiplications répétées par ![]() ![]() ![]() ![]() ![]() le programme affiche : ![]() ![]() ![]() et ![]() ![]() ![]() Pour voir loin, il faut regarder de près ! Examinons la boucle (7-12) : La ligne (7) attribue à la variable ![]() ![]() La ligne (10) opère par multiplications répétées par ![]() ![]() ![]() ![]() ![]() J’arrive la 1 ![]() ![]() ![]() Je remarque que l’assertion |
Il n’est pas très facile de corriger le programme.
Il me semble mieux comprendre ce programme que l’auteur. Il paraît probable que le programmeur a mal choisi son test d’arrêt, et qu’il a cherché à le corriger en introduisant la variable Il est plus important de considérer les situations que les actions, et éviter cette question « Comment faire ? » et préférer une réflexion sur les relations. Pour rédiger le programme, il faut d’abord proposer une situation générale : Il reste à voir le démarrage, c’est-à-dire trouver des valeurs de |