Autoaprendizaje del lenguaje MQL5 desde cero - página 41

 
MrBrooklin:

¡Eso es! Tengo el tiempo en días. Y el período de entrenamiento y cuántos días han pasado desde que empecé. Creo que no entiendo algo.

Respetuosamente, Vladimir.

En términos de lógica de condiciones, la cadena "aprenderé el idioma" puede salir como resultado de calcular el tiempo y la paciencia disponibles para aprenderlo. Si uno de los parámetros (tiempo o paciencia) es igual a cero, la lengua no puede ser aprendida. Por lo tanto, hay un error lógico en la condición.
 
MrBrooklin:

¡Gracias, Peter! Ya me han ayudado a entender esta cuestión.

Sigo estudiando el lenguaje de programación MQL5 y hoy pego el código de un script, que es la continuación de una de las tareas de los participantes de este hilo. He probado el script en todos los modos. Todo funciona como debería. Para empezar, he puesto los parámetros de entrada al mínimo.

Saludos, Vladimir.

Haz ... terminar de escribir los nombres rusos en los nombres de las variables y funciones. Esto se considera de muy mala educación. Está claro que estás haciendo programas para ti, pero esto no es 1C después de todo. Acostúmbrate al estilo de código estándar de una vez. Entonces será más fácil para usted leer el código de otras personas de Asesores Expertos e indicadores, que definitivamente necesitará.

 
Реter Konow:
En términos de lógica de condiciones, la cadena "aprenderé el idioma" puede salir como resultado de calcular el tiempo y la paciencia disponibles para aprenderlo. Si uno de los parámetros (tiempo o paciencia) es igual a cero, no podrás aprender el idioma. Por lo tanto, hay un error lógico en la condición.

¿Se refiere a un error lógico en la condición de la propia función o en el funcionamiento del script?

Saludos, Vladimir.

 
Vasiliy Sokolov:

Deberías... dejar de escribir nombres rusos en los nombres de las variables y funciones. Esto se considera de muy mala educación. Está claro que estás haciendo programas para ti, pero no es 1C después de todo. Acostúmbrate al estilo de código estándar de una vez. Entonces será más fácil para usted leer el código de Asesores Expertos e indicadores de otras personas, que definitivamente necesitará.

Vasily, no te lo vas a creer, pero estoy a favor. Es que la condición de la tarea se ha dado en ruso, de ahí la continuación. Definitivamente reescribiré el guión usando el inglés.

Saludos, Vladimir.

 
MrBrooklin:

¿Se refiere a un error lógico en la condición de la propia función o en el funcionamiento del script?

Respetuosamente, Vladimir.

No hay errores de sintaxis en el código, pero la lógica está rota, y hay que vigilarla de cerca.

El propio cálculo en la función sufficiency_time es ilógico. El tiempo es suficiente cuando no es igual a cero. La función calcula la diferencia de tiempo y devuelve un booleano sí/no. Es decir, la función no está estructurada correctamente. Revisa el cálculo de sufficiency_time().

Aunque, no. La función devuelve ushort, pero sigue sin tener lógica. Sufficiency_time debe ser mayor que cero.
 
Реter Konow:
No hay errores de sintaxis en el código, pero la lógica está rota, y hay que vigilarla de cerca.

El propio cálculo en la función sufficiency_time es ilógico. El tiempo es suficiente cuando no es cero. La función calcula la diferencia de tiempo y devuelve un sí/no lógico. Es decir, la función no está estructurada correctamente. Recalcular sufficiency_time().

Aunque, no. La función devuelve ushort, pero sigue sin tener lógica. El tiempo_de_suficiencia debe ser mayor que cero.

Ahora está claro, sólo hay que averiguar cómo hacerlo. Será algo para hacer el fin de semana.

Saludos, Vladimir.

 
Реter Konow:
No hay errores de sintaxis en el código, pero la lógica está rota, y hay que vigilarla cuidadosamente.

El propio cálculo en la función sufficiency_time es ilógico. El tiempo es suficiente cuando no es cero. La función calcula la diferencia de tiempo y devuelve un sí/no lógico. Es decir, la función no está estructurada correctamente. Revisa el cálculo de sufficiency_time().

Aunque, no. La función devuelve ushort, pero sigue sin tener lógica. Sufficiency_time debe ser mayor que cero.

Si escribes para principiantes, escribe en un lenguaje sencillo, no hay que entrar desde lejos, para menospreciar.

y sus amenazas verán donde pueden ser de interés
 

Sigo estudiando el lenguaje de programación MQL5 y estoy publicando el código de un script, que es una continuación de una tarea de los participantes de este hilo. El script ha sido probado en todos los modos. No se ha detectado ningún problema. Aplicó el número mínimo de parámetros de entrada para empezar. El código del script está escrito en inglés, los comentarios al código están en ruso, para facilitar el proceso de aprendizaje. Como he prometido antes, he intentado describir el guión de forma comprensible para un alumno de la escuela de programación de 1º curso.

Saludos cordiales, Vladimir.

//+------------------------------------------------------------------+
//|                                                Learning_MQL5.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright   "Copyright 2020, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property description "Скрипт подводит итог обучения языку программирования MQL5. В зависимости от "
#property description "входных параметров печатает во вкладке \"Эксперт\" торгового терминала два"
#property description "сообщения на русском языке: \"Я выучу язык MQL5!\" или \"Я не выучу язык MQL5!\""
#property description "Код скрипта написан на основе примера, приведенного Valeriy Yastremskiy на сайте"
#property description "MQL5, в теме \"Самообучение языку MQL5 с полного нуля\"." 
#property description "======================================================"
#property description "Ссылка на пример https://www.mql5.com/ru/forum/352460/page30#comment_18646826"
//---
#property version     "1.00"              //версия скрипта 1.00
//---
#property script_show_inputs              //выводить окно со свойствами перед запуском скрипта 
//--- Зададим входные параметры скрипта: 
input ushort Period_learning=500;         //Полный период обучения в днях
input ushort Days_passed=10;              //Сколько дней прошло с начала обучения
input bool   Patience=true;               //Терпение (true - достаточно; false - не достаточно)
//--- Зададим глобальные переменные:
//переменная enough_time (достаточно времени), где ushort - минимальное значение "0", максимальное "65535"
ushort enough_time;
//переменная enough_patience (достаточно терпения), где bool - логическое значение: истина (true) или ложь (false)
bool enough_patience;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart() //старт работы скрипта
  {
/* Зададим условие для работы скрипта. Если:
   1. значение функции "имею время" будет больше или равно "Полного периода обучения", заданного 
      во входных параметрах скрипта;
   2. и значение функции "имею время" не будет равно нулю;
   3. и значение функции "имею терпение" будет равно значению истина (true)
*/
   if(have_time()>=Period_learning && have_time()!=0 && have_patience()==true)
     {
      Print("Я выучу язык MQL5!");    //выводим сообщение "Я выучу язык MQL5!"
     }
   else //в противном случае
     {
      Print("Я не выучу язык MQL5!"); //выводим сообщение "Я не выучу язык MQL5!"
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//--- Функция "имею_время"
ushort have_time()            //создаём функцию "имею_время" и присвоим тип данных ushort
  {
   enough_time=Days_passed;   //задаём для значения enough_time (достаточно времени) значение равное
                              //входному параметру "Сколько дней прошло с начала обучения" (Days_passed)

   return(enough_time);       //возвращаем значение "достаточно времени" в функцию "имею время"
  }
//--- Функция "имею_терпение"
bool have_patience()          //создаём функцию "имею_терпение" и присвоим тип данных bool
  {
   enough_patience=Patience;  //задаём для переменной enough_patience (достаточно терпения) значение равное
                              //входному параметру "Терпение" (Patience): истина или ложь

   return(enough_patience);   //возвращаем значение "достаточно терпения" в функцию "имею терпение"
  }
//+------------------------------------------------------------------+
 

En primer lugar, aprender a trabajar con variables de cadena de Dmitry Fedoseyev, infostringements son muy nublado en la etapa de estudiar el código de otras personas,

En el artículo que reseñó, todo está claro, y aprenderás muchas cosas al mismo tiempo, hablo como lector de la mayoría de los artículos aquí, creo que nadie ha leído más que yo)

 
MrBrooklin:

¡Así es! Tengo el tiempo en días. Y el período de entrenamiento y cuántos días han pasado desde que empecé. Creo que todavía no entiendo algo.

Saludos, Vladimir.



Su código y su lógica son correctos. En mi IMHO, miré ayer, al principio me sorprendí yo mismo, pero luego capté la diferencia... :-)
Razón de la queja: