Вычислить "семиэтажную" дробь - QBasic
Формулировка задачи:
Дано выражение, которое надо вычислить
Это только три "этажа" дроби. А всего 7.
Дробь содержит 127 синусов. От sin1 до sin127 строго по-порядку
подсказка
маленькие дроби имеют вид:
где 1 < n < 64
Программа решает эту задачу. Ответ: 2.778758
Автор просит оценить эту задачу по семибальной шкале
(код, нестандартность, сложность)
Вопросы
Решали ли вы что-либо подобное?
Есть ли рекурсивное решение?
Есть ли иное решение?
Листинг программы
- REM
- REM OTBET: 2.778758
- REM
- CLS
- DIM A(1 TO 127)
- FOR i = 1 TO 127
- A(i) = SIN(i)
- NEXT
- n = 126
- DO
- IF n >= 64 THEN
- m = n / 2
- A(m) = A(m) / (A(n) + A(n + 1))
- n = n - 2
- ELSEIF n >= 32 THEN
- m = n / 2
- A(m) = A(m) / (A(n) + A(n + 1))
- n = n - 2
- ELSEIF n >= 16 THEN
- m = n / 2
- A(m) = A(m) / (A(n) + A(n + 1))
- n = n - 2
- ELSEIF n >= 8 THEN
- m = n / 2
- A(m) = A(m) / (A(n) + A(n + 1))
- n = n - 2
- ELSEIF n >= 4 THEN
- m = n / 2
- A(m) = A(m) / (A(n) + A(n + 1))
- n = n - 2
- ELSEIF n = 2 THEN
- m = n / 2
- A(m) = A(m) / (A(n) + A(n + 1))
- n = n - 2
- END IF
- LOOP UNTIL n = 0
- PRINT A(1)
- END
Решение задачи: «Вычислить "семиэтажную" дробь»
textual
Листинг программы
- DIM i AS LONG, s(1 TO 127) AS DOUBLE
- FOR i = 127 TO 1 STEP -1
- IF i > 63 THEN s(i) = SIN(i) ELSE s(i) = SIN(i) / (s(i * 2) + s(i * 2 + 1))
- NEXT i
- PRINT s(1)
Объяснение кода листинга программы
- Объявляются две переменные: i типа LONG и s типа DOUBLE с размером массива 127.
- Задаётся шаг цикла от 127 до 1 с шагом -1.
- Условие проверяет, что значение переменной i больше 63.
- Значение переменной s при условии от 64 до 127 присваивается SIN(i), иначе s(i) = SIN(i) / (s(i 2) + s(i 2 + 1)).
- После завершения цикла выводится значение переменной s(1).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д