@dprtl:
Ah! Oui 300 élèves sur une CASIO, c'est pas mal, c'est carrément toute l'école !
@Eric:
Ah! Oui, pardon, je n'avais pas vu le point blanc dans la video qui effectivement indique bien que 2nd CMS a était effectuer au début de chaque saisie.
Il y avait du soleil sur mon écran et je n'avais pas fait attention au point blanc marquant l'appuis des touches.
@Tous:
Bon, l'algorithme de la TI-58c est assez simple, la version postée ci-dessus est celle obtenue après avoir "compilé" les adresses des instructions. Lors de la mise au point, les Sub-routines et différentes parties du code avait des labels. C'est plus pratique, et indispensable pour le développement; on peut ajouter des R/S et autre PAUSEs pour voir ce qui ce passe. Alors que la version avec les adressages explicites est impossible à modifier sans tout casser.
Vous avez aimé la version TI-58C, alors vous allez adorer la version HP-15C qui utilise sa capacité à exploiter des matrices :
- MPO106 - HP-15C.gif (31.75 Kio) Vu 3649 fois
Attention, dans ce code seules les instructions STO A des pas 008 et 033 doivent être saisies en mode USER afin d'utiliser les fonctions de la saisie automatique des éléments et ainsi de passer à l'élément suivant (par les éventuels incréments automatiques des registres R0 et R1) ou saut du pas suivant si en fin de matrice.
En partitionnant la HP-15C afin de n'utiliser que les registres
I,
R0,
R1 et
R2 par une petit
2 f DIM (i), on obtient la configuration mémoire
g MEM 2 55 8-5 qui indique la limite des registres à
R2, qu'il y a 55 registres dans la piscine (le "pool") et que le code utilise 8 registres et 5 pas.
Notez les codes des instructions; ce ne sont pas des codes que l'on rencontre très souvent. Il y a même un RCL g A. Ce n'est pas une faute de frappe, c'est bel et bien une instruction prévue; instruction de rappel de l'élément A(y,x) où x et y sont pris dans la pile aux niveaux X: et Y:.
Hé hé hé, ce code est une bonne révision des différentes instructions de saisie et modification des éléments des matrices sur HP-15C ! Infernal !
Registres:
I : Compteur
R0,
R1: index éléments matrice A
R2: valeur dernier élément de A / nombre de bonbons à l'équirépartition.
Matrice A: tableau contenant le nombre de bonbons pour chaque élève.
Utilisation:
Saisir le nombre
n d'élèves dans la ronde et lancer par
f A.
Saisir alors les
n nombres de bonbons initialement distribués ce qui aura pour effet de placer ces valeurs dans la
Matrice A de taille n x 1.
la seconde partie du code (Label B) effectue le calcul des distributions après avoir vérifié que les éléments de la matrice A ne sont pas tous égaux. Pour cela le dernier élément est extrait et mémorisé dans le registre
R2. Cette valeur est retirée à tous les éléments de la
Matrice A. Puis la norme euclidienne de (
matA-R2) est calculée (C'est à dire la racine carré de la somme de tous les éléments élevés au carré) . Si tous les éléments de la
Matrice A sont égaux à
R2 alors cette norme est nulle et la dernière partie (Label C), affichant les résultats est lancée.
Sinon, la boucle de calcul de la distribution des bonbons est exécutée. Comme pour le code de la Ti58c, la valeur
R2 du dernier élément est utilisée pour calculer la nouvelle valeur du première élément de la
Matrice A. Au passage, la valeur du registre
I est augmenté d'une unité afin qu'il serve de compteur. A partir de la valeur
R2, le
sous-programme 2 calcule
CEIL(R2/2).
Cette valeur sera ajoutée à
CEIL(A(1,1)/2) afin de calculer la nouvelle valeur qui sera placée dans la
Matrice A et la valeur CEIL(A(1,1)/2) restera dans la pile pour le calcul de l'élément suivant. Et ainsi de suite pour chaque élément de la
Matrice A.
Une fois que tous les éléments de la
Matrice A ont été mis à jour, le programme reboucle sur le
Label B afin de vérifier l'égalité de tous les éléments de la Matrice A.
Dans le cas d'une matrice ne contenant qu'un seul élément, cet élément sera retiré à lui-même et la norme euclidienne sera nulle.
La dernière partie du code (Label C), se contente de placer
R2 dans la pile en Y: et le compteur
I en X: qui sera donc affiché. Une simple pression sur la touche [x:y] permettra de voir le nombre de bonbon communs à tous les élèves. Ce nombre peut également être obtenu en parcourant les élément de la
Matrice A.
Le sous-programme
LBL 2 utilise un RND qui impose un format d'affichage FIX 0 afin de transformer l'instruction d'arrondi RND en l'équivalent d'un CEIL. Mais c'est pas grave, il n'y a de toute façon dans les résultats que des entiers.
Cette version est plus complexe que la version initiale qui utilisait deux matrices et donc ne permettait pas de traiter une classe de 55 élèves.
Bon, l'HP-15C fait ce qu'elle peut et n'a pas l'ambition de traiter la ronde d'une école entière. N'est pas CASIO qui le veut...
Sans compter, que déjà 10 élèves c'est quelques minutes de 'runninG' ; je n'ose pas imaginé avec quelque centaine ...