Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1867

 
vladeimirami #:

Eu ainda estou aprendendo programação MQL5. Eu sou um principiante. Autodidata. Estou tentando resolver os problemas. Pensei que deveria haver uma função para entrar uma matriz por um dígito. Bem, o problema é do livro de problemas C++.

143. Para escrever um programa que insere do teclado uma matriz unidimensional de 5 números inteiros.

de 5 números inteiros, depois imprime o número de

de elementos não-zero. Antes de cada elemento ser inserido, um prompt

e depois exibe uma ponta de ferramenta com o número do elemento.

Insira um conjunto de números inteiros.

Depois de ter inserido cada número, pressione <Enter>.

а[1] -> 12

а[2] -> 0

а[3] -> 3

а[4] -> -1

а[5] -> 0


Há 3 elementos não-zero na matriz

int a[] = {12, 0, 3, -1, 0};

Mas, isto transforma a matriz em uma dinâmica, portanto não pode ser redimensionada usando a função ArrayResize().

 
Alexey Viktorov #:

Mas, isto torna a matriz dinâmica, e você não pode mudar seu tamanho com o ArrayResize().

Alexey, eu não sou tão estúpido assim. Desculpe, eu também posso preencher uma matriz dessa maneira. Eu só preciso preenchê-lo a partir do teclado. Isso é o que estou tentando descobrir.
 
vladeimirami #:

Bem, o problema é do livro de problemas C++.

Em mql você também pode preencher a matriz a partir do teclado, mas não é necessário))))

 
Andrey Sokolov #:

Em mql você também pode preencher um array a partir do teclado, mas não é necessário))))

Andrei! Programação. Criatividade. O vôo dos pensamentos e das fantasias. Não podem ser mantidos nas células de matéria cinzenta. Eu quero isso fora do teclado. Não é uma pretensão. É que meu desejo é um fruto da minha imaginação. Eu gostaria que fosse assim, a partir do teclado.
 
vladeimirami #:
Andrei! Programação. Criatividade. Pensamentos voadores e fantasias. Não os mantendo nas células de matéria cinzenta. Eu quero isso fora do teclado. Não é uma pretensão. É que meu desejo é um fruto da minha imaginação. Eu gostaria que fosse assim, a partir do teclado.

Vou simplificar as coisas. As perguntas são apropriadas em tópicos/fóruns especializados.

 
Andrey Sokolov #:

Vou simplificar as coisas. As perguntas são apropriadas em tópicos/fóruns especializados.

Andrey, talvez esta questão tenha sido levantada no fórum como a minha? Se houver algo no fórum, por favor, me dê um link. Ou devemos abrir esta discussão no fórum?

Em todo caso, muito obrigado!

 
vladeimirami #:
Andrei! Programação. Criatividade. O vôo dos pensamentos e das fantasias. Não podem ser mantidos nas células de matéria cinzenta. Eu quero isso fora do teclado. Não é uma pretensão. É que meu desejo é um fruto da minha imaginação. Eu gostaria que fosse assim, a partir do teclado.

leia a matriz do arquivo. E edite o arquivo em qualquer editor de texto :-)

 
Andrey Sokolov #:

"Faça isto - não lhe direi como".

Por que você mesmo não descobriu isso? E dizer ao usuáriovladeimirami como fazê-lo. Tudo isso está na documentação:

https://www.mql5.com/ru/docs/event_handlers/onchartevent

//Пример слушателя событий графика

//+------------------------------------------------------------------+
//|                                          OnChartEvent_Sample.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property description "Пример слушателя событий графика и генератора пользовательских событий"
//--- идентификаторы служебных клавиш
#define  KEY_NUMPAD_5       12
#define  KEY_LEFT           37
#define  KEY_UP             38
#define  KEY_RIGHT          39
#define  KEY_DOWN           40
#define  KEY_NUMLOCK_DOWN   98
#define  KEY_NUMLOCK_LEFT  100
#define  KEY_NUMLOCK_5     101
#define  KEY_NUMLOCK_RIGHT 102
#define  KEY_NUMLOCK_UP    104
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- выведем значение константы CHARTEVENT_CUSTOM
   Print("CHARTEVENT_CUSTOM=",CHARTEVENT_CUSTOM);
//---
   Print("Запущен эксперт с именем ",MQLInfoString(MQL5_PROGRAM_NAME));
//--- установка флага получения событий создания объектов графика
   ChartSetInteger(ChartID(),CHART_EVENT_OBJECT_CREATE,true);
//--- установка флага получения событий удаления объектов графика
   ChartSetInteger(ChartID(),CHART_EVENT_OBJECT_DELETE,true);
//--- включение сообщений о прокрутке колесика мышки
   ChartSetInteger(0,CHART_EVENT_MOUSE_WHEEL,1);
//--- принудительное обновление свойств графика гарантирует готовность к обработке событий
   ChartRedraw();
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- счетчик тиков для генерации пользовательского события 
   static int tick_counter=0;
//--- будем делить накопленные тики на это число
   int simple_number=113;
//--- 
   tick_counter++;
//--- отправляем пользовательское событие, если счетчик тиков кратен simple_number
   if(tick_counter%simple_number==0)
     {
      //--- сформируем идентификатор пользовательского события в диапазоне от 0 до 65535
      ushort custom_event_id=ushort(tick_counter%65535);
      //---  отправим пользовательское событие с заполнением параметров
      EventChartCustom(ChartID(),custom_event_id,tick_counter,SymbolInfoDouble(Symbol(),SYMBOL_BID),__FUNCTION__);
      //--- сделаем вывод в лог для изучения и анализа результатов примера
      Print(__FUNCTION__,": Отправлено пользовательcкое событие ID=",custom_event_id);
     }
//---     
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//--- нажатие кнопки на клавиатуре
   if(id==CHARTEVENT_KEYDOWN)
     {
      switch((int)lparam)
        {
         case KEY_NUMLOCK_LEFT:  Print("Нажата KEY_NUMLOCK_LEFT");   break;
         case KEY_LEFT:          Print("Нажата KEY_LEFT");           break;
         case KEY_NUMLOCK_UP:    Print("Нажата KEY_NUMLOCK_UP");     break;
         case KEY_UP:            Print("Нажата KEY_UP");             break;
         case KEY_NUMLOCK_RIGHT: Print("Нажата KEY_NUMLOCK_RIGHT");  break;
         case KEY_RIGHT:         Print("Нажата KEY_RIGHT");          break;
         case KEY_NUMLOCK_DOWN:  Print("Нажата KEY_NUMLOCK_DOWN");   break;
         case KEY_DOWN:          Print("Нажата KEY_DOWN");           break;
         case KEY_NUMPAD_5:      Print("Нажата KEY_NUMPAD_5");       break;
         case KEY_NUMLOCK_5:     Print("Нажата KEY_NUMLOCK_5");      break;
         default:                Print("Нажата какая-то неперечисленная клавиша");
        }
     }
//--- нажатие левой кнопкой мышки на графике
   if(id==CHARTEVENT_CLICK)
      Print("Координаты щелчка мышки на графике: x = ",lparam,"  y = ",dparam);
//--- нажатие мышкой на графическом объекте
   if(id==CHARTEVENT_OBJECT_CLICK)
      Print("Нажатие кнопки мышки на объекте с именем '"+sparam+"'");
//--- удален объект
   if(id==CHARTEVENT_OBJECT_DELETE)
      Print("Удален объект с именем ",sparam);
//--- создан объект
   if(id==CHARTEVENT_OBJECT_CREATE)
      Print("Создан объект с именем ",sparam);
//--- изменен объект
   if(id==CHARTEVENT_OBJECT_CHANGE)
      Print("Изменен объект с именем ",sparam);
//--- перемещен объект или изменены координаты точек привязки
   if(id==CHARTEVENT_OBJECT_DRAG)
      Print("Изменение точек привязки объекта с именем ",sparam);
//--- изменен текст в поле ввода графического объекта Edit
   if(id==CHARTEVENT_OBJECT_ENDEDIT)
      Print("Изменен текст в объекте Edit ",sparam,"  id=",id);
//--- события перемещения мышки
   if(id==CHARTEVENT_MOUSE_MOVE)
      Comment("POINT: ",(int)lparam,",",(int)dparam,"\n",MouseState((uint)sparam));
   if(id==CHARTEVENT_MOUSE_WHEEL)
     {
      //--- разберем состояние кнопок и колесика мышки для этого события 
      int flg_keys = (int)(lparam>>32);          // флаг состояний клавиш Ctrl, Shift и кнопок мышки
      int x_cursor = (int)(short)lparam;         // X-координата, в которой произошло событие колесика мышки
      int y_cursor = (int)(short)(lparam>>16);   // Y-координата, в которой произошло событие колесика мышки
      int delta    = (int)dparam;                // суммарное значение прокрутки колесика, срабатывает при достижении +120 или -120
      //--- обработаем флаг 
      string str_keys="";
      if((flg_keys&0x0001)!=0)
         str_keys+="LMOUSE ";
      if((flg_keys&0x0002)!=0)
         str_keys+="RMOUSE ";
      if((flg_keys&0x0004)!=0)
         str_keys+="SHIFT ";
      if((flg_keys&0x0008)!=0)
         str_keys+="CTRL ";
      if((flg_keys&0x0010)!=0)
         str_keys+="MMOUSE ";
      if((flg_keys&0x0020)!=0)
         str_keys+="X1MOUSE ";
      if((flg_keys&0x0040)!=0)
         str_keys+="X2MOUSE ";
 
      if(str_keys!="")
         str_keys=", keys='"+StringSubstr(str_keys,0,StringLen(str_keys)-1)+"'";
      PrintFormat("%s: X=%d, Y=%d, delta=%d%s",EnumToString(CHARTEVENT_MOUSE_WHEEL),x_cursor,y_cursor,delta,str_keys);
     }
//--- изменение размеров графика или изменение свойств графика через диалог свойств
   if(id==CHARTEVENT_CHART_CHANGE)
      Print("Изменение размеров или свойств графика");
//--- пользовательское событие
   if(id>CHARTEVENT_CUSTOM)
      PrintFormat("Пользовательское событие ID=%d, lparam=%d, dparam=%G, sparam=%s",id,lparam,dparam,sparam);
  }
//+------------------------------------------------------------------+
//| MouseState                                                       |
//+------------------------------------------------------------------+
string MouseState(uint state)
  {
   string res;
   res+="\nML: "   +(((state& 1)== 1)?"DN":"UP");   // mouse left
   res+="\nMR: "   +(((state& 2)== 2)?"DN":"UP");   // mouse right 
   res+="\nMM: "   +(((state&16)==16)?"DN":"UP");   // mouse middle
   res+="\nMX: "   +(((state&32)==32)?"DN":"UP");   // mouse first X key
   res+="\nMY: "   +(((state&64)==64)?"DN":"UP");   // mouse second X key
   res+="\nSHIFT: "+(((state& 4)== 4)?"DN":"UP");   // shift key
   res+="\nCTRL: " +(((state& 8)== 8)?"DN":"UP");   // control key
   return(res);
  }

Ampliar a lista de constantes para as constantes requeridas:

#define  KEY_NUMPAD_5       12
#define  KEY_LEFT           37
#define  KEY_UP             38
#define  KEY_RIGHT          39
#define  KEY_DOWN           40
#define  KEY_NUMLOCK_DOWN   98
#define  KEY_NUMLOCK_LEFT  100
#define  KEY_NUMLOCK_5     101
#define  KEY_NUMLOCK_RIGHT 102
#define  KEY_NUMLOCK_UP    104

Onde obter valores para as constantes:. Google "códigos-chave C++" (como eu disse antes). E processá-la:

//--- нажатие кнопки на клавиатуре
   if(id==CHARTEVENT_KEYDOWN)
     {
      switch((int)lparam)
        {
         case KEY_NUMLOCK_LEFT:  Print("Нажата KEY_NUMLOCK_LEFT");   break;
         case KEY_LEFT:          Print("Нажата KEY_LEFT");           break;
         case KEY_NUMLOCK_UP:    Print("Нажата KEY_NUMLOCK_UP");     break;
         case KEY_UP:            Print("Нажата KEY_UP");             break;
         case KEY_NUMLOCK_RIGHT: Print("Нажата KEY_NUMLOCK_RIGHT");  break;
         case KEY_RIGHT:         Print("Нажата KEY_RIGHT");          break;
         case KEY_NUMLOCK_DOWN:  Print("Нажата KEY_NUMLOCK_DOWN");   break;
         case KEY_DOWN:          Print("Нажата KEY_DOWN");           break;
         case KEY_NUMPAD_5:      Print("Нажата KEY_NUMPAD_5");       break;
         case KEY_NUMLOCK_5:     Print("Нажата KEY_NUMLOCK_5");      break;
         default:                Print("Нажата какая-то неперечисленная клавиша");
        }
     }

Em vez de string com impressão, inserir função que agrega valor à matriz dependendo da tecla pressionada. O que é tão difícil?

Документация по MQL5: Обработка событий / OnChartEvent
Документация по MQL5: Обработка событий / OnChartEvent
  • www.mql5.com
OnChartEvent - Обработка событий - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Mihail Matkovskij #:

Por que você mesmo não descobriu isso? E dizer ao usuáriovladeimirami como fazê-lo. Afinal de contas, tudo está na documentação:

https://www.mql5.com/ru/docs/event_handlers/onchartevent

Ampliar a lista de constantes para as constantes requeridas:

Onde obter valores para as constantes:. Google "códigos-chave C++" (como eu disse antes). E processá-lo:

Em vez de string com impressão, inserir função que agrega valor à matriz dependendo da tecla pressionada. O que é tão complicado?

Ao menos leia o que você está respondendo e quem estava respondendo o quê a quem antes de se apressar a bater as teclas

 
Mihail Matkovskij #:

Por que você mesmo não descobriu isso? E dizer ao usuáriovladeimirami como fazê-lo. Afinal de contas, tudo está na documentação:

https://www.mql5.com/ru/docs/event_handlers/onchartevent

Ampliar a lista de constantes para as constantes requeridas:

Onde obter os valores para as constantes:. Google "códigos-chave C++" (como eu disse antes). E processá-lo:

Em vez de um fio com impressão, inserimos uma função que acrescenta um valor à matriz, dependendo da tecla pressionada. O que é tão complicado?

Será complicado se você precisar escrever um número na matriz em vez do código da tecla pressionada. Por exemplo, 123. Aqui, haverá três células de matriz preenchidas - cada uma com os valores 1, 2 e 3, e não uma com o valor 123.

Isto significa que você tem que ler as chaves separadamente e terminá-las separadamente. Em outras palavras, informe ao programa que uma entrada de número começou e informe que ela está concluída e você pode escrever o número inserido na matriz.