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().
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.
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.
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?
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 :-)
//Пример слушателя событий графика
//+------------------------------------------------------------------+//| 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 |//+------------------------------------------------------------------+intOnInit()
{
//--- выведем значение константы CHARTEVENT_CUSTOMPrint("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 |//+------------------------------------------------------------------+voidOnTick()
{
//--- счетчик тиков для генерации пользовательского события staticint tick_counter=0;
//--- будем делить накопленные тики на это числоint simple_number=113;
//---
tick_counter++;
//--- отправляем пользовательское событие, если счетчик тиков кратен simple_numberif(tick_counter%simple_number==0)
{
//--- сформируем идентификатор пользовательского события в диапазоне от 0 до 65535ushort 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 |//+------------------------------------------------------------------+voidOnChartEvent(constint id,
constlong &lparam,
constdouble &dparam,
conststring &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);
//--- изменен текст в поле ввода графического объекта Editif(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 keyreturn(res);
}
Ampliar a lista de constantes para as constantes requeridas:
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.
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
Mas, isto transforma a matriz em uma dinâmica, portanto não pode ser redimensionada usando a função ArrayResize().
Mas, isto torna a matriz dinâmica, e você não pode mudar seu tamanho com o ArrayResize().
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))))
Em mql você também pode preencher um array a partir do teclado, mas não é necessário))))
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.
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!
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 :-)
"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
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á-la:
Em vez de string com impressão, inserir função que agrega valor à matriz dependendo da tecla pressionada. O que é tão difícil?
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
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.