Errores, fallos, preguntas - página 2493

 
Сергей Таболин:

¿Dónde cavar?

Necesidad de esperar - el cubículo está ocupado (los datos no fueron calculados en el momento del contacto)

 
Los comentarios no relacionados con este tema han sido trasladados a "Preguntas de los principiantes de MQL5 MT5 MetaTrader 5".
 
Los comentarios no relacionados con este tema han sido trasladados a "Preguntas de los principiantes de MQL5 MT5 MetaTrader 5".
 

Se ha detectado un error

...tested with error "critical runtime error 502 in OnTester function (array out of range, module ....ex5, file ....mqh, line 237, col 51...

Aquí está el código en sí:

//+-------------------
   // коррекция
   int      correcton_index[3];
            correcton_index[0]   = 1;
            correcton_index[1]   = (int)MathRound(balance_arr_size / 2);
            correcton_index[2]   = balance_arr_size;
   int      correcton_index3[5];
            correcton_index3[0]  =  1;
            correcton_index3[1]  = (int)MathRound(correcton_index[1] / 2);
            correcton_index3[2]  = correcton_index[1];
            correcton_index3[3]  = (int)MathRound((balance_arr_size - correcton_index[1]) / 2);
            correcton_index3[4]  = balance_arr_size;
   int      correcton_index7[9];
            correcton_index7[0]  = 1;
            correcton_index7[1]  = (int)MathRound(correcton_index3[1] / 2);
            correcton_index7[2]  = correcton_index3[1];
            correcton_index7[3]  = (int)MathRound((correcton_index3[2] - correcton_index3[1]) / 2);
            correcton_index7[4]  = correcton_index3[2];
            correcton_index7[5]  = (int)MathRound((correcton_index3[3] - correcton_index3[2]) / 2);
            correcton_index7[6]  = correcton_index3[3];
            correcton_index7[7]  = (int)MathRound((balance_arr_size - correcton_index3[3]) / 2);
            correcton_index7[8]  = balance_arr_size;
   
   double   correcton   = NormalizeDouble((balance_arr[correcton_index[2]-1] / balance_arr[correcton_index[1]-1]) / (balance_arr[correcton_index[1]-1] / balance_arr[correcton_index[0]-1]),8);
   double   correcton3[3];
   double   correcton7[7];
   double   crr         = 1;
   ArrayInitialize(correcton3,EMPTY_VALUE);
   ArrayInitialize(correcton7,EMPTY_VALUE);
   for(int i = 0; i < 3; i++)
   {
      correcton3[i]  = NormalizeDouble((balance_arr[correcton_index3[i+2]-1] / balance_arr[correcton_index3[i+1]-1]) / (balance_arr[correcton_index3[i+1]-1] / balance_arr[correcton_index3[i+0]-1]),8);
      crr            = NormalizeDouble(crr * correcton3[i],8);
   }
   correcton         = NormalizeDouble(correcton * crr,8);
   crr               = 1;
   for(int i = 0; i < 7; i++)
   {
      correcton7[i]  = NormalizeDouble((balance_arr[correcton_index7[i+2]-1] / balance_arr[correcton_index7[i+1]-1]) / (balance_arr[correcton_index7[i+1]-1] / balance_arr[correcton_index7[i+0]-1]),8);
      crr            = NormalizeDouble(crr * correcton7[i],8);
   }
   correcton         = NormalizeDouble(correcton * crr,8);

Cuando i = 6,correcton_index7[i+2] (i+2=8) no puedesobrepasar los límites de la matriz. Sobre todo porque el bucle anterior no generó el mismo error. ¿Qué me falta?

 
Сергей Таболин:

Se ha detectado un error

Aquí está el código en sí:

Cuando i = 6,correcton_index7[i+2] (i+2=8) no puede sobrepasar los límites de la matriz. Sobre todo porque el bucle anterior no generó el mismo error. ¿Qué me falta?

Encorrecton3[3]; se especifican tres elementos.
Y el bucle se llama cuatro veces.

En
correcton7[7]; se especifican siete elementos.
Y se ejecuta el bucle ocho veces
.

 
Roman:

Encorrecton3[3]; se especifican tres elementos.
Y ejecuta el bucle cuatro veces.

En
correcton7[7 ]; se especifican siete elementos.
Y se ejecuta el bucle ocho veces.

Contemos con los dedos: i=0 y se incrementa en 1 con cada bucle. Funciona hasta i<7. La pregunta para ti (cuenta con los dedos) es ¿cuántas veces se ejecutará el bucle?

 
Sí, lo siento, no vi que no hay ningún bucle en la condición =

¿No puede haber un problema aquí?
correcton_index[0]   = 1;
correcton_index3[0]  = 1;  
 correcton_index7[0]  = 1;
Se especifica cero elementos y se asigna un valor allí.
 
Roman:
Sí, lo siento, no vi que en el estado del ciclo no =

¿No puede haber un problema aquí?
Se especifica cero elementos y se asigna un valor allí.

Gracias por tu disposición a ayudar, pero empieza por ordenar tú mismo las matrices. )))

 
Сергей Таболин:

Gracias por tu disposición a ayudar, pero empieza por ordenar tú mismo las matrices. )))

La declaración de la matriz y la iteración sobre los elementos de la matriz son diferentes )))

 
Roman:

La declaración de la matriz y la iteración sobre los elementos de la matriz son diferentes ))

   int      correcton_index7[9];        // объявление
            correcton_index7[0]  = 1;   // присвоение значения
            correcton_index7[1]  = (int)MathRound(correcton_index3[1] / 2);
Roman, antes de dar lecciones, aprende a hacerlo tú mismo.