La deuxième mi-temps !
Cette impressionnante image nous mène bien loin des terrains de football... Qui sait si, à calculer un million de fois ce qui est représenté sur cette figure, et à le représenter sur un écran approprié, l'on ne découvrirait pas le sens de la vie ? Voilà une question pour quelques dimanches !
Il est assez surprenant que depuis le lancement de ce MPO, nous ayons dans l'ensemble depuis
zpalm jusqu'à moi-même (avec peut-être l'exception de
dprtl dont je n'ai toujours pas éclairci le programme...) en passant naturellement par
C.Ret suivi des chemins plutôt
géométriques pour obtenir le dessin de la spirale ; or quoi de plus naturel ? lorsqu'on évoque une spirale, on pense "escargot", "lavabo", "galaxie", "serpentin", "amorces de revolver" (oui, vous vous souvenez de votre panoplie de cow-boy ?), "ressort d'horloge" et même "boule de neige"...
Pourtant, dessiner à la main une spirale en escalier n'est pas exactement la même chose que d'observer la croissance d'un gastéropode. Cela exige de se conformer à des règles qui ne sont pas celles de Léonard de Vinci à Chambord, d'accord, mais qu'il faut suivre impérativement et sans erreur.
Que se passe-t-il dans notre cerveau lorsque nous traçons ces nombres entiers ?
Peu seraient capables de le dire, et je serais le dernier de ceux-là. On peut éventuellement estimer que le cerveau va suivre au plus près la figure (fœtale ?) qui se dessine peu à peu, et ce sera une grosse approximation du processus réel.
Ce que je sais en revanche est que rendre compte de cela algébriquement n'est pas trop compliqué. À simplement noter certaines coordonnées successives des entiers et des opérations effectuées sur
x et
y pour les obtenir, on perçoit des régularités propices aux calculs qui nous intéressent. En effet :
Code : Tout sélectionner
| N | X | Y | Opération
| 1 | 0 | 0 | x=x+1
| 2 | 1 | 0 | y=y+1
| 3 | 1 | 1 | x=x-1
| 4 | 0 | 1 | x=x-1
| 5 | -1 | 1 | y=y-1
| 6 | -1 | 0 |
Si vous avez déjà deviné l'opération exigée à partir de l'entier 6 pour obtenir les coordonnées de l'entier 7, vous avez fait l'essentiel du travail de compréhension !
Nous verrons plus tard qu'il est possible d'appliquer ce principe de détermination des coordonnées pour la recherche de celles d'un entier quelconque, mais pour l'instant, observons que nous devrons additionner alternativement à
x et à
y les valeurs 1 et -1 selon une progression arithmétique élémentaire puisqu'elle suit celle des entiers naturels eux-mêmes : 1, 2, 3, 4, etc.
Autrement dit :
- ajoutons -1 à X deux fois,
- ajoutons -1 à Y deux fois,
- ajoutons 1 à X trois fois,
- ajoutons 1 à Y trois fois,
À chaque modification de X ou de Y, naturellement, N varie.
C'est là que j'ai rencontré d'énormes difficultés à représenter la suite d'opérations nécessaires à une machine pour qu'elle réalise ce calcul. Je n'ai pas pu éviter l'organigramme relativement bâclé que voici :
Je dois être honnête : j'ai réalisé des dizaines de tentatives sur une feuille (que dis-je ? une bonne dizaine de feuilles !) avant de me résoudre à l'évidence que le passage sur écran, comme nous y a habitué C.Ret avec ses magnifiques explications, était indispensable.
J'ai aussi essayé, dans un élan d'orgueil ridicule, d'immédiatement appliquer ce que je croyais être une trouvaille majeure sur une HP-41 en évitant scrupuleusement l'usage des registres ! Mais n'est pas zpalm qui veut...
Que se passe-t-il dans notre pauvre cerveau entre l'inscription de la spirale sur un bout de papier et l'adaptation de cette exécution à un ordinateur ?
Je sens que la réponse à cette question exigera des prolongations...
Revenons à notre schéma :
On initialise la machine avec :
- La variable I (I pour Index), qui représentera les entiers successifs de 1 à N ;
- X et Y les coordonnées classiques ;
- U (U pour Unité) qui prendra les valeurs 1 et -1 alternativement ;
- F qui représentera Fibonacci, c'est-à-dire les entiers successifs correspondant au nombre de boucles sur X puis sur Y ;
- G qui gardera Fibonacci au chaud !
L'utilisateur entre la valeur N dont il doit trouver les coordonnées.
La machine vérifie si I égale N et dans ce cas, affiche le résultat immédiat et stoppe le programme.
1. C'est bien sûr ici que ça devient intéressant : on incrémente F pour commencer la boucle sur X. On note cette valeur dans G pour la ressortir éventuellement plus tard et l'appliquer sur Y, puis éventuellement sur le X suivant, etc.
2. Test de parité très lourd et très lent ; il suffit en réalité d'attribuer alternativement 1 et -1 à U, ce qui est faisable bien plus rapidement pour ce programme de recherche de TOUS les N. La recherche sur un N quelconque exigera néanmoins ce test, je le conserve donc ainsi (mais rien ne vous empêche de le changer !).
3.Travail sur X : tant que N n'est pas atteint et tant que F n'est pas à zéro, on continue à modifier X et par conséquent N.
4.Travail sur Y : tant que N n'est pas atteint et tant que F n'est pas à zéro, on continue à modifier Y et par conséquent N.
Voici un programme très grossier pour HP-41, je n'en suis pas fier mais il fonctionne : je le place ici pour vous donner de quoi vous occuper, n'hésitez pas à l'améliorer. Je m'intéresse plutôt à la version OPL pour l'instant !
Code : Tout sélectionner
01 LBL ULAM
02 CLRG
03 STO 00
04 1
05 STO 01
06 STO 04
07 X=Y?
08 GTO 00
09 LBL 01
10 1
11 ST+ 05
12 RCL 05
13 STO 06
14 2
15 /
16 FRC
17 X=0?
18 GTO 02
19 1
20 STO 04
21 GTO 03
22 LBL 02
23 1
24 CHS
25 STO 04
26 LBL 03
27 RCL 04
28 ST+ 02
29 1
30 ST+ 01
31 RCL 00
32 RCL 01
33 X=Y?
34 GTO 00
35 1
36 ST-05
37 RCL 05
38 X=0?
39 GTO 04
40 GTO 03
41 LBL 04
42 RCL 06
43 STO 05
44 LBL 06
45 RCL 04
46 ST+ 03
47 1
48 ST+ 01
49 RCL 00
50 RCL 01
51 X=Y?
52 GTO 00
53 1
54 ST- 05
55 RCL 05
56 X#0?
57 GTO 06
58 RCL 06
59 STO 05
60 GTO 01
61 LBL 00
62 RCL 00
63 PSE
64 RCL 02
65 PSE
66 RCL 03
67 PSE
68 RTN
Je pense que ce programme, largement amélioré, devrait être très rapide.
À bientôt.
PS : de manière surprenante, ma 41CX dont le voyant "BAT" était allumé depuis ce matin vient de totalement s'éteindre...