Thomas FR69 a écrit :Bravo ! Qui propose une ligne de moins ?

Moi ! mais sur HP-42s ...
Le programme "COMB" utilise plusieurs instructions de manipulation de pile spécifiques à la HP-41 (par rapport aux autres machines RPN):
RCL Y : extension des instructions RCL et STO aux registres de la pile - s'obtient par [RCL] [.] [Y]
X<> Z : extension de X<> à tous les registres y compris ceux de la pile - s'obtient par [XEQ] [ALPHA] [X] [Shift][COS] [Shift][TAN] [ALPHA] [.] [Z]
ST- Y : extension aux registres de la pile de l'arithmétique dans les registres avec STO (+,-,*,/) - s'obtient par [STO] [-] [Y]
Par contre il n'y a pas sur la HP-41 d'opération arithmétique dans les registres associée à RCL. On ne trouve ces opérations que sur la HP-42s, ce qui permet de remplacer les lignes 05 X<>Y et 06 ST- Y par un simple 05 RCL- Y.
Voici donc le programme "COMB" sur HP-42s en 11 lignes:
Code : Tout sélectionner
X Y Z T
---------------------------------------------------------
r n z t
00 { 22-Byte Prgm}
01 LBL "COMB"
02 RCL ST Y n r n z
03 N! n! r n z
04 X<> ST Z n r n! z
05 RCL- ST Y n-r r n! z
06 N! (n-r)! r n! z
07 X<>Y r (n-r)! n! z
08 N! r! (n-r)! n! z
09 * r!(n-r)! n! z z
10 / n!/r!(n-r)! z z z
11 RTN
Si l'on regarde la formule de calcul des combinaisons
n!/r!(n-r)! on voit qu'elle comporte 6 opérations: 3 factorielles, une soustraction, une multiplication et une division. Si l'on ajoute le label de début et le retour de fin cela fait un minimum de 8 lignes de programme. Le programme ci-dessus avec 11 lignes n'ajoute au minimum requis que 3 opérations de manipulation de pile RCL ST Y, X<> ST Z et X<>Y.
Qui fait mieux?
Notes:
sur la 42s les registres de la pile sont précédés de ST pour stack pour les différentier d'une variable qui aurait le même nom.
la 42s offre d'origine les fonctions COMB et PERM dans le menu PROB, le programme ci-dessus est donc superflu sur cette machine.