Misez p'tit Optimisez n°93 : somme récursive des chiffres d'un entier (racine digitale)

Ici, on fait dans le petit, le LCD qui déchire sa race, on y cause même calculatrices quand on est en manque !

Modérateur : Politburo

Avatar de l’utilisateur
badaze
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7462
Inscription : 12 févr. 2007 19:36
Localisation : Pas très loin de Lyon
Contact :

Re: Misez p'tit Optimisez n°93 : somme récursive des chiffres d'un entier

Message par badaze » 13 juin 2020 23:08

Ythunder a écrit :
13 juin 2020 23:01
C'est quel langage ce code ?
C’est le LMS (langage machine spécialisé) de la TI 57. C’est cette machine (enfin pas celle ci précisément) qui a fait que je suis devenu informaticien !
Tout est bon dans le pocket.
Moi j'aime tout.... Casio, HP, Sharp, TI et les autres sauf que les TI semblent ne pas m'aimer :(
http://www.emmella.fr
Mes Casio - HP - Sharp - TI
Homme invisible.

Avatar de l’utilisateur
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7180
Inscription : 31 janv. 2008 15:24
Localisation : Banlieue Paârisienne
Contact :

Re: Misez p'tit Optimisez n°93 : somme récursive des chiffres d'un entier

Message par gege » 13 juin 2020 23:56

Bonjour,
Très belle TI57 !
C'est vraiment rare dans cet état.
G.E.

Avatar de l’utilisateur
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2483
Inscription : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez p'tit Optimisez n°93 : somme récursive des chiffres d'un entier

Message par C.Ret » 14 juin 2020 11:42

Ah! Oui elle est belle et fonctionnelle.

En se moment, il y a trois calculettes branchées sur le secteur sur mon bureau. Des heures et des heures de plaisir en perspective.

Et Danny sera déçu, là aussi c'est pas de la simulation ou de l'émulation.

:) Que du vrai digital, (pas du numérique ) c'est à dire du vrai tapé avec les doigts !!
SHARP PC-1211 + CE-121 + CE-122. | VIC 20 Commodore 128D + Printer P-803 + SD2iec. | TI-57 LCD | HP-28S + HP82240A | TI-74 BasiCalc | HP-41C + (2 memory + stat + IR) | HP-15C | HP Prime Color Touchscreen Graphing Calculator| TI-92 II | CASIO fx-602p + FA-1 | HP-71B 64K+JPC-ROM+HPIL+card reader . Sommaire des M.P.O..

Avatar de l’utilisateur
Danny
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 739
Inscription : 28 déc. 2013 17:34

Re: Misez p'tit Optimisez n°93 : somme récursive des chiffres d'un entier

Message par Danny » 14 juin 2020 12:04

'gnifique la TI 57 ! :o
Casio fx-702P, 750P, 880p, 3900p, 7000G, 6000G, 6500G, 6800G, 8500G, 4500P, 9900GC, 9950GB +, Graph 100+ USB, Graph 90+E, fx-CP400
HP 35, 45, 65, 21, 25, 67, 33E, 41C, 41CV, 41CX, 15C, 20S, 42S, 28S, 32S, 32SII, 48SX, 48S, 48G, 48GX, 48G+, 50g, 35s, 39gII, Prime
Sharp PC-1245, 1500A, 1430, 1350, 1360, 1403, 1403H, 1262, EL-9000, PC-E500S | Psion Organiser II XP, Organiser II LZ 64 | Tandy PC-7

Avatar de l’utilisateur
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2483
Inscription : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

A

Message par C.Ret » 14 juin 2020 16:36

D'avoir vu en fonctionnement la magnifique TI-57 ancestrale de Badaze, j'ai eut envi d'essayer ma (relativement) récente TI-57 LCD

Bon, les piles (installées en 1995) n'ont pas coulées et ne sont pas encore usées (c'est dire comme je l'ai peu utilisée !).

Et pour cause, son clavier était inutilisable à cause de répétitions à tire-larigot. Mais cette foi, rien. Aucune touche ne fonctionnait et ne semblait avoir d'effet. Sauf, les touche ON et OFF et de temps en temps une fonction qui affichait soit CALC soit ERROR.
Je me suis donc décider à l'ouvrir pour changer , je l'avait déjà fait il y a quelques décennies, la feuille de plastique sous les touches.

J'ai trouvé un vieux bout de transparent cellulose de marque HP que j'utilisais dans les année 90's pour des présentations imprimées sur HP-DeskJet.
J'en ai profité pour bien nettoyer l'intérieur des bulbes métalliques de contact avec un nettoyant 'contact' SVITOL spécialisé.
J'ai aussi trouvé un rouleau de large sotch transparent, armaturé et repositionnable pour bien recoller le film adhésif qui porte les dits bulbes.
J'ai découpé et ajusté le transparent de marque HP (ça me fait rigoler de réparer ma TI avec du matos Hewlett Packard ... pourvu que ça explose pas !!!)
J'ai ajouté une couche d'adhésif pour bien coincer la plaque plastique support clavier. Ca referme bien. J'ai réussi à ne rien casser.

Et , à ma grande surprise le clavier refonctionne parfaitement. C'est même agréable de pouvoir à nouveau tapoter sur cette TI-57 LCD. Pourvu que cela dure un peu.

En tout cas, j'ai trouvé un code plus court que celui de Badaze en utilisant le registre R1 pour y mettre la valeur constante 10 et en jonglant avec le registre de test t.
L'algorithme que j'utilise est un peu diffèrent du sien.
Sur la TI-57 LCD, on ne peut pas modifier le registre de test t à l'aide du registre R7. D'ailleurs, sur cette pauvre machine qui n'a de 57 que son nom, on ne peut pas grand chose ! Avoir 40 pas de programme nécessite de devoir se limiter aux deux registres R0 et R1. Quelle misère. :(
MPO93 TI57 LCD   21 STEPS 2 REG.jpg
MPO93 TI57 LCD 21 STEPS 2 REG.jpg (81.4 Kio) Consulté 3616 fois
Pour utiliser mon code, mettre sa TI-57 LCD en partition n°2 ou 3 car il faut 26 pas de programme et les deux premiers registres R0 et R1.
Mettre la valeur constante 10 dans le registre R1 puis saisir le code de la photo. Pour calculer de façon itérative la somme des chiffres d'un nombre saisir celui-ci et presser sur RST et R/S pour lancer le calcul.

Code : Tout sélectionner

              ON
              2nd Part 4
    40.2      10 STO 1
      10      LRN
              2nd CP
--       St
56       00       2nd C.t       	// Met à zéro le registre de test t			
51       01       2nd x:t    		// sauvegarde temporairement le nombre N dans t
61.00    02           STO 0		// Met à zéro accululateur R0
71.01    03           RCL 1		// Rappel constante R1=10
51       04           x:t		// Met à 10 le registre de test et restore le nombre N
-27      05   2nd INV x<t?		 	
13       06           R/S		// Si nombre inférieur à 10 alors résultat atteint
56       07       2nd C.t		// Remet à zéro registre de test t 
23.01    08           LBL 1	  // Boucle calcul somme chiffre du nombre N
61.85.00 09           STO+0		// Ajoute N=/abcde/ à l'accumulateur 
55       10            ÷	
71.01    11           RCL 1		// Rappel constante R1=10	 		
95       12            =	 	 
58       13       2nd Intg		// Arrondi 
65       14            x
53       15            (
51       16           x:t		// Sauvegarde temporairement résidu N/10^x dans registre t
85       17            + 
71.01    18           RCL 1		// Rappel constante R1=10			
95       19            =		
61.75.00 20           STO-0		// Retire N=/abcd0/ de l'accumulateur
00       21            0		
51       22           x:t		// Remet à zéro registre t et restaure résidu N/10^x			
-26      23   2nd INV x≠t?
22.01    24           GTO 1	// Boucle tant que le résidu n'est pas nul
71.00    25           RCL 0             // Rappel somme des chiffres 
21       26           RST 		// et relance la procédure
               LRN
Ouf, le RST est à la fin, il s'agit bien d'une méthode par récurrence de queue...

C'est un plaisir de pouvoir à nouveau utiliser cette machine: j'ai pu obtenir les valeurs de test; Je ne me souvenais plus que les calculs programmés apparaissaient furtivement à l'affichage. Cela permet de patienter.

Code : Tout sélectionner

               1337 RST R/S
       5       123456 RST R/S
       3       1234567 RST R/S
       1       999999 RST R/S
       9       _  

BON, je n'ai aucune personnalité, faut toujours que je copie... mais je n'ai pas pû brancher ma TI à quoi que ce soit :( et le 5 de l'écran LCD n'a pas le clinquant rouge vif des LED :) :(
Dernière édition par C.Ret le 14 juin 2020 18:05, édité 2 fois.
SHARP PC-1211 + CE-121 + CE-122. | VIC 20 Commodore 128D + Printer P-803 + SD2iec. | TI-57 LCD | HP-28S + HP82240A | TI-74 BasiCalc | HP-41C + (2 memory + stat + IR) | HP-15C | HP Prime Color Touchscreen Graphing Calculator| TI-92 II | CASIO fx-602p + FA-1 | HP-71B 64K+JPC-ROM+HPIL+card reader . Sommaire des M.P.O..

Avatar de l’utilisateur
Danny
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 739
Inscription : 28 déc. 2013 17:34

Re: Misez p'tit Optimisez n°93 : somme récursive des chiffres d'un entier

Message par Danny » 14 juin 2020 17:51

Ça fait plaisir de voir qu’un simple MPO permette de ressortir nos anciennes et s’amuser avec comme ça 8)
Casio fx-702P, 750P, 880p, 3900p, 7000G, 6000G, 6500G, 6800G, 8500G, 4500P, 9900GC, 9950GB +, Graph 100+ USB, Graph 90+E, fx-CP400
HP 35, 45, 65, 21, 25, 67, 33E, 41C, 41CV, 41CX, 15C, 20S, 42S, 28S, 32S, 32SII, 48SX, 48S, 48G, 48GX, 48G+, 50g, 35s, 39gII, Prime
Sharp PC-1245, 1500A, 1430, 1350, 1360, 1403, 1403H, 1262, EL-9000, PC-E500S | Psion Organiser II XP, Organiser II LZ 64 | Tandy PC-7

Avatar de l’utilisateur
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7180
Inscription : 31 janv. 2008 15:24
Localisation : Banlieue Paârisienne
Contact :

Re: Misez p'tit Optimisez n°93 : somme récursive des chiffres d'un entier

Message par gege » 14 juin 2020 21:42

Bonjour,
Voici une proposition récursive sur Prime :

Code : Tout sélectionner

EXPORT persist(n)
BEGIN
IF 9<n THEN persit(n-9*IP(N/10))->n; END
RETURN n;
END;
Je me demande quelle est la super astuce dont tu parles !!
A+
G.E.

Avatar de l’utilisateur
Danny
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 739
Inscription : 28 déc. 2013 17:34

Re: Misez p'tit Optimisez n°93 : somme récursive des chiffres d'un entier

Message par Danny » 14 juin 2020 22:28

Pas mal la fonction récursive 8)

Pour optimiser, regardez les nombres qui donnent les mêmes chiffres au final et essayez de leur trouver un point commun :geek:

Mon programme le + court fait... 5 pas ! (pour HP-41 ou 42) :)
Casio fx-702P, 750P, 880p, 3900p, 7000G, 6000G, 6500G, 6800G, 8500G, 4500P, 9900GC, 9950GB +, Graph 100+ USB, Graph 90+E, fx-CP400
HP 35, 45, 65, 21, 25, 67, 33E, 41C, 41CV, 41CX, 15C, 20S, 42S, 28S, 32S, 32SII, 48SX, 48S, 48G, 48GX, 48G+, 50g, 35s, 39gII, Prime
Sharp PC-1245, 1500A, 1430, 1350, 1360, 1403, 1403H, 1262, EL-9000, PC-E500S | Psion Organiser II XP, Organiser II LZ 64 | Tandy PC-7

Avatar de l’utilisateur
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7180
Inscription : 31 janv. 2008 15:24
Localisation : Banlieue Paârisienne
Contact :

Re: Misez p'tit Optimisez n°93 : somme récursive des chiffres d'un entier

Message par gege » 15 juin 2020 12:24

Bonjour,
Ah ah !!
Comme disait Martin Gardner.
Très amusant.

En effet le programme est très très court !!
G.E.

remy
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2086
Inscription : 13 mars 2006 16:39
Localisation : Issy
Contact :

Re: Misez p'tit Optimisez n°93 : somme récursive des chiffres d'un entier

Message par remy » 15 juin 2020 13:42

Danny a écrit :
13 juin 2020 15:49
Wow, je pensais que ça venait d’un émulateur :o
Moi aussi, et je commençais à me dire qu'il fallait que j'implémente ça dans PockEmul :D
C'est beau.
PockEmul, Emulateur de pocket Sharp, Canon, Casio, HP, TI, NEC, Panasonic, Sanco, Seiko, General, National, ....
sur Windows, Linux, OS X et Android
Available now on the Google Play Store and the Apple Store

Avatar de l’utilisateur
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2483
Inscription : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez p'tit Optimisez n°93 : somme récursive des chiffres d'un entier

Message par C.Ret » 15 juin 2020 18:09

remy a écrit :
15 juin 2020 13:42
Danny a écrit :
13 juin 2020 15:49
Wow, je pensais que ça venait d’un émulateur :o
Moi aussi, et je commençais à me dire qu'il fallait que j'implémente ça dans PockEmul :D
C'est beau.
Pas de souci, je fais une macro dans Excel et j'autorise Remy à utiliser le design dans ses productions !
Le vert et directement inspiré de celui du Forum.
Les fontes sont celles que l'on trouve facilement sur le Net. (Là Remy devra peut-être s'acquitter de régler les droits)
Quand au contenu, il suffit sur PockEmul de brancher une imprimante au cul d'une HP-41 et taper XEQ [alpha]TRACE[alpha].

Après, évidemment si dans deux ou trois ans Remy a vendu 3 millions d'émulateurs avec ce design dans le ventre, je l'accompagnerai en premier classe SVP faire des conférences en VIP aux quatre coins de la planète.
SHARP PC-1211 + CE-121 + CE-122. | VIC 20 Commodore 128D + Printer P-803 + SD2iec. | TI-57 LCD | HP-28S + HP82240A | TI-74 BasiCalc | HP-41C + (2 memory + stat + IR) | HP-15C | HP Prime Color Touchscreen Graphing Calculator| TI-92 II | CASIO fx-602p + FA-1 | HP-71B 64K+JPC-ROM+HPIL+card reader . Sommaire des M.P.O..

Avatar de l’utilisateur
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2483
Inscription : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez p'tit Optimisez n°93 : somme récursive des chiffres d'un entier

Message par C.Ret » 19 juin 2020 20:45

BON, pour illustrer cet excellent MPO avec un code pour pocket SHARP (que certains adapteront d'urgence pour CASIO) je propose d'utiliser les quatre lignes d'écran de mon SHARP PC-1360 afin d'indiquer la récurrence :

Code : Tout sélectionner

1:" " WAIT 0: INPUT NN$: CLS
2:IF VAL NN$>9 PRINT NN$:S=0: FOR I=1 TO LEN NN$:S=S+ VAL MID$ (NN$,I,1): NEXT I:NN$= STR$ S: GOTO 2
3:WAIT : PRINT NN$: END
[DEF][SPC] 1 3 3 7 [ENTER] affiche:
MPO93 SHARP PC1360  rec 1337.jpg
MPO93 SHARP PC1360 rec 1337.jpg (11.66 Kio) Consulté 3386 fois
[DEF][SPC] 9 8 7 9 8 7 [ENTER] affiche:
MPO93 SHARP PC1360  rec 987987.jpg
MPO93 SHARP PC1360 rec 987987.jpg (12.12 Kio) Consulté 3386 fois
[DEF][SPC] 5 2 3 6 9 8 4 1 0 7 8 9 5 2 [ENTER] affiche:
MPO93 SHARP PC1360  rec 52369841078952.jpg
MPO93 SHARP PC1360 rec 52369841078952.jpg (12.91 Kio) Consulté 3386 fois
Notons que je n'ai pu vérifier ces derniers résultats ni sur mon HP-41C , ni sur ma TI-57 LCD :(
SHARP PC-1211 + CE-121 + CE-122. | VIC 20 Commodore 128D + Printer P-803 + SD2iec. | TI-57 LCD | HP-28S + HP82240A | TI-74 BasiCalc | HP-41C + (2 memory + stat + IR) | HP-15C | HP Prime Color Touchscreen Graphing Calculator| TI-92 II | CASIO fx-602p + FA-1 | HP-71B 64K+JPC-ROM+HPIL+card reader . Sommaire des M.P.O..

Avatar de l’utilisateur
bernouilli92
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 4847
Inscription : 21 nov. 2012 14:03
Localisation : Ile de France

Re: Misez p'tit Optimisez n°93 : somme récursive des chiffres d'un entier

Message par bernouilli92 » 19 juin 2020 23:27

Je connaissais l'astuce. Le programme pour hp48 fait 15 octets, mais beaucoup moins sur hp41 ou hp42.
Par contre, ce n'est pas récursif.
HP, Casio, Sharp, Psion, quelques TI et divers autres

Avatar de l’utilisateur
Danny
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 739
Inscription : 28 déc. 2013 17:34

Re: Misez p'tit Optimisez n°93 : somme récursive des chiffres d'un entier

Message par Danny » 19 juin 2020 23:46

Eh oui vous êtes plusieurs à avoir trouvé l’optimisation ultime pour calculer ce qu’on appelle la racine digitale, bravo 8)

Un peu de lecture pour les curieux : https://www.geeksforgeeks.org/finding-s ... gle-digit/

Et encore plus intéressant, sur les séquences de racines digitales : https://www.sjsu.edu/faculty/watkins/Digitsum0.htm
Casio fx-702P, 750P, 880p, 3900p, 7000G, 6000G, 6500G, 6800G, 8500G, 4500P, 9900GC, 9950GB +, Graph 100+ USB, Graph 90+E, fx-CP400
HP 35, 45, 65, 21, 25, 67, 33E, 41C, 41CV, 41CX, 15C, 20S, 42S, 28S, 32S, 32SII, 48SX, 48S, 48G, 48GX, 48G+, 50g, 35s, 39gII, Prime
Sharp PC-1245, 1500A, 1430, 1350, 1360, 1403, 1403H, 1262, EL-9000, PC-E500S | Psion Organiser II XP, Organiser II LZ 64 | Tandy PC-7

Avatar de l’utilisateur
badaze
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7462
Inscription : 12 févr. 2007 19:36
Localisation : Pas très loin de Lyon
Contact :

Re: Misez p'tit Optimisez n°93 : somme récursive des chiffres d'un entier

Message par badaze » 20 juin 2020 01:12

Si on veut faire du vrai récursif il faut utiliser des langages qui le permettent type Pascal ou C. Sur nos pockets basic on sera vite limités par le nombre de niveaux d’appels de sous-routines. Par chance, le Casio FX 850P a une pile d’appels de 99 niveaux.

Exemple avec le calcul de factorielles. Bon il n’y a pas de variables locales mais on peut s’en passer.
10 INPUT "A=",A
20 B = 1
30 GOSUB 1000
40 PRINT "......";B;
50 END
999 REM *** FACTORIELLE
1000 IF A = 0 THEN RETURN
1010 B = B * A
1020 A = A - 1
1030 GOSUB 1000
1040 RETURN
Tout est bon dans le pocket.
Moi j'aime tout.... Casio, HP, Sharp, TI et les autres sauf que les TI semblent ne pas m'aimer :(
http://www.emmella.fr
Mes Casio - HP - Sharp - TI
Homme invisible.

Répondre

Revenir vers « Tous les Pockets »