Вход для пользователей
Сбор новостей
RSS-материал
ПросмотретьВерсии

Основные формулы комбинаторики в 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 (для сочетаний с повторениями)
Остальные случаи (без повторений) можно рассчитать встроенными функциями калькулятора.

Настройки просмотра комментариев
Выберите нужный метод показа комментариев и нажмите "Сохранить установки".
Короткий вариант Автор: Vlad_AB
Pre Автор: Serguei_Tarassov