pour HP48S(X) seulement :
Code : Tout sélectionner
«
# 1BB02h SYSEVAL
»
Code : Tout sélectionner
000 LBL A
001 1
002 +
003 Г
Modérateur : Politburo
Code : Tout sélectionner
«
# 1BB02h SYSEVAL
»
Code : Tout sélectionner
000 LBL A
001 1
002 +
003 Г
encore un peu plus court, et valable aussi pour les HP-11C et 15Cbernouilli92 a écrit :Encore plus court, bon d'accord c'est un peu de la triche
Et pour wp34s :Code : Tout sélectionner
000 LBL A 001 1 002 + 003 Г
Code : Tout sélectionner
01 LBL A
02 ENTER
03 Py,x
04 RTN
... 10 pas avec RST, sans label et avec 0!=1bkg2018 a écrit :Sur TI57 avec la contrainte 0!=1 et une utilisation sans préstockage dans les registres je n'ai pas grand chose de dément...
00 Sto 0
01 1
02 Sto 1
03 Lbl 0
04 Inv Dsz
05 Gto 1
06 Rcl 0
07 Prd 1
08 Gto 0
09 Lbl 1
10 Rcl 1
11 R/S
On ne peut plus ruser avec RST à cause de l'initialisation de R0 et R1. Et on ne peut pas trop éviter deux labels : un pour boucler, un pour sortir de la boucle.
Code : Tout sélectionner
00 2nd C.t
01 x=t?
02 1
03 STO 0
04 =
05 INV 2nd DSZ (Decrement & Skip if not Zero)
06 INV SBR (RTN)
08 *
08 RCL 0
09 RST (Reset program counter to first step = GTO 00)
J'étais arrivé à la même conclusion.bernouilli92 a écrit :Voici ma version en RPL :Et ma version pour hp41, mais elle ne fonctionne pas pour la valeur 0 (et inférieur) :Code : Tout sélectionner
« 1 OVER 1 - FOR I I * NEXT »
Code : Tout sélectionner
000 LBL FACTO 001 ENTER 002 LBL 00 003 1 004 - 005 x=0? 006 GTO 01 007 * 008 LASTx 009 GTO 00 010 LBL 01 011 +
Code : Tout sélectionner
01 ENTER
02 LBL 0
03 1
04 -
05 x=0
06 GTO 1
07 x
08 Last x
09 GTO 0
10 LBL 1
11 x><y
12 R/S
Très fort, ce qui me donne une idée pour du RPL en deux instructions :zpalm a écrit :encore un peu plus court, et valable aussi pour les HP-11C et 15CDonne bien 0!=1Code : Tout sélectionner
01 LBL A 02 ENTER 03 Py,x 04 RTN
Excellente astuce, je ne sais pas si on peut considérer cela comme pareil qu'utiliser FACT. C'est en tout cas moins limite que l'utilisation de la fonction Gamma.zpalm a écrit :encore un peu plus court, et valable aussi pour les HP-11C et 15Cbernouilli92 a écrit :Encore plus court, bon d'accord c'est un peu de la triche
Et pour wp34s :Code : Tout sélectionner
000 LBL A 001 1 002 + 003 Г
Donne bien 0!=1Code : Tout sélectionner
01 LBL A 02 ENTER 03 Py,x 04 RTN
C'est ce que fait mon code avec SYSEVALC.Ret a écrit :Très fort, ce qui me donne une idée pour du RPL en deux instructions :zpalm a écrit :encore un peu plus court, et valable aussi pour les HP-11C et 15CDonne bien 0!=1Code : Tout sélectionner
01 LBL A 02 ENTER 03 Py,x 04 RTN
« DUP PERM »
Mais c'est un peu de la gruge non ?
autant faire en une seule instruction :
« FACT »
A priori Py,x n'utilise pas la fonction factorielle en interne pour des questions d'overflow (voir par ex. cette discussion sur le sujet). La solution devrait donc être conforme à l'énoncé du MPO par Mr Badaze.C.Ret a écrit :Très fort, ce qui me donne une idée pour du RPL en deux instructions :zpalm a écrit :encore un peu plus court, et valable aussi pour les HP-11C et 15CDonne bien 0!=1Code : Tout sélectionner
01 LBL A 02 ENTER 03 Py,x 04 RTN
« DUP PERM »
Mais c'est un peu de la gruge non ?
autant faire en une seule instruction :
« FACT »
Va falloir faire valider les MPO par un cabinet d'avocats bientôt.zpalm a écrit :A priori Py,x n'utilise pas la fonction factorielle en interne pour des questions d'overflow (voir par ex. cette discussion sur le sujet). La solution devrait donc être conforme à l'énoncé du MPO par Mr Badaze.C.Ret a écrit :Très fort, ce qui me donne une idée pour du RPL en deux instructions :zpalm a écrit :encore un peu plus court, et valable aussi pour les HP-11C et 15CDonne bien 0!=1Code : Tout sélectionner
01 LBL A 02 ENTER 03 Py,x 04 RTN
« DUP PERM »
Mais c'est un peu de la gruge non ?
autant faire en une seule instruction :
« FACT »
Intéressante cette discussion du MOHPC...zpalm a écrit :A priori Py,x n'utilise pas la fonction factorielle en interne pour des questions d'overflow (voir par ex. cette discussion sur le sujet). La solution devrait donc être conforme à l'énoncé du MPO par Mr Badaze.
Oui, mais non... sinon ça prendra 1 mois pour lancer un MPO !badaze a écrit :Va falloir faire valider les MPO par un cabinet d'avocats bientôt.
et en ajoutant juste un petit test au début, on obtient :C.Ret a écrit :Pour les calculettes biologiques :
ouCode : Tout sélectionner
« IF DUP 1 > THEN DUP 1 - F! * END » 'F!' STO
Et pour les machine moins biologiques:Code : Tout sélectionner
« 1 DUP ROT FOR f f * NEXT » 'FCT!' STO
Code : Tout sélectionner
n 001 LBL "FCT 002 1 n 1 003 x<>Y 1 n 004 Lbl 00 prd f 005 ST* Y prd.f f 006 DSE X prd.f f-1 007 GTO 00 n! 0 008 Rdn 009 END n!
Code : Tout sélectionner
1:"F"AREAD N:F=1:FOR I=1 TO N:F=FI:NEXT I:PRINT N,F:END
Si on place le test après le LBL 00 on gagne un pas:babaorhum a écrit :et en ajoutant juste un petit test au début, on obtient :
001 LBL "FCT
002 x=0?
003 1
004 1
005 x<>Y
006 Lbl 00
007 ST* Y
008 DSE X
009 GTO 00
010 Rdn
Et ca marche pour 0! =1
Code : Tout sélectionner
001 LBL "FCT
002 1
003 x<>Y
004 Lbl 00
005 x#0?
006 ST* Y
007 DSE X
008 GTO 00
009 Rdn[
010 END
Code : Tout sélectionner
01 1
02 STO 0
03 +
04 LBL A
05 1
06 -
07 x=0?
08 GTO B
09 STO x 0
10 GTO A
11 LBL B
12 RCL 0