Найти максимум числового выражения - QBasic

Узнай цену своей работы

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

Задано числовое выражение (sin1 + ... + sin(k)) * (sin(k+1) + ... + sin(n)) в двух скобках проставлены суммы синусов от чисел натурального ряда. Всего чисел 100 и они расположены в порядке возрастания от 1 до 100. Однако сколько этих чисел в каждой скобке неизвестно. может 1, а может 99 Надо вычислить максимум независимо от N. 1 < N <=100 Вопросы 1. Есть ли иное решение? 2. Можно ли улучшить мою программу? 3. Кажется здесь можно использовать рекурсию? например по количеству синусов во второй скобке?
Листинг программы
  1. REM
  2. REM (sin1 + ... + SIN(k)) * (SIN(k+1) + ... + SIN(n))
  3. REM
  4. REM max = 0.9577862
  5. REM
  6. CLS
  7. CONST n = 100
  8. FOR m = 2 TO n
  9. FOR k = 1 TO m - 1
  10. s1 = 0
  11. FOR i = 1 TO k
  12. s1 = s1 + SIN(i)
  13. NEXT
  14. s2 = 0
  15. FOR i = k + 1 TO m
  16. s2 = s2 + SIN(i)
  17. NEXT
  18. IF max < s1 * s2 THEN
  19. max = s1 * s2
  20. END IF
  21. NEXT k, m
  22. PRINT "MAX ="; max
  23. END

Решение задачи: «Найти максимум числового выражения»

textual
Листинг программы
  1. Sub test1()
  2. Dim mx As Double, i As Long, j As Long, s As Double, s1 As Double, s2 As Double, t As Single
  3. t = Timer
  4. mx = Sin(1) * Sin(2)
  5. For i = 1 To 10000
  6.     s1 = s1 + Sin(i)
  7.     s2 = 0
  8.     For j = 1 To i - 1
  9.         s2 = s2 + Sin(j)
  10.         If s2 * (s1 - s2) > mx Then mx = s2 * (s1 - s2)
  11. Next j, i
  12. Debug.Print mx, Timer - t
  13. End Sub

Объяснение кода листинга программы

  1. Создаются переменные: mx, i, j, s, s1, s2, t
  2. Переменной t присваивается значение Timer (время начала выполнения программы)
  3. Переменной mx присваивается значение выражения Sin(1) * Sin(2)
  4. Запускается цикл от 1 до 10000
  5. Внутри цикла переменная s1 суммирует значения функции Sin(i)
  6. Переменная s2 инициализируется как 0
  7. Внутренний цикл от 1 до i-1 выполняет суммирование значений функции Sin(j) и обновляет значение переменной s2
  8. Если произведение s2*(s1-s2) больше текущего максимального значения mx, то обновляется значение mx
  9. По завершению внутреннего цикла, цикл for i продолжается
  10. По завершению цикла for i выводится значение переменной mx и разница между текущим временем и временем начала выполнения программы (t)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы