Вычислить 20 членов последовательности - QBasic
Формулировка задачи:
Задана рекуррентная последовательность соотношениями
f(n) = f(n - 1) + b(n - 1)
b(n) = f(n - 1) * b(n - 1) MOD 100 + n
f(1) = b(1) = 1
Надо вычислить 20 членов f(n) (косвенная рекурсия)
Листинг программы
- REM
- REM f(20) = 1034
- REM
- DECLARE FUNCTION b! (n!)
- DECLARE FUNCTION f! (n!)
- CLS
- FOR i = 1 TO 20
- PRINT f(i)
- NEXT
- END
- FUNCTION b (n)
- IF n = 1 THEN
- b = 1
- ELSE
- b = f(n - 1) * b(n - 1) MOD 100 + n
- END IF
- END FUNCTION
- FUNCTION f (n)
- IF n = 1 THEN
- f = 1
- ELSE
- f = f(n - 1) + b(n - 1)
- END IF
- END FUNCTION
Решение задачи: «Вычислить 20 членов последовательности»
textual
Листинг программы
- DECLARE FUNCTION b! (n!)
- DECLARE FUNCTION f! (n!)
- CONST Count = 50
- DIM SHARED arr_b (Count) AS INTEGER
- DIM SHARED arr_f (Count) AS INTEGER
- CLS
- FOR i = 1 TO Count
- PRINT f(i)
- NEXT
- END
- FUNCTION b (n)
- IF arr_b (n) > 0 THEN
- b = arr_b (n)
- ELSE
- IF n = 1 THEN
- arr_b (n) = 1
- ELSE
- arr_b (n) = f(n - 1) * b(n - 1) MOD 100 + n
- END IF
- b = arr_b (n)
- END IF
- END FUNCTION
- FUNCTION f (n)
- IF arr_f (n) > 0 THEN
- f = arr_f (n)
- ELSE
- IF n = 1 THEN
- arr_f(n) = 1
- ELSE
- arr_f (n) = f(n - 1) + b(n - 1)
- END IF
- f = arr_f (n)
- END IF
- END FUNCTION
Объяснение кода листинга программы
В этом коде решается задача вычисления 20 членов последовательности с помощью функций b(n) и f(n). Список переменных и их значений:
- DECLARE FUNCTION b(n) - объявление функции b, которая принимает один аргумент n.
- DECLARE FUNCTION f(n) - объявление функции f, которая принимает один аргумент n.
- CONST Count = 50 - определение константы Count, которая равна 50.
- DIM SHARED arr_b(Count) AS INTEGER - определение массива arr_b размером Count, который будет использоваться как общий для всех функций.
- DIM SHARED arr_f(Count) AS INTEGER - определение массива arr_f размером Count, который будет использоваться как общий для всех функций.
- CLS - очистка экрана перед выводом результатов.
- FOR i%=1 TO Count - начало цикла, который будет выполняться от 1 до Count.
- PRINT f(i%) - вывод значения функции f на экран.
- NEXT - переход к следующей итерации цикла.
- END - конец цикла.
- FUNCTION b(n) - определение функции b.
- IF arr_b(n) > 0 THEN - проверка, есть ли значение в массиве arr_b.
- b = arr_b(n) - присваивание значения из массива arr_b переменной b.
- ELSE - если значение в массиве arr_b отсутствует.
- IF n = 1 THEN - проверка, является ли n равным 1.
- arr_b(n) = 1 - присваивание значения 1 массиву arr_b.
- ELSE - если n не равно 1.
- arr_b(n) = f(n-1) * b(n-1) MOD 100 + n - присваивание значения функции f, умноженного на значение функции b, массиву arr_b.
- END IF - закрытие блока проверки.
- b = arr_b(n) - присваивание значения массива arr_b переменной b.
- END IF - закрытие блока проверки.
- FUNCTION f(n) - определение функции f.
- IF arr_f(n) > 0 THEN - проверка, есть ли значение в массиве arr_f.
- f = arr_f(n) - присваивание значения из массива arr_f переменной f.
- ELSE - если значение в массиве arr_f отсутствует.
- IF n = 1 THEN - проверка, является ли n равным 1.
- arr_f(n) = 1 - присваивание значения 1 массиву arr_f.
- ELSE - если n не равно 1.
- arr_f(n) = f(n-1) + b(n-1) - присваивание значения функции f, плюс значение функции b, массиву arr_f.
- END IF - закрытие блока проверки.
- f = arr_f(n) - присваивание значения массива arr_f переменной f.
- END IF - закрытие блока проверки. В результате выполнения этого кода на экран будет выведено 20 членов последовательности, используя функции b и f.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д