Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вопрос про алгоритм. / 5 сообщений из 5, страница 1 из 1
12.02.2019, 13:03
    #39772766
dima_18
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про алгоритм.
Всем добрый день!

Извиняюсь за беспокойство. подскажите, пожалуйста, никак не могу догадаться с решением следующего алгоритма:

Вот привожу его дословно. Задача не ахти я сложная. Итак, я ищу максимум, как Вы видите некоторой функции, которую разбил на две части.
Но проблема и беда тут в том, что максимум тут находится один, а ведь данный алгоритм не предполагает определения второго максимума, равного максимуму первому.
Подскажите, пожалуйста, как мне подправить алгоритм, чтобы учесть этот момент.
Спасибо большое.

Итак, алгоритм внизу:



a = 5.0
h = 1.5708
susp
FOR i=1 TO 60000
p1 = -(SIN(i*h)/i)
p2 = a*(1-COS(i*h))/(i*i)
B(i) = p1+p2
ENDFOR

maxi = -50000
nom = 0
FOR i=1 TO 60000 do
IF B(i)>maxi
maxi = B(i)
nom = i
ENDIF
endfor


a = 5.0
h = 1.5708


FOR i=1 TO 60000
p1 = -(SIN(i*h)/i)
p2 = a*(1-COS(i*h))/(i*i)
B(i) = p1+p2
ENDFOR

maxi = -50000
nom = 0
FOR i=1 TO 60000 do
IF B(i)>maxi
maxi = B(i)
nom = i
ENDIF
endfor
...
Рейтинг: 0 / 0
13.02.2019, 10:11
    #39773189
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про алгоритм.
У вас первый код не отличается от второго ничем. От слова "совсем". И почему его результат должен быть другим?

Вы создаете линейную последовательность B(i). Это линия. Откуда здесь может взяться несколько максимумов? В сплошном списке чисел нет и не может быть двух максимальных значений. Только одно

Максимумы надо искать сразу в первом цикле. Если Вы исходите из предположения, что последовательность непрерывная, то логика должна быть такая

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
a = 5.0
h = 1.5708
isFirst = .t.


FOR i=1 TO 60000
    p1 = -(SIN(i*h)/i)
    p2 = a*(1-COS(i*h))/(i*i)
    B(i) = p1+p2
    IF isFirst
        * Для первого шага цикла ничего не делаем. Надо просто "запомнить" первое значение
        isFirst = .f.
    ELSE
        IF (prev <= B(i))
           * Находимся на отрезке возрастания функции
           * Здесь каждое последующее значение больше предыдущего
            maxi = i
        ELSE
           * Находимся на отрезке убывания функции
           * Если предыдущий отрезок был возрастанием, то сохраняем максимум предыдущего отрезка
           * и сбрасываем значение счетчиков
           IF maxi > 0
               k = k + 1
               maximum(k) = maxi
               maxi = 0
           ENDIF
        ENDIF
    ENDIF

    * Запоминаем текущее значение для сравнения его со следующим шагом цикла
    prev = B(i)

ENDFOR

* Если последний отрезок функции был возрастанием, то следует записать последнее значение
IF maxi > 0
    k = k + 1
    maximum(k) = maxi
ENDIF

* Выводим список найденных максимумов
FOR k=1 TO ALEN(maximum)
    maxi = maximum(k)

    ?maxi
    ?B(maxi)
ENDFOR
...
Рейтинг: 0 / 0
13.02.2019, 10:11
    #39773190
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про алгоритм.
Первым проходом найди максимум (это уже есть как понимаю), вторым проходом все точки равные максимуму.
...
Рейтинг: 0 / 0
13.02.2019, 12:51
    #39773291
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про алгоритм.
Dima TПервым проходом найди максимум (это уже есть как понимаю), вторым проходом все точки равные максимуму.

ТСу надо найти не MAX() - наибольшее значение, а экстремум, что не одно и то же, собственно ВладимирМ решение сформулировал.
...
Рейтинг: 0 / 0
15.02.2019, 08:29
    #39774208
dima_18
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про алгоритм.
Большое спасибо ВладимирМ, Dima T, PaulWist !

За ценную помощь.
Помогло.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вопрос про алгоритм. / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]