Misez P'tit, Optimisez - N°30 (Moyenne)

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 du membre
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2935
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Re: Misez P'tit, Optimisez - N°30 (Moyenne)

Message par zpalm »

Gilles59 a écrit :çà devrait marcher sur 57/58 ?? - Pas testé :

Code : Tout sélectionner

00 STO 0
01 STO 1
02 Lbl 0
03 R/S
04 /
05 RCL1
06 +
07 Dsz
08 Gto 0
09 R/S
Excellent!! Ca marche sur émulateur TI 57 (voir ICI). Par contre l'affichage est un peu déroutant car il affiche la somme des ni/N pour finir par la moyenne, les résultats intermédiaires ne veulent pas dire grand chose...
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3422
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez P'tit, Optimisez - N°30 (Moyenne)

Message par C.Ret »

Hobiecat a écrit :[...]Sinon, je suis toujours impressionné par la compacité des programmes RPL ( et leur illisibilité :mrgreen: ), sans oublier bien sûr la remarquable qualité des Interventions :
Cette apparente compacité provient du fait que le RPN utilise les même fonctions/instruction pour traiter des objets parfois diffèrents.

Ainsi CNRM est une commande qui fait partie de l'arsenal des matrices (extrait une certaine norme obtenue par colone - il existe une instruction homologue qui extrait la même norme mais obtenue par ligne - je ne sais pas au juste à quoi sert cette norme - mais il doit y avoir une raison pour que cette fonction/instruction figure dans l'arsenal natif des RPL).

Ce que je sais par contre c'est que lorsque l'on applique cette fonction à un vecteur (ligne) ne contenant que des nombe positif, on obtient leur somme et l'homologue donne le nombre max (en valeur absolue).

Donc l'apparente simplicité du code provient d'un effet de bord (effet de bord d'une norme calculée sur une matrice particulière constitiuée d'une seule ligne d'élément positifs ou nuls).

Donc, CNRM est le ΣLIST du pauvre HP-28S. MAis en toute rigueur, cela ne marche pas (il suffit d'un nombre négatif).

La réelle compacité vient du fait qu'un seul mot traite une matrice. Il n'y a donc pas dans le programme en RPL de compteur, de boucle, etc. C'est la structure de donnée (une liste pour l'excellent exemple de Gilles59 ou mon vecteur ) qui suffit à "structurer" le programme.

LE RPN a l'inconvénient de devoir explicitement coder la boucle de calcul, comme sur les TI ou CASIO FX. Le BASIC fait de même, le code est basé sur une boucle FOR/TO/STEP/NEXT

Le RPL a aussi de telles structures de programmation (START/NEXT , FOR/NEXT/STEP, DO/UNTIL, etc) mais il peut être plus simple d'utiliser une bonne structure de données et des commande qui s'applique à de tels objets pour s'en passer efficacement.

C'est ce que fait de façon très spectaculaire Gilles dans la majorité de ses codes.

Si l'on devait transcrire mot à mot le code de ce MPO, le RPL "explicite" serait quelque chose comme :

Code : Tout sélectionner

« -> s
  « 0
    1 ROT START
       HALT
       +
    NEXT
    s /
  »
»
'MOY' STO
On entre le nombre de nombre, on lance le programme MOY et à chaque arrêt, on entre le nombre et on fait [ f ][CONT]
A la fin la moyenne s'affiche.

Ce code ressemble bien plus aux codes des autres pockets, mais n'est pas adapté à un MPO !
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.
Avatar du membre
bernouilli92
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5269
Enregistré le : 21 nov. 2012 13:03
Localisation : Ile de France

Re: Misez P'tit, Optimisez - N°30 (Moyenne)

Message par bernouilli92 »

Petite correction à apporter au code de C.Ret : l'utilisation de -> s enleve le nombre de la pile, il n'est donc plus là pour le ROT. Il faudrait remplacer le ROT par s
Le même code qui n'utilise pas de variable locale serait :

Code : Tout sélectionner

« 
  DUP 0 1 ROT 
    START
       HALT
       +
    NEXT
    SWAP /
»
'MOY' STO
HP, Casio, Sharp, Psion, quelques TI et divers autres
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3422
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez P'tit, Optimisez - N°30 (Moyenne)

Message par C.Ret »

Oui, très juste m'a emmélé dans les coller-copier !

Code : Tout sélectionner

« -> s
  « 0
    1 s START
       HALT
       +
    NEXT
    s /
  »
»
'MOY' STO

Désolé !
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.
Gilles59
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1602
Enregistré le : 27 oct. 2010 20:46

Re: Misez P'tit, Optimisez - N°30 (Moyenne)

Message par Gilles59 »

zpalm a écrit :
Gilles59 a écrit :çà devrait marcher sur 57/58 ?? - Pas testé :

Code : Tout sélectionner

00 STO 0
01 STO 1
02 Lbl 0
03 R/S
04 /
05 RCL1
06 +
07 Dsz
08 Gto 0
09 R/S
Excellent!! Ca marche sur émulateur TI 57 (voir ICI). Par contre l'affichage est un peu déroutant car il affiche la somme des ni/N pour finir par la moyenne, les résultats intermédiaires ne veulent pas dire grand chose...
C'est comme la version 602P. Il n'y a pas d'erreur ni besoin d'initialisation mais effectivement les affichages intermédiaires sont déroutants ;)
La 602 est plus proche de la TI57 que des 58/59 par certains aspects

Merci pour le lien émulateur... Il y a un excellent émulateur TI57 sur HP48/49/50. Je l'ai utilisé quelques fois et ca marche nickel par contre je ne l'utilise pas assez pour me repérer dans les touches. Je n'ai pas lien sous la main mais cette émulateur utilise la ROM de la TI57. La ROM a été décryptée via microscope ou un truc de fou du même genre :O

http://www.hpmuseum.org/cgi-sys/cgiwrap ... read=85688
Casio FX-502P /602P / 603P / FX180P+ / FX4000P / TI57 / TI66 / TI74 Basicalc / TI95 Procalc / HP12C / HP15C LE / DM41L / HP 30B / HP39GII / HP 48SX USA / 49G / 49g+ / 50G / 50G NewRPL / HP Prime / Oric 1 / Amstrad CPC 6128+ CM14 et MM12 / Alice 32
Gilles59
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1602
Enregistré le : 27 oct. 2010 20:46

Re: Misez P'tit, Optimisez - N°30 (Moyenne)

Message par Gilles59 »

C.Ret a écrit :
Sinon, le code pour HP-50g est irrecevable car il utilise un des fonctions statitstique de la HP-50G à savoir la fonction ΣLIST.
C'est bien marqué dans l'énoncé de ce MPO: sans utiliser les fonctions Σ !!
Hummm c'est discutable car ΣLIST n'est pas concue comme une fonction statistique et n'utilise aucune mémoire stat. Elle fait simplement la somme des éléments d'une liste.

Par exemple

Code : Tout sélectionner

 { "B" "O" "N" "J" "O" "U" "R"}  ΣLIST 

-> "BONJOUR"

{ 1 2 3 }  ΣLIST

-> 6

{'a' 'b' 'c'}  ΣLIST

-> 'a+b+c'
 
Casio FX-502P /602P / 603P / FX180P+ / FX4000P / TI57 / TI66 / TI74 Basicalc / TI95 Procalc / HP12C / HP15C LE / DM41L / HP 30B / HP39GII / HP 48SX USA / 49G / 49g+ / 50G / 50G NewRPL / HP Prime / Oric 1 / Amstrad CPC 6128+ CM14 et MM12 / Alice 32
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3422
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez P'tit, Optimisez - N°30 (Moyenne)

Message par C.Ret »

Oui, oui en fait ta solution est excellente. Et effectivement ΣLIST est tout à fait possible, ce n'est pas une fonction statistique.

C'est même une des fonctions qui manquent cruellement sur le RPL primitif des HP-28C/S.


C'est fou, c'est en relisant les derniers post, que je viens de me rendre compte que j'interprétais mal le code pour Fx-602P.

Effectivemetn, il n'y a pas besoin d'initialiser l'addition des termes puisque l'opérateur (+) est après la sasie du nombre.

On ne fait pas 0+x+...+x, mais bel est bien x+x+...+x+. Et on s'arrête là, la calculette affiche la somme à la fin du programme !

Code : Tout sélectionner

                      Display:         R00:      R01:

P0:                   > N              
  Min00                 N                 N         N
  Min01                 N                          

  LBL0                  moy               n         N
    HLT               > x(i)
    /                   x(i)/
   MR01                 x(i)/N
   +                    moy
   DSZ                                  n-1         N
     GOTO0
                        moy               0         N
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.
Avatar du membre
bkg2018
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 359
Enregistré le : 30 mai 2012 16:57

Re: Misez P'tit, Optimisez - N°30 (Moyenne)

Message par bkg2018 »

zpalm a écrit :
Gilles59 a écrit :çà devrait marcher sur 57/58 ?? - Pas testé :

Code : Tout sélectionner

00 STO 0
01 STO 1
02 Lbl 0
03 R/S
04 /
05 RCL1
06 +
07 Dsz
08 Gto 0
09 R/S
Excellent!! Ca marche sur émulateur TI 57 (voir ICI). Par contre l'affichage est un peu déroutant car il affiche la somme des ni/N pour finir par la moyenne, les résultats intermédiaires ne veulent pas dire grand chose...
C'est une bonne idée de faire la division au fur et à mesure, mais il faudrait tout de même un = avant le R/S final car en l'état, le programme laisse un opérateur + en l'air, prêt à surprendre l'utilisateur.
HP : 67 25 34C 15C 41CX 48S* 48SX 48GX 35S* WP34S* 39gII*
TI : SR52 57 58C* 59 Programmer 66 74S 65
Sharp : PC 1245 1251* 1262 G-850S G-850V
Canon : X-07* F-800P*
Casio : CG-8 SF5300E*
*: persos d'époque
Avatar du membre
bkg2018
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 359
Enregistré le : 30 mai 2012 16:57

Re: Misez P'tit, Optimisez - N°30 (Moyenne)

Message par bkg2018 »

Hobiecat a écrit :
C.Ret a écrit :Concernant les versions TI57/58/59, je suis bien heureux d'en voir de plus en plus illustrer les possibilité de ces modèles dans nos MPO
+1, d'autant que l'origine des MPO était l'optimisation de la "pénurie" d'octets, donc plus à réserver aux TI57/58/59, Casio FX-602P et autres HP-41C ni V ni X.
Sinon, je suis toujours impressionné par la compacité des programmes RPL ( et leur illisibilité :mrgreen: ), sans oublier bien sûr la remarquable qualité des Interventions : il y aurait sûrement des leçons à donner aux programmeurs des grandes sociétés de software qui ont besoin de Mo, voir de Go pour faire tourner des programmes somme toute assez basiques...
C'est encore pire, les MPO ne riment à rien sur une TI57 car je n'ai jamais vu personne stocker plus d'un seul programme, donc à partir du moment où "çà tient", on n'a plus beaucoup d'intérêt à dépenser davantage de temps pour réduire le nombre de registres utilisés ou de pas consommés.

Ce qui me surprend un peu c'est l'absence de version HP25 ou 33, parce que ce sont quasiment les mêmes contraintes que la TI57, avec les avantages du RPN mais quelques inconvénients sur le plan programmatique.

Quant à la surenchère actuelle de consommation d'octets et de cycles CPU, je préfère ne pas y penser, çà m'énerve déjà trop dans mon boulot. Je préfère me dire qu'on a de bien belles choses sur ces petites machines quand les programmeurs bossent pour le plaisir et non leur salaire.
HP : 67 25 34C 15C 41CX 48S* 48SX 48GX 35S* WP34S* 39gII*
TI : SR52 57 58C* 59 Programmer 66 74S 65
Sharp : PC 1245 1251* 1262 G-850S G-850V
Canon : X-07* F-800P*
Casio : CG-8 SF5300E*
*: persos d'époque
Gilles59
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1602
Enregistré le : 27 oct. 2010 20:46

Re: Misez P'tit, Optimisez - N°30 (Moyenne)

Message par Gilles59 »

bkg2018 a écrit :
C'est encore pire, les MPO ne riment à rien sur une TI57 car je n'ai jamais vu personne stocker plus d'un seul programme, donc à partir du moment où "çà tient", on n'a plus beaucoup d'intérêt à dépenser davantage de temps pour réduire le nombre de registres utilisés ou de pas consommés.
Bah,et l'amour du sport alors ;) ? ca ne parait pas moins inutile que de courrir le 100m en 9"62 plutôt qu'en 9"63 (et même en 17",le principal est d'arriver non?) . Bon mais la TI57 c'est un peu moins médiatique:D

Ce que j'aime bien dans les vieilles machines et les calculatrices en particulier qui en plus tiennent dans la poche, c'est qu'il est possible de _tout_ connaitre... La WP34S est exemplaire la dessus. Concue par quelques passionnés avec un réflexion poussée sur l'optimisation....
Casio FX-502P /602P / 603P / FX180P+ / FX4000P / TI57 / TI66 / TI74 Basicalc / TI95 Procalc / HP12C / HP15C LE / DM41L / HP 30B / HP39GII / HP 48SX USA / 49G / 49g+ / 50G / 50G NewRPL / HP Prime / Oric 1 / Amstrad CPC 6128+ CM14 et MM12 / Alice 32
Avatar du membre
Hobiecat
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3644
Enregistré le : 06 sept. 2011 14:57
Localisation : Normandie

Re: Misez P'tit, Optimisez - N°30 (Moyenne)

Message par Hobiecat »

bkg2018 a écrit :C'est encore pire, les MPO ne riment à rien sur une TI57 car je n'ai jamais vu personne stocker plus d'un seul programme, donc à partir du moment où "çà tient", on n'a plus beaucoup d'intérêt à dépenser davantage de temps pour réduire le nombre de registres utilisés ou de pas consommés.
Les MPO étaient il est vrai plutôt destinés aux machines à mémoire constante, où l'optimisation des pas présentait de l'intérêt, pour mettre un maximum de programmes en mémoire.
bkg2018 a écrit :Ce qui me surprend un peu c'est l'absence de version HP25 ou 33, parce que ce sont quasiment les mêmes contraintes que la TI57, avec les avantages du RPN mais quelques inconvénients sur le plan programmatique.
Cela s'explique je pense par la faible diffusion de ces machines en France : il me semble que la majorité des participants aux MPO le font sur la machine qu'ils connaissent le plus, qui est bien souvent leur machine "d'étudiant". Les finances d'étudiant étant ce qu'elles sont, les TI étaient plus répandues que les HP (et c'est toujours vrai de nos jours, même si HP a fait des efforts de ce côté)
Avatar du membre
bkg2018
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 359
Enregistré le : 30 mai 2012 16:57

Re: Misez P'tit, Optimisez - N°30 (Moyenne)

Message par bkg2018 »

Hobiecat a écrit :...
bkg2018 a écrit :Ce qui me surprend un peu c'est l'absence de version HP25 ou 33, parce que ce sont quasiment les mêmes contraintes que la TI57, avec les avantages du RPN mais quelques inconvénients sur le plan programmatique.
Cela s'explique je pense par la faible diffusion de ces machines en France : il me semble que la majorité des participants aux MPO le font sur la machine qu'ils connaissent le plus, qui est bien souvent leur machine "d'étudiant". Les finances d'étudiant étant ce qu'elles sont, les TI étaient plus répandues que les HP (et c'est toujours vrai de nos jours, même si HP a fait des efforts de ce côté)
En effet c'est mon cas, je fais les MPO essentiellement sur TI57 et 58 parce que je les connais bien (c'est même surprenant à quel point je m'en souviens !). Pour le Canon X-07 et le PC-1251, c'est rarement un défi, même si on peut jouer au "moins d'octets possibles" car les BASIC laissent pas mal de marge dans ce domaine.

Pour les HP25 et 33, leur prix élevé et l'existence de concurrents féroces a freiné leur diffusion en france, mais je pensais qu'on trouverait quand même quelques anciens possesseurs de ces machines parmi les membres du forum ...
HP : 67 25 34C 15C 41CX 48S* 48SX 48GX 35S* WP34S* 39gII*
TI : SR52 57 58C* 59 Programmer 66 74S 65
Sharp : PC 1245 1251* 1262 G-850S G-850V
Canon : X-07* F-800P*
Casio : CG-8 SF5300E*
*: persos d'époque
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3422
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez P'tit, Optimisez - N°30 (Moyenne)

Message par C.Ret »

[ 1 ][ + ]

C'est vrai, comme la majorité d'entre-nous, je commence les MPO avec les machines qui sont sur l'étagère à coté de mon bureau. J'hésite toujours à poster un code sur une machine que je n'ai pas (cf. le code que j'ai tenté pour la fx-602p).

Ne pas pouvoir vérifier son code sur un pocket (ou à défaut un émulateur/simulateur correct) est assez risqué.

J'ai depuis peu une tablette Androïde, je vais y installer un simulateur(/émulateur ?) pour HP25C, HP-67 !

Code : Tout sélectionner

HP-25(C)
Program:               t:    z:    y:    x:       R0:
                    
00                                        N
01        00   0                    N     0         0
02     23 00   STO 0                N     0
                    
03        01   1              N   n-1     1
04        51   +                    N     n
05        74   R/S            N     n     x
06  23 51 00   STO + 0                            sum
07        22   Rdn                  N     n
08     14 61   x=/=y ?                
09     13 03   GTO 03               
                    
10     24 00   RCL 0          N     N   sum     
11        21   x<>y           N     sum   N            
12        11   ÷                      sum/N

                                        moy

Utilisation :          ┌────────────┐    
4                      │ 4          │   Sasir nombre de nombres
[ f ][ PRGM ]          │ 4.0000     │   
[R/S]                  │ 1.0000     │   Saisir premier nombre
741                    │ 741        │
[R/S]                  │ 2.0000     │   Saisir second nombre
852                    │ 852        │ 
[R/S]                  │ 3.0000     │   Saisir troisième nombre
258                    │ 258        │  
[R/S]                  │ 4.0000     │   Sasir quatrième nombre
963                    │ 963        │
[R/S]                  │ 703.5000   │   Affiche la moyenne
                       └────────────┘
Donc, 12 pas et un registre (R0). C'est evidemment perfectible, mais pas mal au vu des fonctions disponibles sur cette superbe machine (pas de R_up_ ! :-o )
Modifié en dernier par C.Ret le 08 janv. 2013 10:31, 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.
Avatar du membre
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2935
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Re: Misez P'tit, Optimisez - N°30 (Moyenne)

Message par zpalm »

Hobiecat a écrit :Cela s'explique je pense par la faible diffusion de ces machines en France : il me semble que la majorité des participants aux MPO le font sur la machine qu'ils connaissent le plus, qui est bien souvent leur machine "d'étudiant".
Exact! Pour moi c'est la HP 41C! (achetée lors de mon entrée en école d'ingé)
Avatar du membre
Marge
Fonctionne à 14400 bauds
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°30 (Moyenne)

Message par Marge »

bkg2018 a écrit :Pour les HP25 et 33, leur prix élevé et l'existence de concurrents féroces a freiné leur diffusion en france, mais je pensais qu'on trouverait quand même quelques anciens possesseurs de ces machines parmi les membres du forum ...
J'en suis. Cependant mes piètres performances de programmeur n'avantageraient pas vraiment ces machines, d'où mon abstention chronique. Mais je vous suis parfois. :wink:
Répondre

Retourner vers « Tous les Pockets »