powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вопрос про алгоритм.
5 сообщений из 5, страница 1 из 1
Вопрос про алгоритм.
    #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
Вопрос про алгоритм.
    #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
Вопрос про алгоритм.
    #39773190
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первым проходом найди максимум (это уже есть как понимаю), вторым проходом все точки равные максимуму.
...
Рейтинг: 0 / 0
Вопрос про алгоритм.
    #39773291
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПервым проходом найди максимум (это уже есть как понимаю), вторым проходом все точки равные максимуму.

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

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


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