Misez p'tit Optimisez n°93 : somme récursive des chiffres d'un entier (racine digitale)
Modérateur : Politburo
Misez p'tit Optimisez n°93 : somme récursive des chiffres d'un entier (racine digitale)
Hello,
Je propose un petit sujet sympa qui n'a pas déjà été traité a priori :
Le calcul de la somme des chiffres composant un entier, de façon récursive jusqu'à n'obtenir plus qu'un chiffre.
Par exemple f(1337) = 5 , car 1 + 3 + 3 + 7 = 14 , puis 1 + 4 = 5.
Comme d'hab, essayez d'éviter de chercher sur les internets sinon vous allez vite trouver la méga astuce pour calculer ça super rapidement
(même ma Casio fx-3900P avec ses 100 pas peut le faire )
Sommaire des MPO
Je propose un petit sujet sympa qui n'a pas déjà été traité a priori :
Le calcul de la somme des chiffres composant un entier, de façon récursive jusqu'à n'obtenir plus qu'un chiffre.
Par exemple f(1337) = 5 , car 1 + 3 + 3 + 7 = 14 , puis 1 + 4 = 5.
Comme d'hab, essayez d'éviter de chercher sur les internets sinon vous allez vite trouver la méga astuce pour calculer ça super rapidement
(même ma Casio fx-3900P avec ses 100 pas peut le faire )
Sommaire des MPO
Modifié en dernier par Danny le 20 juin 2020 13:15, modifié 2 fois.
? Apple, Atari, Canon, Casio, ????????????, HP, Psion, Sharp, Tandy... même TI.
-
- Fonctionne à 2400 bauds
- Messages : 2143
- Enregistré le : 30 août 2011 12:23
- Localisation : Vous êtes ici -> .
Re: Misez p'tit Optimisez n°93 : somme récursive des chiffres d'un entier
Hyper rapido, pas trop optimise non plus !
Pour HP41:
Il suffit de faire NNNNNN dans X, XEQ SN, et X contient la somme des chiffres de l'entier sur 1 chiffre.
Pour HP41:
Code : Tout sélectionner
01 LBL "SN"
02 LBL 00
03 STO 00
04 LBL 01
05 CLX
06 STO 01
07 LBL 02
08 RCL 00
09 X=0?
10 GTO 03
11 10
12 /
13 INT
14 STO 00
15 LASTX
16 FRC
17 10
18 *
19 ST+ 01
20 GTO 02
21 LBL 03
22 9
23 RCL 01
24 X>Y?
25 GTO 00
26 END
Il y a ceux qui voient les choses telles qu'elles sont et se demandent pourquoi, et il y a ceux qui imaginent les choses telles qu'elles pourraient être et se disent... pourquoi pas? - George Bernard Shaw
J'adore parler de rien, c'est le seul domaine où j'ai de vagues connaissances ! - Oscar Wilde
Ce n'est pas parce que les choses sont difficiles que nous n'osons pas. C'est parce que nous n'osons pas que les choses sont difficiles. - Sénèque
J'adore parler de rien, c'est le seul domaine où j'ai de vagues connaissances ! - Oscar Wilde
Ce n'est pas parce que les choses sont difficiles que nous n'osons pas. C'est parce que nous n'osons pas que les choses sont difficiles. - Sénèque
-
- Fonctionne à 2400 bauds
- Messages : 2143
- Enregistré le : 30 août 2011 12:23
- Localisation : Vous êtes ici -> .
Re: Misez p'tit Optimisez n°93 : somme récursive des chiffres d'un entier
Une version sans registre (juste la pile) pour HP41. Meme mode operatoire que le programme precedent:
Code : Tout sélectionner
01 LBL 01
02 0
03 X<>Y
04 LBL 02
05 X=0?
06 GTO 00
07 10
08 /
09 INT
10 LASTX
11 FRC
12 10
13 *
14 ST+ Z
15 RDN
16 GTO 02
17 LBL 00
18 RDN
19 LBL "SN"
20 9
21 X<>Y
22 X>Y?
23 GTO 01
24 END
Il y a ceux qui voient les choses telles qu'elles sont et se demandent pourquoi, et il y a ceux qui imaginent les choses telles qu'elles pourraient être et se disent... pourquoi pas? - George Bernard Shaw
J'adore parler de rien, c'est le seul domaine où j'ai de vagues connaissances ! - Oscar Wilde
Ce n'est pas parce que les choses sont difficiles que nous n'osons pas. C'est parce que nous n'osons pas que les choses sont difficiles. - Sénèque
J'adore parler de rien, c'est le seul domaine où j'ai de vagues connaissances ! - Oscar Wilde
Ce n'est pas parce que les choses sont difficiles que nous n'osons pas. C'est parce que nous n'osons pas que les choses sont difficiles. - Sénèque
Re: Misez p'tit Optimisez n°93 : somme récursive des chiffres d'un entier
Méthode de bourrin, c’est un bon début
? Apple, Atari, Canon, Casio, ????????????, HP, Psion, Sharp, Tandy... même TI.
- C.Ret
- Fonctionne à 9600 bauds
- Messages : 3421
- Enregistré le : 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
Sympa ce petit MPO, je n'ai pas besoin d'aller sur un quelconque Internet pour me souvenir du principe d'une preuve par neuf !
Je suis donc allé pomper sur le MPO n°9 qui a un sujet assez semblable.
Mais l'idée ici est d'être récursif. Je sors donc mon HP-28S.
Code : Tout sélectionner
SRdC: « → n « IF n 10 < THEN n ELSE n MPO9 SRdC » »
La récurrence est que l'on utilise la méthode du MPO n°9 jusqu'à obtenir un nombre suffisamment petit
Per exemple, on peut prendre pour méthode du MPO n°9 le code que nous avait proposé Gilles59 le 22 octobre 2011 à 13:30 ou le code suivant que j'ai composé, à l'instant, en m'inspirant de celui que Gilles.59 proposait pour CASIO fx-602p :
Code : Tout sélectionner
MPO9: « CL∑ WHILE DUP REPEAT 10 MOD LAST ROT ∑+ / IP END DROP TOT »
On a alors 1337 SRdC qui renvoie bien 5 (et qui laisse une matrice '∑DAT' contenant [[ 4 ][ 1 ]] )
On peut aussi combiner les deux codes pour obtenir quelque chose de plus court, mais c'est alors une méthode itérative.
Code : Tout sélectionner
« DO CL∑ WHILE DUP REPEAT 10 MOD LAST ROT ∑+ / IP END DROP TOT UNTIL DUP 10 < END »
Modifié en dernier par C.Ret le 15 sept. 2020 19:35, modifié 1 fois.
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
-
- Fonctionne à 2400 bauds
- Messages : 2143
- Enregistré le : 30 août 2011 12:23
- Localisation : Vous êtes ici -> .
Re: Misez p'tit Optimisez n°93 : somme récursive des chiffres d'un entier
Nouvelle version optimisee... Je ne me souvenais plus que MOD etait disponible...
En ligne 15 X#0? est X different 0?
Code : Tout sélectionner
01 LBL "SN"
02 LBL 01
03 0
04 X<>Y
05 LBL 02
06 STO Z
07 10
08 MOD
09 ST+ Y
10 ST- Z
11 RDN
12 X<>Y
13 LASTX
14 /
15 X#0?
16 GTO 02
17 9
18 RCL Z
19 X>Y?
20 GTO 01
21 END
Modifié en dernier par cgh le 13 juin 2020 00:11, modifié 1 fois.
Il y a ceux qui voient les choses telles qu'elles sont et se demandent pourquoi, et il y a ceux qui imaginent les choses telles qu'elles pourraient être et se disent... pourquoi pas? - George Bernard Shaw
J'adore parler de rien, c'est le seul domaine où j'ai de vagues connaissances ! - Oscar Wilde
Ce n'est pas parce que les choses sont difficiles que nous n'osons pas. C'est parce que nous n'osons pas que les choses sont difficiles. - Sénèque
J'adore parler de rien, c'est le seul domaine où j'ai de vagues connaissances ! - Oscar Wilde
Ce n'est pas parce que les choses sont difficiles que nous n'osons pas. C'est parce que nous n'osons pas que les choses sont difficiles. - Sénèque
Re: Misez p'tit Optimisez n°93 : somme récursive des chiffres d'un entier
Ah oui, je me disais aussi qu’il doit bien y avoir un MOD sur une HP-41
Bon pour l’instant personne ne triche, ça fait plaisir
Bon pour l’instant personne ne triche, ça fait plaisir
? Apple, Atari, Canon, Casio, ????????????, HP, Psion, Sharp, Tandy... même TI.
- C.Ret
- Fonctionne à 9600 bauds
- Messages : 3421
- Enregistré le : 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
C'est une bonne idée de n'utiliser que la pile. Ensuite, l'HP-41C connait l'instruction MOD (*), on peut donc comme sur l'HP-28S simplifier le code.
La notion de récurrence pose cependant problème. Les HP-41 ne supportent que 6 niveaux d'appel de sous-procédures.
Voici donc une version itérative :
Code : Tout sélectionner
01 LBL "SIdC" 0
03 LBL 01 ALOG ALOG x>y? GTO 03 CLX
09 LBL 02 RCL Y INT x=0? GTO 01 10 ST/ T MOD + GTO 02
19 LBL 03 RDN END
On peut simplifier un peu en réorganisant la séquence. Ce qui en fait presque une méthode par récurrence, en fait récurrence de queue car l'appel se fait par la dernière instruction. J'ai donc remplacé XEQ "SRdC" RTN par un simple GTO "SRdC"
Code : Tout sélectionner
01 LBL "SRdC
02 0 X<>Y
04 LBL 01 STO Z 10 ST/ T MOD ST+ Y X<> L X<> Z INT x>0? GTO 01
15 RDN x>y? GTO "SRdC
18 END
(*) Le temps que je rédige et mon post a croisé les votres
Modifié en dernier par C.Ret le 13 juin 2020 15:26, modifié 4 fois.
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
- badaze
- Fonctionne à 14400 bauds
- Messages : 8409
- Enregistré le : 12 févr. 2007 18:36
- Localisation : Pas très loin de Lyon
- Contact :
Re: Misez p'tit Optimisez n°93 : somme récursive des chiffres d'un entier
Ca doit être faisable sur TI 57 LED en 33 pas. J’ai écrit le programme mais j’ai la flemme de le taper !
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.
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.
Re: Misez p'tit Optimisez n°93 : somme récursive des chiffres d'un entier
Pas mal ta trace, c’est fait avec quoi ?
? Apple, Atari, Canon, Casio, ????????????, HP, Psion, Sharp, Tandy... même TI.
- C.Ret
- Fonctionne à 9600 bauds
- Messages : 3421
- Enregistré le : 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
Avec mon imprimante. je mets mon HP-41C en mode TRACE et s'imprime sur le papier thermique chaque opération que je saisie ou chaque instruction d'un programme.
L'exécution avec 1337 produit alors un enregistrement papier qui fait bien 37 cm de long. Mais ça permet d'avoir sous les yeux tout le déroulement du code. C'est pratique pour les dé-buggages et mises au point.
Par contre, scanner les 37 cm de ruban c'est un peu fastidieux, j'ai donc recopier dans un bon traitement de texte (Excel en fait ) et y ajoutant les valeurs des registres T: Z: et Y: ainsi que le listing du programme. Sur le papier ne s'imprime que le contenu du registre X ou ALPHA, mes saisies et les instructions de la colonne Cmd:
Les fontes permettent d'avoir un bon rendu des différents éléments et indique où les trouver (fonte ROMAN pource qui est imprimé et fontes 14-segments pour ce qui s'affiche sur l'HP-41C. Le reste c'est du HP Simplified Light pour pas se prendre trop la tête.
L'exécution avec 1337 produit alors un enregistrement papier qui fait bien 37 cm de long. Mais ça permet d'avoir sous les yeux tout le déroulement du code. C'est pratique pour les dé-buggages et mises au point.
Par contre, scanner les 37 cm de ruban c'est un peu fastidieux, j'ai donc recopier dans un bon traitement de texte (Excel en fait ) et y ajoutant les valeurs des registres T: Z: et Y: ainsi que le listing du programme. Sur le papier ne s'imprime que le contenu du registre X ou ALPHA, mes saisies et les instructions de la colonne Cmd:
Les fontes permettent d'avoir un bon rendu des différents éléments et indique où les trouver (fonte ROMAN pource qui est imprimé et fontes 14-segments pour ce qui s'affiche sur l'HP-41C. Le reste c'est du HP Simplified Light pour pas se prendre trop la tête.
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Re: Misez p'tit Optimisez n°93 : somme récursive des chiffres d'un entier
Wow, je pensais que ça venait d’un émulateur
? Apple, Atari, Canon, Casio, ????????????, HP, Psion, Sharp, Tandy... même TI.
- badaze
- Fonctionne à 14400 bauds
- Messages : 8409
- Enregistré le : 12 févr. 2007 18:36
- Localisation : Pas très loin de Lyon
- Contact :
Re: Misez p'tit Optimisez n°93 : somme récursive des chiffres d'un entier
Pour la TI 57. A peine testé. Plante si j'ai des nombres de plus de 6 chiffres. Admirez la TI 57. Peu sont aussi pimpantes au bout de 40 ans !
EDIT : Oopps. J’ai oublié RCL 0 après le second xy.
EDIT : Oopps. J’ai oublié RCL 0 après le second xy.
Modifié en dernier par badaze le 14 juin 2020 17:56, modifié 1 fois.
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.
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.
- Marge
- Fonctionne à 14400 bauds
- Messages : 6189
- Enregistré le : 01 oct. 2008 14:39
- Localisation : En bas, tout au fond à gauche.
Re: Misez p'tit Optimisez n°93 : somme récursive des chiffres d'un entier
3 hommes, 3 demis, un 3a... Magnéto, Serge !
Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67__: A L I E N .
♣ ♦ « Boris », c'était juste Maurice enrhumé. ♥ ♠
Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67__: A L I E N .
♣ ♦ « Boris », c'était juste Maurice enrhumé. ♥ ♠
- Ythunder
- Fonctionne à 9600 bauds
- Messages : 4562
- Enregistré le : 09 août 2008 17:46
- Localisation : 03
Re: Misez p'tit Optimisez n°93 : somme récursive des chiffres d'un entier
C'est quel langage ce code ?
Quand je lis ça "oui des passionnées qui modifie des machines pour en faire des moutons a 5 pattes qui n'ont plus rien a voir avec la machine d'origine afin de faire la video choc sur youtube..."
Ca me fait rire. Perso, je n'ai ni chaine youtube sur les machines et je n'ai aucun mouton à 5 pattes qui n'a pàlus rien a voir avec des machines d'origine. Mais à qui s'adressait on ?
Ca me fait rire. Perso, je n'ai ni chaine youtube sur les machines et je n'ai aucun mouton à 5 pattes qui n'a pàlus rien a voir avec des machines d'origine. Mais à qui s'adressait on ?