Скачать MetaTrader 5

Проблема с вложенным циклом

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Пользуйся поиском на MQL5.community. Это просто!
Сергей
21
Сергей 2012.03.19 20:33 

 Доброго времени суток.

   Все очень просто:

                for(int i=1;i<=3;i++){

                         for(int j=1;j<=3;j++){

                                                            Print(i," ",j);

                                                      }

                  }

 

Результат в тестере представлен на рисунке, скрин с версией терминала тоже.. Интересно послушать ваши комментарии.. В случее с циклами while у меня такой же..

Файлы:
trololo666.jpg 186 kb
version.png 87 kb
o_o
Модератор
23690
o_o 2012.03.19 20:41  

шибко быстро на печать выводит.

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

Nikolay Khrushchev
19182
Nikolay Khrushchev 2012.03.19 23:47  

угу, вложенные циклы работают отлично, часто их приходится использовать в сборе статистики, ошибок не было. Дело в пропуске сообщений. Задержку в тестере ты не поставишь. Однако вот такой вариант: 

int k;
for(int i=1;i<=3;i++){
   for(int j=1;j<=3;j++){
      k=k+j=i;
      }
   }
Print(k);

 Вернет 36

Vladimir Gomonov
8277
Vladimir Gomonov 2012.03.20 01:14  
MrGold166:

Однако вот такой вариант:

int k;
for(int i=1;i<=3;i++){
   for(int j=1;j<=3;j++){
      k=k+j=i;
      }
   }
Print(k);

 Вернет 36

Ну ты загнул! :)

Я тоже как-то развлекался подобными приколами.

input int      max=3000;
input int      func=1;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
  Print("//-------------------------------//");
  switch(func)
    {
     case 0 : for(int k=0,m=1;     (k+=m+=k)<=max;    Print("m==",m,"; k==",k)); break;
     case 1 : for(int k=1,m=1;     (k*=m+=1)<=max;    Print("k==",k)); break;
     case 2 : for(int k=1,m=1;     (k+=m+=2)<=max;    Print("k==",k)); break;
     case 3 : for(int k=1,g=1,m=0; (k+=g+=m+=6)<=max; Print("k==",k)); break;
    }
  }
Прежде чем выполнить, попробуй догадаться (прикинуть) что будет на выход вываливаться в каждом варианте.  Забавно.
Валерий
1433
Валерий 2012.03.20 06:00  
В журнал тестера не всё идёт. Смотрите логи агента. Там всё должно быть как надо.
Сергей
21
Сергей 2012.03.20 16:06  
Ммм.. Видимо надо менять подход :) В любом случаии, я скорее рад быть не правым, в данной ситуации )) 
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий