Вычисление суммы необычного ряда - QBasic
Формулировка задачи:
Чтобы понять что нам надо вычислить рассмотрим числовую
последовательность 1234, 1243, ... 4321. (Это перестановки чисел 1,2,3,4)
С каждой такой перестановкой связана функция. Например
1234 - sin(1sin(2sin(3sin(4x))))
4321 - sin(4sin(3sin(2sin(1x))))
надеюсь, что понятно
Требуется найти "сумму всех перестановок" при x=1
Решение задачи: «Вычисление суммы необычного ряда»
textual
Листинг программы
DECLARE FUNCTION MyNarayanaNextPerm(n AS LONG) AS LONG
DIM SHARED prmArr(1 TO 11) AS LONG
DIM n AS LONG, i AS LONG, tmr AS SINGLE, x AS DOUBLE, s AS DOUBLE
FOR n = 1 TO 11
FOR i = 1 TO n: prmArr(i) = i: NEXT i
tmr = TIMER
s = 0
DO
x = 1
FOR i = n TO 1 STEP -1
x = SIN(x * prmArr(i))
NEXT i
s = s + x
LOOP WHILE MyNarayanaNextPerm(n)
PRINT "s(" + LTRIM$(STR$(n)) + ") ="; s, TIMER - tmr
NEXT n
'Sleep
FUNCTION MyNarayanaNextPerm(n AS LONG) AS LONG
DIM i AS LONG, k AS LONG, t AS LONG, tmp AS LONG
FOR k = n - 1 TO 1 STEP -1
IF prmArr(k) < prmArr(k + 1) THEN EXIT FOR
NEXT k
IF k THEN
t = n
WHILE t > k AND prmArr(k) >= prmArr(t)
t = t - 1
WEND
tmp = prmArr(k): prmArr(k) = prmArr(t): prmArr(t) = tmp
t = n
FOR i = k + 1 TO (n + k) \ 2
tmp = prmArr(i): prmArr(i) = prmArr(t): prmArr(t) = tmp
t = t - 1
NEXT i
MyNarayanaNextPerm = i
END IF
END FUNCTION