Вычисление суммы необычного ряда - QBasic

Формулировка задачи:

Чтобы понять что нам надо вычислить рассмотрим числовую последовательность 1234, 1243, ... 4321. (Это перестановки чисел 1,2,3,4) С каждой такой перестановкой связана функция. Например 1234 - sin(1sin(2sin(3sin(4x)))) 4321 - sin(4sin(3sin(2sin(1x)))) надеюсь, что понятно Требуется найти "сумму всех перестановок" при x=1
REM OTBET: 0.04440564
 
DECLARE FUNCTION f! (n!, x!)
 
CLS
 
FOR i = 1 TO 4
FOR j = 1 TO 4
   IF j = i THEN 100
   FOR k = 1 TO 4
      IF k = i OR k = j THEN 200
      l = 10 - (i + j + k)
 
      S = S + f(i, f(j, f(k, f(l, 1))))
 
200
   NEXT k
100
NEXT j, i
PRINT "SUMMA ="; S
END
 
FUNCTION f (n, x)
   f = SIN(n * x)
END FUNCTION

Код к задаче: «Вычисление суммы необычного ряда - QBasic»

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

7   голосов, оценка 4.286 из 5


СОХРАНИТЬ ССЫЛКУ
Похожие ответы