Erros, bugs, perguntas - página 2493

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

Onde cavar?

Necessidade de esperar - o cubículo está ocupado (os dados não foram calculados no momento do contacto)

 
Comentários não relacionados com este tópico foram transferidos para "Perguntas dos principiantes do MQL5 MT5 MetaTrader 5".
 
Comentários não relacionados com este tópico foram transferidos para "Perguntas dos principiantes do MQL5 MT5 MetaTrader 5".
 

Apanhou um erro

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

Aqui está o próprio código:

//+-------------------
   // коррекция
   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);

Quando i = 6,correcton_index7[i+2] (i+2=8) não pode iralém dos limites da matriz. Tanto mais que o laço anterior não gerou o mesmo erro. O que me está a faltar?

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

Apanhou um erro

Aqui está o próprio código:

Quando i = 6,correcton_index7[i+2] (i+2=8) não pode ir além dos limites da matriz. Tanto mais que o laço anterior não gerou o mesmo erro. O que me está a faltar?

Emcorrecton3[3]; especifica três itens.
E o laço é chamado quatro vezes.

Em
correcton7[7]; especifica sete elementos.
E executa o laço oito vezes
.

 
Roman:

Emcorrecton3[3]; especifica três elementos.
E executa o loop quatro vezes.

Em
correcton7[7 ]; especifica sete elementos.
E executa o laço oito vezes.

Vamos contar com os nossos dedos: i=0 e é incrementado em 1 com cada laço. Funciona até i<7. A questão para si (conte com os seus dedos) é quantas vezes o laço será executado?

 
Sim, desculpe, não vi que não há nenhum laço na condição =

Não pode ser um problema aqui ?
correcton_index[0]   = 1;
correcton_index3[0]  = 1;  
 correcton_index7[0]  = 1;
Especifica-se zero elementos e atribui-se aí um valor.
 
Roman:
Sim, desculpe, não vi que no estado do ciclo não =

Não pode ser um problema aqui ?
Especifica-se zero elementos e atribui-se aí um valor.

Obrigado pela sua vontade de ajudar, mas primeiro, resolva você mesmo as matrizes. )))

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

Obrigado pela vossa disponibilidade para ajudar, mas comecem por seleccionar as matrizes você mesmo. )))

A declaração de matriz e a iteração sobre elementos de matriz são diferentes )))

 
Roman:

A declaração de matriz e a iteração sobre os elementos da matriz são diferentes ))

   int      correcton_index7[9];        // объявление
            correcton_index7[0]  = 1;   // присвоение значения
            correcton_index7[1]  = (int)MathRound(correcton_index3[1] / 2);
Roman, antes de dar uma palestra, aprenda a fazê-lo você mesmo.