Найти максимальное значение функции - QBasic
Формулировка задачи:
Задается функция, определенная на натуральных числах
интервал на котором ищется ее максимальное значение
(1; 1000)
теперь определение самой функции:
(лучше приведу на примере)
дано число 12. значение функции от этого числа
sin1 + sin2 + sin3 + sin4 + sin6 (все числа делители числа 12)
другой пример (число 13)
значение функции: sin1 (всё, других делителей числа 13 нет)
(само число не считается делителем самого себя)
...
Программа посчитала и нашла максимум 6.589797 в точке 832
Вопросы
1. Есть ли иное решение?
2. Что может дать массив?
3. Ваше мнение?
Листинг программы
- REM
- REM MAX = 6.589797
- REM
- REM Imax = 832
- REM
- DECLARE FUNCTION f! (n!)
- CLS
- n = 1000
- FOR i = 1 TO n
- y = f(i)
- IF max < y THEN
- max = y
- im = i
- END IF
- NEXT
- PRINT "MAX ="; max
- PRINT "Imax ="; im
- END
- FUNCTION f (n)
- FOR i = 1 TO n \ 2
- IF n MOD i = 0 THEN
- S = S + SIN(i)
- END IF
- NEXT
- f = S
- END FUNCTION
Решение задачи: «Найти максимальное значение функции»
textual
Листинг программы
- DIM s(1 TO 500) AS DOUBLE, sm AS DOUBLE, mx AS DOUBLE, i AS LONG, j AS LONG, n AS LONG, im AS LONG
- n = 1000
- FOR i = 1 TO n \ 2
- s(i) = SIN(i)
- NEXT i
- FOR i = 1 TO n
- sm = s(1)
- FOR j = 2 TO SQR(i)
- IF i MOD j = 0 THEN
- sm = sm + s(j)
- IF j * j <> i THEN sm = sm + s(i \ j)
- END IF
- NEXT j
- IF sm > mx OR i = 1 THEN mx = sm: im = i
- NEXT i
- PRINT mx, im
Объяснение кода листинга программы
- Объявляются переменные: — s(1 TO 500) AS DOUBLE — массив s с 500 элементами типа double, инициализированный нулями; — sm AS DOUBLE — переменная sm типа double, инициализированная нулём; — mx AS DOUBLE — переменная mx типа double, инициализированная нулём; — i AS LONG — переменная i типа long, инициализированная единицей; — j AS LONG — переменная j типа long, инициализированная единицей; — n AS LONG — переменная n типа long, инициализированная тысячей.
- Вычисляется значение переменной n: n = 1000.
- Заполняется массив s: FOR i%=1 TO n \ 2% s(i%) = SIN(i%). NEXT i%
- Находится максимальное значение среди элементов массива s: FOR i%=1 TO n% sm = s(1)% FOR j%=2 TO SQR(i%) IF i% MOD j% = 0 THEN sm = sm + s(j%) IF j% * j% <> i% THEN sm = sm + s(i% \ j%) END IF NEXT j% IF sm > mx OR i% = 1 THEN mx = sm: im = i% NEXT i%
- Выводятся найденные значения: PRINT mx, im.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д