Автор |
Сообщение |
Krechetov
Зарегистрирован: 05.08.2009
Сообщения: 76
|
Такой вопрсо к знающим товарищам.
Есть такой цикл:
while(t<100)
{
K=...;
t=t+1;
}
нужно с помощью другого цикла высчитать наибольшее К по этому циклу для 100 значений.
попробовал так:
while(D<100)
{
F=K;
while(t<100)
{
K=...;
t=t+1;
}
PT=iif(k>f,k,pt);
d=d+1;
}
Так не работает... перепробовал разные процедуры, функции и т.д. но при вложенности всегда выдаёт что f=k... Где ошибка ? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Код: |
K = 0;
K1 = 0; // Предыдущее знчение K
K2 = 0; // Наибольшее значение K
while(D < 100)
{
K1 = K;
K = ...;
if(K1 > K)
K2 = K1;
else
K2 = K;
D++;
}
// K2 наибольшее значение K
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Krechetov
Зарегистрирован: 05.08.2009
Сообщения: 76
|
000 писал(а): |
Код: |
K = 0;
K1 = 0; // Предыдущее знчение K
K2 = 0; // Наибольшее значение K
while(D < 100)
{
K1 = K;
K = ...;
if(K1 > K)
K2 = K1;
else
K2 = K;
D++;
}
// K2 наибольшее значение K
|
|
Ну да.. Я такой вариант и описал выше... Проблема в том что К получается с помощью цикла.... Так что во первых так как это элемент array невозможно использовать оператор if... А во вторых вложенные циклы не могу понять как работают....
Пример более подробный приведу:
while(D<100)
{
F=K;
while(t<100)
{
K=k+ma(c,t)-ma(c,d);
t=t+1;
}
PT=iif(k>f,k,pt);
d=d+1;
}
Т.е. надо получить среднюю разность которой с сотней других является наибольшей.
Первый цикл находит разность 1 конкретной средней со всеми остальными он вложенный. А больший цикл ищет какая из них больше....
Как это реализовать ? Дело в том что в описанном мной примере и приведённом вами k1 всегда получается равным k.... Вот так почеум то вложенные циклы работают в итоге наибольшее не находится |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Я никак не пому точно что надо.
Если надо максимальную разницу между двумя мувингами то так
Код: |
D = 0;
t = 0;
K = 0;
K1 = 0;
while(D < 100)
{
while(t < 100)
{
K = abs(MA(C, t) - MA(C, d));
K1 = Max(K, K1);
t++;
}
d++;
}
|
K1 - максимальная разница. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Krechetov
Зарегистрирован: 05.08.2009
Сообщения: 76
|
000 писал(а): |
Я никак не пому точно что надо.
Если надо максимальную разницу между двумя мувингами то так
Код: |
D = 0;
t = 0;
K = 0;
K1 = 0;
while(D < 100)
{
while(t < 100)
{
K = abs(MA(C, t) - MA(C, d));
K1 = Max(K, K1);
t++;
}
d++;
}
|
K1 - максимальная разница. |
Там не просто максимальная разница а максимальная сумма разниц...
Т.е. добавляем в ваш пример k2=k2+k; // сумма разниц средних
Получаем:
D = 1;
t = 1;
K = 0;
K1 = 0;
k2=0;
while(D < 100)
{
while(t < 100)
{
K = abs(MA(C, t) - MA(C, d));
k2=k2+k;
K1 = Max(K2, K1);
t++;
}
d++;
}
И в данном примере почему то получается, что k2 всегда равен k1....
Т.е. наибольшая сумма не находится |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Кхм. Там не правильно было. Правильно так
Код: |
D = 0;
t = 0;
K = 0;
K1 = 0;
while(D < 100)
{
while(t < 100)
{
K = Highest(abs(MA(C, t) - MA(C, d)));
K1 = Max(K, K1);
t++;
}
d++;
}
|
Цитата: |
Там не просто максимальная разница а максимальная сумма разниц...
|
Наверное сумма максимальных разниц?
Код: |
D = 0;
t = 0;
K = 0;
K1 = 0;
K2 = 0;
while(D < 100)
{
K1 = 0;
while(t < 100)
{
K = Highest(abs(MA(C, t) - MA(C, d)));
K1 = Max(K, K1);
t++;
}
K2 = K2 + K1;
d++;
}
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Krechetov
Зарегистрирован: 05.08.2009
Сообщения: 76
|
000 писал(а): |
Наверное сумма максимальных разниц?
|
Нет нужна именно максимальная сумма разниц....
В первом цикле считается сумма разниц для конкрентной средней. во втором перебираются эти конкреитные среднии и высчитывается максимальная сумма.
Переводя на ваш пример:
D = 1;
t = 1;
K = 0;
K1 = 0;
K2 = 0;
while(D < 100)
{
K1 = 0;
while(t < 100)
{
K = abs(MA(C, t) - MA(C, d));
K1 = k+k1; // - это сумма разностей.
t++;
}
K2 = Max(K2, K1); // - вот тут надо определить максимальную сумму.
d++;
Вот так оно и не работает. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Вообще не понял.
Цитата: |
Нет нужна именно максимальная сумма разниц....
|
Сумма разниц только одна. Как она может быть максимальной или минимальной. ??? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Krechetov
Зарегистрирован: 05.08.2009
Сообщения: 76
|
000 писал(а): |
Вообще не понял.
Цитата: |
Нет нужна именно максимальная сумма разниц....
|
Сумма разниц только одна. Как она может быть максимальной или минимальной. ??? |
Ну так есть 100 средних... находим сумму разниц первой средней с остальными... Потом второй средней с остальными.... получается 100 сумм разницы... Для этого и нужно 2 цикла....
А в итоге нужно чтоб была максимальная сумма разниц. т.е. найти одну искомую среднюю. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Тогда запоминаем все суммы (например в массив) и потом находим наибольшую.
Код: |
D = 0;
t = 0;
K = 0;
K1 = 0;
K2 = 0;
while(D < 100)
{
K1 = 0;
while(t < 100)
{
K = LastValue(Highest(abs(MA(C, t) - MA(C, d))));
K1[D] = LastValue(Max(K, K1));
t++;
}
d++;
}
K2 = LastValue(Highest(K1));
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Krechetov
Зарегистрирован: 05.08.2009
Сообщения: 76
|
000 писал(а): |
Тогда запоминаем все суммы (например в массив) и потом находим наибольшую.
Код: |
D = 0;
t = 0;
K = 0;
K1 = 0;
K2 = 0;
while(D < 100)
{
K1 = 0;
while(t < 100)
{
K = LastValue(Highest(abs(MA(C, t) - MA(C, d))));
K1[D] = LastValue(Max(K, K1));
t++;
}
d++;
}
K2 = LastValue(Highest(K1));
|
|
посмотрел данный вариант в нём k2 выводится как 0 ксегда... насчёт массива попробую прикрутить, может получится |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ааа . Ну конечно. стартовые d и t равны 0 а МА с периодом 0 не бывает....
Код: |
D = 1;
t = 1;
K = 0;
K1 = 0;
K2 = 0;
while(d < 10)
{
while(t < 10)
{
K = LastValue(Highest(abs(MA(C, t) - MA(C, d))));
K1[d] = LastValue(Max(K, K1[D]));
t++;
}
d++;
}
K2 = LastValue(Highest(K1));
Plot(K, "", colorRed);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Krechetov
Зарегистрирован: 05.08.2009
Сообщения: 76
|
Да, немного переделал, чтоб правильней было. Вот так находится максимальная сумма.
D = 1;
t = 1;
K = 0;
K1 = 0;
K2 = 0;
while(d < 100)
{
while(t < 100)
{
K = k+abs(MA(C, t) - MA(C, d));
t++;
}
d++;
}
K2 = Highest(K);
Plot(K2, "", colorRed);
Не думал что к в массив заномится по умолчанию.
Последний вопрос остался. Как вывести D в котрый эта сумма будет максимальной. Т.е. это получится период той средней от которой разница ко всем остальным максимальна. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Код: |
D = 1;
t = 1;
K = 0;
K1 = 0;
K2 = 0;
K3 = 0;
while(d < 10)
{
while(t < 10)
{
K = LastValue(Highest(abs(MA(C, t) - MA(C, d))));
if(K > K1)
{
K1 = K;
K2 = d;
K3 = t;
}
t++;
}
d++;
}
Plot(K3, "", colorRed);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Krechetov
Зарегистрирован: 05.08.2009
Сообщения: 76
|
000 писал(а): |
Код: |
D = 1;
t = 1;
K = 0;
K1 = 0;
K2 = 0;
K3 = 0;
while(d < 10)
{
while(t < 10)
{
K = LastValue(Highest(abs(MA(C, t) - MA(C, d))));
if(K > K1)
{
K1 = K;
K2 = d;
K3 = t;
}
t++;
}
d++;
}
Plot(K3, "", colorRed);
|
|
В данном случае выводится просто последнее значение T... 9 для 10. 99 для 100 и т.д.
Возможно там lastvalue нельзя использовать ? Я в основном над этой ерундой и бился... чтот никак не могу понять как вывест иправильно |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|