Вычисление суммы необычного ряда - 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
Решение задачи: «Вычисление суммы необычного ряда»
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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д