Le
programme de C.Ret pour Ti-58/Ti-58c m’a donné l’idée de ressortir ma SR-52, l’ancêtre des TI-58/58c.
Première calculatrice programmable de Texas Instruments sortie fin 1975 la SR-52 dispose de 20 registres mémoire (0 à 19) et 224 pas de programme. Mais la plus part des touches prennent un pas de programme, par exemple un accès mémoire comme RCL 01 prend trois pas : un pour RCL un pour 0 et un pour 1. De plus la SR-52 a un jeu d’instructions plus réduit que celui des TI-58 (pas d'instructions int/frac ou OP ni de registre t, tests limités aux comparaisons à 0, etc...), donc il n’est pas question d’espérer faire plus court, mais l’exercice est intéressant car il existe plusieurs astuces de programmation sur la SR-52.
Je me suis alors (re)plongé dans les
65 Notes V2N8 à V3N4 et les
52Notes.
Voici le résultat, un programme en 81 pas qui permet de gérer des rondes jusqu’à 19 élèves, dans les registres 1 à 19, le registre 0 étant utilisé par l’instruction dsz. Le nombre d’élèves et le compteur de boucles sont stockés dans les registres 69 et 68 qui font partie des registres internes de la SR-52 utilisés pour gérer les différents niveaux de parenthèses, et donc libres dans ce programme.
J'ai repris les conventions du manuel de la SR-52: * représente la touche 2nd et 1', 2', 3' ... les labels associés aux touches numériques secondaires.
- SR-52.png (30.23 Kio) Vu 3962 fois
La remise à 0 des registres 68 et 69 avant d'utiliser le programme se fait par un simple
CLR au lieu de
2nd CMS.
Sous-programme A: pour la saisie des données. Comme la SR-52 n'a pas d’instructions
OP 20 la routine est un peu plus longue, on utilise
1 SUM directement dans le registre 69 pour compter le nombre d'élèves et indexer le registre ou l'on stocke le nombre initial de bonbons. Du coup on évite
RCL 00 STO 69 au début de B.
On termine A avec avec
GTO A et non avec
rset comme sur la TI-58C car
rset effacerait la valeur saisie pendant le
HLT:
"Upon encountering an rset, the 52 clears a soft display, while the 58/59 RST does not affect the display."
Sous-programme B: c'est la partie principale qui va répartir les bonbons entre les élèves jusqu'à ce que chacun en ait le même nombre.
Il comporte deux boucles, la première sur le label
1' qui vérifie le nombre de bonbons de chaque élève, et la seconde sur le label
3' qui répartit les bonbons. Cette répartition commence sur le label
2' et à la fin enchaine directement sur le label
B pour une nouvelle vérification.
Sous-programme C: sert à initialiser le registre 00 utilisé par les boucles
dsz avec le nombre d'élèves stocké dans le registre 69. Il se termine comme dans la version pour TI-58C par
RCL 01, du coup je l'ai placé juste après la fin du sous-programme
B, ce qui permet après l'affichage du nombre de boucles par
RCL 68 HLT d'enchainer avec l'affichage du nombre final de bonbons en pressant
RUN. En effet la SR-52 n'ayant pas de registre
t il n'y a pas de touche
x:t comme sur la 58C.
Sous-programme D: dans la version pour la 58C il calcule CEIL(x÷2) mais la SR-52 n'a pas d'instruction int. En cherchant comment remplacer int, je me suis aperçu de trois choses:
- on n'a pas besoin d'une vraie fonction CEIL car il n'y a que deux cas à traiter: n entier qui donne n et n.5 qui donne n+1
- en mode fix 0, n est affiché comme n et n.5 est affiché comme n+1
- la séquence EE INV EE remplace la valeur courante par la valeur affichée!
On peut donc remplacer la séquence
+ .5 = 2nd INT par
= EE INV EE en ayant préalablement sélectionné le mode
fix 0.
Note: J'ai gardé tous les labels dans mon programme car les supprimer n'entraine au mieux aucun gain en nombre pas (labels 1', 2', 3') voire en ajoute dans le cas des labels C et D qui sont appelés plusieurs fois.
Résultats: bien que plus ancienne et fonctionnellement limitée par rapport aux TI-58/59 qui vont la remplacer, la SR-52 a un avantage sur ces dernières: elle est plus rapide ! (Comme la SR-56 comparée à la TI-57)
- CLR 1 A 2 RUN 3 RUN 4 RUN 5 RUN B affiche 6 en 0'36"7 (au lieu de 0'48"6 sur la 58C) puis RUN affiche 6
- CLR 10 A 2 A 8 A 22 A 16 A 4 A 10 A 6 A 15 A 20 A B affiche 12 en 1'54"9 (au lieu de 2'40"2 sur la 58C) puis RUN affiche 18