Основные формулы комбинаторики в HP-50G
В этой программе можно рассчитать количества основных комбинаторных соединений элементов (с повторениями и без них).
Достоинством программы является дружественный интерфейс, т.е. перед запуском программы ничего не нужно вспоминать (как оно работает), в стек ничего не нужно сбрасывать: запустил программу, выбрал нужные пункты, ввел данные, прочитал ответ.
<<
"SELECT TYPE:"
{ { "FACTORIAL" 1 } { "PERMUTATION" 2 } { "COMBINATION" 3 } } 1 CHOOSE
IF
THEN 'W' STO
ELSE "ERROR OF INPUT" MSGBOX KILL
END
"REPETITION:"
{ { "OFF" 0 } { "ON" 1 } } 1 CHOOSE
IF
THEN "ERROR OF INPUT" MSGBOX KILL
END
CASE
'W==1'
THEN
IF 'R==0'
THEN "ENTER DATA:"
{ { "N= " "NUMBER OF ELEMENTS" 0 } } { } { 0 } { 0 } INFORM
IF
THEN OBJ-> DROP R->I 'N' STO
ELSE "ERROR OF INPUT" MSGBOX KILL
END
CLLCD N -> STR "!=" N ! ->STR + + MSGBOX
ELSE
"ENTER { ... } DATA: "
{ { "LIST:" "NUMBERS OF ELEMENTS" 5 } } { } { 0 } { 0 } INFORM
IF
THEN OBJ-> DROP 'N' STO
ELSE "ERROR OF INPUT" MSGBOX KILL
END
CLLCD "P" N ->STR "=" N SigmaLIST ! N ! PiLIST / ->STR + + + MSGBOX
END
END
'W==2'
THEN
IF 'R==0'
THEN "ENTER DATA:"
{ { "N= " "TOTAL NUMBER OF ELEMENTS" 0 }
{ "K= " PARTIAL NUMBER OF ELEMENTS" 0 } } { } { 0 0 } { 0 0 } INFORM
IF
THEN OBJ-> DROP R->I 'K' STO R->I 'N' STO
ELSE "ERROR OF INPUT" MSGBOX KILL
END
CLLCD "A(" N -> STR "," K ->STR ")=" N ! N K - ! / ->STR + + + + + MSGBOX
ELSE
"ENTER { ... } DATA: "
{ { "N= " "TOTAL NUMBER OF ELEMENTS" 0 }
{ "K= " PARTIAL NUMBER OF ELEMENTS" 0 } } { } { 0 0 } { 0 0 } INFORM
IF
THEN OBJ-> DROP R->I 'K' STO R->I 'N' STO
ELSE "ERROR OF INPUT" MSGBOX KILL
END
CLLCD "A^(" N -> STR "," K ->STR ")=" N K ^ ->STR + + + + + MSGBOX
END
END
'W==3'
THEN
IF 'R==0'
THEN "ENTER DATA:"
{ { "N= " "TOTAL NUMBER OF ELEMENTS" 0 }
{ "K= " PARTIAL NUMBER OF ELEMENTS" 0 } } { } { 0 0 } { 0 0 } INFORM
IF
THEN OBJ-> DROP R->I 'K' STO R->I 'N' STO
ELSE "ERROR OF INPUT" MSGBOX KILL
END
CLLCD "C(" N -> STR "," K ->STR ")=" N ! K ! N K - ! * / ->STR + + + + + MSGBOX
ELSE
"ENTER { ... } DATA: "
{ { "N= " "TOTAL NUMBER OF ELEMENTS" 0 }
{ "K= " PARTIAL NUMBER OF ELEMENTS" 0 } } { } { 0 0 } { 0 0 } INFORM
IF
THEN OBJ-> DROP R->I 'K' STO R->I 'N' STO
ELSE "ERROR OF INPUT" MSGBOX KILL
END
CLLCD "C^(" N -> STR "," K ->STR ")=" N K + 1 - ! N 1 - ! K ! * / ->STR + + + + + MSGBOX
END
END
END
{ W R N K } PURGE
>>
Программа содержит повторяющиеся модули. Попробуйте ее сократить.
Если же требуется использовать функции вычисления перестановок, размещений и сочетаний (с повторениями и без них), то можно определить следующие функции:
<< -> N 'N SigmaLIST ! N ! PiLIST /'>> 'RFACT' STO EVAL(для перестановок с повторениями)
<< -> N M 'N K ^'>> 'RPERM' STO EVAL(для размещений с повторениями)
<< -> N M 'N K + 1 - ! N 1 - ! K ! * /'>> 'RCOMB' STO EVAL (для сочетаний с повторениями)
Остальные случаи (без повторений) можно рассчитать встроенными функциями калькулятора.