Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1415

 
ANDREY:

Добавил квадратные скобки  void PrintArray(double &eArray[]) Компилятор ни показал ни одной ошибки и ни одного предупреждения.
НО..... функция   Print() почему то не напечаталась ни одного раза.

Вашу лень понимаю, потому что сам такой. Если лень пройдет и на ее место придет энтузиазм , буду Вам признателен , если подскажете что еще не правильно в пользовательской функции.

Спасибо за помощь и извините за беспокойство.

Может массив пустой? Проверьте изменив чуток функцию

void PrintArray(double &eArray)
   {
   int eSize=ArraySize(eArray);
   string eStr="Размер массива "+eSize+" : ";
   for(int i=0; i<eSize; i++)
      {
      eStr+=IntegerToString(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(str);
   }
Если напечатает 0, то ищите проблему в заполнении массива.
 
Alexey Viktorov:

void PrintArray(double &eArray)
   {
   int eSize=ArraySize(eArray);
   string eStr="Размер массива "+eSize+" : ";
   for(int i=0; i<eSize; i++)
      {
      eStr+=IntegerToString(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(str);
   }

Нашел ошибку. В последнюю строку     Print(str); вместо  estr Вы передали   str. Я исправил и все стало ОК.

Теперь как мне кажется , благодаря Вам , я усвоил эту тему не только в общих чертах, но во всех деталях. Единственным вопросом без ответа остался вопрос о плюсах из моего поста   

Спасибо за помощь и поддержку.

 
Maxim Kuznetsov:

на форуме и в публикациях про С#, Delphi и всё прочее...

Я никогда этого не делал, можно какую-то ссылку для "чайников?"
 
ANDREY:

Нашел ошибку. В последнюю строку     Print(str); вместо  estr Вы передали   str. Я исправил и все стало ОК.

Теперь как мне кажется , благодаря Вам , я усвоил эту тему не только в общих чертах, но во всех деталях. Единственным вопросом без ответа остался вопрос о плюсах из моего поста   

Спасибо за помощь и поддержку.

Это не я передал,

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам

Aleksei Stepanenko, 2021.03.13 09:04

Print("-LoY[0]-", DoubleToString(LoY[0],4), "---LoY[1]--", DoubleToString(LoY[1],4), "---LoY[2]--" , DoubleToString(LoY[2],4), "---LoY[3]--" , DoubleToString(LoY[3],4),................  "---LoY[30]--" ,  DoubleToString(LoY[30],4) );

или сделать отдельную функцию печати массива:

void PrintArray(double &eArray)
   {
   string eStr="";
   int eSize=ArraySize(eArray);
   for(int i=0; i<eSize; i++)
      {
      eStr+=IntegerToString(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(str);
   }

И вызывайте её из любого места

PrintArray(LoY);

я просто не обратил внимания на это. Только не понятно как прошла компиляция без ошибки, непонятно…

А что отвечать если вы всё поняли и расписали всю последовательность

ANDREY:

Как мне кажется, до меня наконец то дошло ( я слегка тугодум)......

На первой итерации  строковая переменная  str пустая. Символы  =+ предписывают   str  присвоить себе саму себя пустую(без значений) и к  самой себе пустой прибавить строку со значениями, а именно  "--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+", ";. Значением этой строки будет "  --LoY[0]--, --1.6104-- ". После этих операций  str на первой итерации получает значение   --LoY[0]--, --1.6104-- ". Как я понял в Вашей терминологии это называется первый элемент.

На второй итерации   str уже имеет первый элемент со значением  "  --LoY[0]--, --1.6104-- "   Символы  =+ предписывают   str  присвоить себе саму себя со значением первого элемента  и к  самой себе со значением первого элемента прибавить строку с другими  значениями, а именно  "--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+", ";. Значением этой строки уже  будет "  --LoY[1]--, --1.6105-- ". После этих операций  str на второй  итерации получает значение   --LoY[0]-- --1.6104--  --LoY[1]-- --1.6105-- ". То есть в  str появился(приплюсовался) второй элемент.  И на тридцатой итерации в   str будет 30 элементов с разными значениями элементов массива.

А после окончания цикла, за его пределами будет один раз напечатана строковая переменная  str с 30 элементами.
Я долго не мог понять этот алгоритм, потому что когда Вы говорили о сложении я обращал внимание исключительно на красные плюсы.  "--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+", а  не на str+=

И поэтому для меня до сих пор остается загадкой какую же роль в этом алгоритме играют эти красные плюсы    "--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+"

Спасибо за помощь.

И какой загадкой осталось, если всё расписано правильно…
 
MakarFX:
Я никогда этого не делал, можно какую-то ссылку для "чайников?"

Если вы до этого на C#, Delphi и прочих подобных не писали, то не поможет..Окна создаются как везде, но сначала надо узнать как это "везде"

Сначала краткий курс C#, WinForms (к примеру). В интернете их куча должно быть. Это немного выходит за рамку форума.

 

Alexey Viktorov

Alexey Viktorov:


И какой загадкой осталось, если всё расписано правильно…

Я долго не мог понять этот алгоритм, потому что когда Вы говорили о сложении я обращал внимание исключительно на красные плюсы.  "--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+", а  не на str+=

И поэтому для меня до сих пор остается загадкой какую же роль в этом алгоритме играют эти красные плюсы    "--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+"

Ведь из того как я описал свое понимание однозначно следует что коннектация строк на каждой итерации происходит в одном месте и  1 раз вместе с операцией присвоения   str+=

То есть при помощи символа + значение одного элемента в строковой переменной str соединяется (плюсуется) со значение другого элемента той же самой строковой переменной  str
А что означают вот эти  красные + я так и не понял    str +="--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+", ";. Ведь над значениями которые находятся между этими красными плюсами не производится никаких операция суммирования .....как мне кажется. Если я прав, тогда какую функцию выполняют эти красные плюсы. А если я не прав, тогда я что - то НЕДОпонял. 

Кстати в Вашем посте     в желтой строке , такой красны плюс  только один и стоит перед  +DoubleToString(LoY[r],4). А после  его почему то  нет.

Спасибо за помощь.

 
Alexey Viktorov:

 Только не понятно как прошла компиляция без ошибки, непонятно…


 А я сам инициализировал str внутри тела пользовательской функции, когда увидел что компилятор указывал на то что  str была не определена. Но забыл Вам об этом сказать.
Потом  str из пользовательской функции я везде удалил , а в последней строке пользовательской функции в скобки поместил вместо   str -  eStr.

 
Maxim Kuznetsov:

Если вы до этого на C#, Delphi и прочих подобных не писали, то не поможет..Окна создаются как везде, но сначала надо узнать как это "везде"

Сначала краткий курс C#, WinForms (к примеру). В интернете их куча должно быть. Это немного выходит за рамку форума.

Ну форму создать получилось.


Больше интересует как обмен данными прописать между моим окном и советником.

 
void PrintArray(double &eArray[])
   {
   string eStr="";
   int eSize=ArraySize(eArray);
   for(int i=0; i<eSize; i++)
      {
      eStr+=string(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(eStr);
   }
 

Aleksei Stepanenko:

void PrintArray(double &eArray[])
   {
   string eStr="";
   int eSize=ArraySize(eArray);
   for(int i=0; i<eSize; i++)
      {
      eStr+=string(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(eStr);
   }


Спасибо за уточнение.

Кстати желтые плюсы я удалял и компилятор выдавал ошибку. Значит они играют какую то роль во всей этой конструкции. А вот какую....я до сих пор  и не понимаю. Зачем они нужны, если сложение строк осуществляется исключительно при помощи голубых плюсов. А больше в этой конструкции судя по Вашим объяснениям , ничего не складывается ..... если я не ошибаюсь.

И по поводу  string(i)... По поводу приведения типов .... мне более менее  понятно. Не понятно вот что.....  string - это название типа переменной.   i - переменная счетчик обозначающая индекс элемента массива. А почему   i  в круглых скобках () ? Я до сих пор считал что круглые скобки это признак функции. Например  Print( ). И внутрь круглых скобок в некоторых функциях вводят различные данные.  А что обозначают, или какую функцию исполняют круглые скобки применительно к  i  и ко всей этой конструкции  -  string(i). На первый взгляд кажется что раньше у переменной  i  был тип int ( целое число) , а потом Вы изменили тип переменной i  с  int на  string (строковый). Но думать так не позволяют круглые скобки внутри которых стоит 

Спасибо за объяснения.

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