баг или жара сказывается?) - страница 2

 
gpwr:

Попробуйте заменить j++ на

j=j+1

j+=1

++j

и скажите какой вариант работает правильно. Вроде все они, включая j++, должны работать одинаково.

Все одинаково, кроме j=j+1, в этом случае у j меняются два значения 0 и 1.
 
joo:

не в этом дело.

а в этом, надо типа так:


так низзя)

в коментах написано, для чего это нужно.

 
Swan:

так низзя)

в коментах написано, для чего это нужно.

я показал, как нужно оформить условие
 
Swan:

j - вроде одна переменная, что не так?

Почитайте раздел: Область видимости и время жизни переменных. У Вас две разных переменных с одним иминем j, а не одна как Вы думаете!
Документация по MQL5: Основы языка / Переменные / Область видимости и время жизни переменных
Документация по MQL5: Основы языка / Переменные / Область видимости и время жизни переменных
  • www.mql5.com
Основы языка / Переменные / Область видимости и время жизни переменных - Документация по MQL5
 
DC2008:
Почитайте раздел: Область видимости и время жизни переменных. У Вас две разных переменных с одним иминем j, а не одна как Вы думаете!

если сделать j глобальной переменной работает, как задумано. спасибо.

а переменная обьявлена таки один раз..

 
зы :)

ashofthedream: глобальная область видимости - это как забор на улице, никто не гарантирует что завтра кто-нибудь не напишет слово *** поверх каких-то очень важных и нужных данных.. ©bash


 
joo:
какое условие?

повторю вопрос, какое условие? у Вас в коде нет никакого условия. Один пример я уже показал. Ещё один

из справки:


Оператор завершения break

Оператор break прекращает выполнение ближайшего вложенного внешнего оператора switch, while, do-while или for. Управление передается оператору, следующему за заканчиваемым. Одно из назначений этого оператора - закончить выполнение цикла при присваивании некоторой переменной определенного значения.

Пример:

//--- поиск первого нулевого элемента
for(i=0;i<array_size;i++)
  if(array[i]==0)
    break;

 
joo:

Схематично, работает как то так:

int j=0;
void OnStart()
  {
   int i,ii;
   for(i=0;i<многа;i++)
      {
      Print("i=",i,", j=",j);
      Arr1[j]=xxx[i];
      for(ii=i+1;ii<многа;ii++)
         {
         if(/*условие*/)
            {
            Arr2[j]=xxx[ii];
            j=j+1;
            Print("j=",j);
            break;
            }
         }
      }
  }
 
Swan:
Скрипт.

В журнале следующее:

ни панятна)

j - вроде одна переменная, что не так?

Если прогнать это код как C-шный, используя какой-нибудь рабочий компилятор C, и заменив Print() на printf(), и исполнить получившийся exe-шник, то увидим следующие результаты:

i=0, j=0
j=1
i=1, j=1
j=2
i=2, j=2
j=3
i=3, j=3
j=4
i=4, j=4
j=5
i=5, j=5
j=6
i=6, j=6
j=7
i=7, j=7
j=8
i=8, j=8
j=9
i=9, j=9
Вынужден констатировать, что компилятор MQL5 до сих пор находится в альфа-стадии, хотя вся клиентская часть была официально объявлена так называемым релизом почти два месяца назад. Это - релиз?

Какой Чемпионат 2010  с таким инструментом? Стоит немного изменить код, и он не работает. А ведь оптимизатор на подходе, и он ещё добавит ошибок и - именно такого рода.
Сколько до начала Чемпионата 2010 осталось? Чуть больше 2-х месяцев? :)

 

Отставить паникерство - ошибка уже исправлена. Это оптимизатор кода перестарался. 

Каждый билд компилятора проходит серию обязательных стресс-тестов (на текущий момент у нас используется длинная серия из 728 тестов). Новые найденные ошибки добавляем в тестовый план, что позволяет нам лучше контролировать качество компилятора в последующих сборках:

 

Мы контролируем качество наших продуктов, собираем все креши, учитываем статистику каждого билда, активно добавляем новый функционал и часто выпускаем новые версии. 

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

Причина обращения: