Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Как работают вложенные циклы ? Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
Krechetov



Зарегистрирован: 05.08.2009
Сообщения: 76

СообщениеДобавлено: Ср Дек 01, 2010 2:45 am Ответить с цитатой Вернуться к началу

Такой вопрсо к знающим товарищам.

Есть такой цикл:

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

СообщениеДобавлено: Ср Дек 01, 2010 10:08 am Ответить с цитатой Вернуться к началу

Код:

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

СообщениеДобавлено: Ср Дек 01, 2010 1:12 pm Ответить с цитатой Вернуться к началу

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.... Вот так почеум то вложенные циклы работают Sad в итоге наибольшее не находится
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Ср Дек 01, 2010 1:27 pm Ответить с цитатой Вернуться к началу

Я никак не пому точно что надо.
Если надо максимальную разницу между двумя мувингами то так
Код:

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

СообщениеДобавлено: Ср Дек 01, 2010 2:23 pm Ответить с цитатой Вернуться к началу

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

СообщениеДобавлено: Ср Дек 01, 2010 4:43 pm Ответить с цитатой Вернуться к началу

Кхм. Там не правильно было. Правильно так
Код:

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

СообщениеДобавлено: Ср Дек 01, 2010 6:45 pm Ответить с цитатой Вернуться к началу

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

СообщениеДобавлено: Ср Дек 01, 2010 7:04 pm Ответить с цитатой Вернуться к началу

Вообще не понял.
Цитата:

Нет нужна именно максимальная сумма разниц....

Сумма разниц только одна. Как она может быть максимальной или минимальной. ???

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Krechetov



Зарегистрирован: 05.08.2009
Сообщения: 76

СообщениеДобавлено: Ср Дек 01, 2010 7:11 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Вообще не понял.
Цитата:

Нет нужна именно максимальная сумма разниц....

Сумма разниц только одна. Как она может быть максимальной или минимальной. ???


Ну так есть 100 средних... находим сумму разниц первой средней с остальными... Потом второй средней с остальными.... получается 100 сумм разницы... Для этого и нужно 2 цикла....

А в итоге нужно чтоб была максимальная сумма разниц. т.е. найти одну искомую среднюю.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Чт Дек 02, 2010 12:40 am Ответить с цитатой Вернуться к началу

Тогда запоминаем все суммы (например в массив) и потом находим наибольшую.
Код:

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

СообщениеДобавлено: Пт Дек 03, 2010 12:58 am Ответить с цитатой Вернуться к началу

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

СообщениеДобавлено: Пт Дек 03, 2010 1:12 am Ответить с цитатой Вернуться к началу

Ааа . Ну конечно. стартовые 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

СообщениеДобавлено: Пт Дек 03, 2010 1:40 am Ответить с цитатой Вернуться к началу

Да, немного переделал, чтоб правильней было. Вот так находится максимальная сумма.

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

СообщениеДобавлено: Пт Дек 03, 2010 2:04 am Ответить с цитатой Вернуться к началу

Код:

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

СообщениеДобавлено: Пт Дек 03, 2010 2:13 am Ответить с цитатой Вернуться к началу

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 нельзя использовать ? Я в основном над этой ерундой и бился... чтот никак не могу понять как вывест иправильно
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen