Найти максимум числового выражения - QBasic
Формулировка задачи:
Задано числовое выражение
(sin1 + ... + sin(k)) * (sin(k+1) + ... + sin(n))
в двух скобках проставлены суммы синусов от чисел
натурального ряда. Всего чисел 100 и они расположены
в порядке возрастания от 1 до 100. Однако сколько этих
чисел в каждой скобке неизвестно. может 1, а может 99
Надо вычислить максимум независимо от N. 1 < N <=100
Вопросы
1. Есть ли иное решение?
2. Можно ли улучшить мою программу?
3. Кажется здесь можно использовать рекурсию?
например по количеству синусов во второй скобке?
Листинг программы
- REM
- REM (sin1 + ... + SIN(k)) * (SIN(k+1) + ... + SIN(n))
- REM
- REM max = 0.9577862
- REM
- CLS
- CONST n = 100
- FOR m = 2 TO n
- FOR k = 1 TO m - 1
- s1 = 0
- FOR i = 1 TO k
- s1 = s1 + SIN(i)
- NEXT
- s2 = 0
- FOR i = k + 1 TO m
- s2 = s2 + SIN(i)
- NEXT
- IF max < s1 * s2 THEN
- max = s1 * s2
- END IF
- NEXT k, m
- PRINT "MAX ="; max
- END
Решение задачи: «Найти максимум числового выражения»
textual
Листинг программы
- Sub test1()
- Dim mx As Double, i As Long, j As Long, s As Double, s1 As Double, s2 As Double, t As Single
- t = Timer
- mx = Sin(1) * Sin(2)
- For i = 1 To 10000
- s1 = s1 + Sin(i)
- s2 = 0
- For j = 1 To i - 1
- s2 = s2 + Sin(j)
- If s2 * (s1 - s2) > mx Then mx = s2 * (s1 - s2)
- Next j, i
- Debug.Print mx, Timer - t
- End Sub
Объяснение кода листинга программы
- Создаются переменные: mx, i, j, s, s1, s2, t
- Переменной t присваивается значение Timer (время начала выполнения программы)
- Переменной mx присваивается значение выражения Sin(1) * Sin(2)
- Запускается цикл от 1 до 10000
- Внутри цикла переменная s1 суммирует значения функции Sin(i)
- Переменная s2 инициализируется как 0
- Внутренний цикл от 1 до i-1 выполняет суммирование значений функции Sin(j) и обновляет значение переменной s2
- Если произведение s2*(s1-s2) больше текущего максимального значения mx, то обновляется значение mx
- По завершению внутреннего цикла, цикл for i продолжается
- По завершению цикла for i выводится значение переменной mx и разница между текущим временем и временем начала выполнения программы (t)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д