¿Cómo lo hace y qué es exactamente lo que no funciona?
Todavía estoy aprendiendo a programar en MQL5. Soy un principiante. Soy autodidacta. Estoy tratando de resolver algunos problemas. He pensado que debería haber una función para introducir una matriz desde el teclado, y no he introducido la matriz por un dígito a la vez. Bueno, el problema es del libro de problemas C++.
143. Escribir un programa que introduzca desde el teclado un array unidimensional de 5 enteros.
de 5 enteros, luego imprime el número de
de elementos no nulos. Antes de introducir cada elemento, un aviso
y luego muestra un tooltip con el número del elemento.
Todavía estoy aprendiendo a programar en MQL5. Soy un principiante. Autodidacta. Estoy tratando de resolver problemas. He pensado que debería haber una función para introducir una matriz por un dígito. Bueno, el problema es del libro de problemas C++.
143. Escribir un programa que introduzca desde el teclado un array unidimensional de 5 enteros.
de 5 enteros, luego imprime el número de
de elementos no nulos. Antes de introducir cada elemento, un aviso
y luego muestra un tooltip con el número del elemento.
Introduzca una matriz de números enteros.
Después de introducir cada número, pulse <Enter>.
а[1] -> 12
а[2] -> 0
а[3] -> 3
а[4] -> -1
а[5] -> 0
Hay 3 elementos no nulos en la matriz
int a[] = {12, 0, 3, -1, 0};
Pero, esto convierte el array en uno dinámico, por lo que no se puede cambiar su tamaño con ArrayResize().
Pero, esto hace que el array sea dinámico, y no puedes cambiar su tamaño con ArrayResize().
Alexey, no soy tan estúpido. Lo siento, yo también puedo llenar una matriz de esa manera. Sólo tengo que rellenarlo desde el teclado. Eso es lo que estoy tratando de averiguar.
En mql también se puede llenar un array desde el teclado, pero no es necesario))
¡Andrei! Programación. La creatividad. El vuelo de los pensamientos y las fantasías. No puede retenerlos en las células de la materia gris. Lo quiero fuera del teclado. No es una pretensión. Es que mi deseo es producto de mi imaginación. Me gustaría que fuera así, desde el teclado.
vladeimirami #: ¡Andrei! Programación. La creatividad. Pensamientos y fantasías voladoras. No mantenerlos en las células de la materia gris. Lo quiero fuera del teclado. No es una pretensión. Es que mi deseo es producto de mi imaginación. Me gustaría que fuera así, desde el teclado.
Lo haré sencillo. Las preguntas son apropiadas en temas/foros especializados.
Lo haré sencillo. Las preguntas son apropiadas en hilos/foros especializados.
Andrey, ¿tal vez esta pregunta se planteó en el foro como la mía? Si hay algo en el foro por favor dame un enlace. ¿O deberíamos abrir esta discusión en el foro?
vladeimirami #: ¡Andrei! Programación. La creatividad. El vuelo de los pensamientos y las fantasías. No puede mantenerlos en las células de la materia gris. Lo quiero fuera del teclado. No es una pretensión. Es que mi deseo es producto de mi imaginación. Me gustaría que fuera así, desde el teclado.
leer la matriz desde el archivo. Y editar el archivo en cualquier 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);
}
¿Cómo lo hace y qué es exactamente lo que no funciona?
Todavía estoy aprendiendo a programar en MQL5. Soy un principiante. Soy autodidacta. Estoy tratando de resolver algunos problemas. He pensado que debería haber una función para introducir una matriz desde el teclado, y no he introducido la matriz por un dígito a la vez. Bueno, el problema es del libro de problemas C++.
143. Escribir un programa que introduzca desde el teclado un array unidimensional de 5 enteros.
de 5 enteros, luego imprime el número de
de elementos no nulos. Antes de introducir cada elemento, un aviso
y luego muestra un tooltip con el número del elemento.
Introduzca una matriz de números enteros.
Después de introducir cada número, pulse <Enter>.
а[1] -> 12
а[2] -> 0
а[3] -> 3
а[4] -> -1
а[5] -> 0
Hay 3 elementos no nulos en la matriz
Todavía estoy aprendiendo a programar en MQL5. Soy un principiante. Autodidacta. Estoy tratando de resolver problemas. He pensado que debería haber una función para introducir una matriz por un dígito. Bueno, el problema es del libro de problemas C++.
143. Escribir un programa que introduzca desde el teclado un array unidimensional de 5 enteros.
de 5 enteros, luego imprime el número de
de elementos no nulos. Antes de introducir cada elemento, un aviso
y luego muestra un tooltip con el número del elemento.
Introduzca una matriz de números enteros.
Después de introducir cada número, pulse <Enter>.
а[1] -> 12
а[2] -> 0
а[3] -> 3
а[4] -> -1
а[5] -> 0
Hay 3 elementos no nulos en la matriz
Pero, esto convierte el array en uno dinámico, por lo que no se puede cambiar su tamaño con ArrayResize().
Pero, esto hace que el array sea dinámico, y no puedes cambiar su tamaño con ArrayResize().
Bueno, el problema es del libro de problemas de C++.
En mql también puedes rellenar el array desde el teclado, pero no es necesario))
En mql también se puede llenar un array desde el teclado, pero no es necesario))
¡Andrei! Programación. La creatividad. Pensamientos y fantasías voladoras. No mantenerlos en las células de la materia gris. Lo quiero fuera del teclado. No es una pretensión. Es que mi deseo es producto de mi imaginación. Me gustaría que fuera así, desde el teclado.
Lo haré sencillo. Las preguntas son apropiadas en temas/foros especializados.
Lo haré sencillo. Las preguntas son apropiadas en hilos/foros especializados.
Andrey, ¿tal vez esta pregunta se planteó en el foro como la mía? Si hay algo en el foro por favor dame un enlace. ¿O deberíamos abrir esta discusión en el foro?
En cualquier caso, ¡muchas gracias!
¡Andrei! Programación. La creatividad. El vuelo de los pensamientos y las fantasías. No puede mantenerlos en las células de la materia gris. Lo quiero fuera del teclado. No es una pretensión. Es que mi deseo es producto de mi imaginación. Me gustaría que fuera así, desde el teclado.
leer la matriz desde el archivo. Y editar el archivo en cualquier editor de texto :-)
"Haz esto, no te diré cómo".
¿Por qué no lo descubriste tú mismo? Y dile al usuariovladeimirami cómo hacerlo. Todo está en la documentación:
https://www.mql5.com/ru/docs/event_handlers/onchartevent
Amplía la lista de constantes a las necesarias:
Dónde obtener los valores de las constantes:. Busca en Google "C++ key codes" (como he dicho antes). Y procesarlo:
En lugar de una cadena con Print, inserte una función que añada un valor al array dependiendo de la tecla pulsada. ¿Qué es tan difícil?
¿Por qué no lo descubriste tú mismo? Y dile al usuariovladeimirami cómo hacerlo. Todo está en la documentación:
https://www.mql5.com/ru/docs/event_handlers/onchartevent
Amplía la lista de constantes a las necesarias:
Dónde obtener los valores de las constantes:. Busca en Google "C++ key codes" (como he dicho antes). Y procesarlo:
En lugar de una cadena con Print, inserte una función que añada un valor al array dependiendo de la tecla pulsada. ¿Qué es tan complicado?
Al menos lee lo que estás contestando y quién respondía qué a quién antes de apresurarte a darle a las teclas