Errori, bug, domande - pagina 2493

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

Dove scavare?

Necessità di aspettare - la cabina è occupata (i dati non sono stati calcolati al momento del contatto)

 
I commenti non relativi a questo argomento sono stati spostati in "Domande dai principianti di MQL5 MT5 MetaTrader 5".
 
I commenti non relativi a questo argomento sono stati spostati in "Domande dai principianti di MQL5 MT5 MetaTrader 5".
[Eliminato]  

Trovato un errore

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

Ecco il codice stesso:

//+-------------------
   // коррекция
   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) non può andareoltre i limiti dell'array. Tanto più che il ciclo precedente non ha generato lo stesso errore. Cosa mi manca?

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

Trovato un errore

Ecco il codice stesso:

Quando i = 6,correcton_index7[i+2] (i+2=8) non può andare oltre i limiti dell'array. Tanto più che il ciclo precedente non ha generato lo stesso errore. Cosa mi manca?

Incorrecton3[3]; si specificano tre elementi.
E il ciclo viene chiamato quattro volte.

In
correcton7[7]; specificate sette elementi.
Ed eseguite il ciclo otto volte
.

[Eliminato]  
Roman:

Incorrecton3[3]; si specificano tre elementi.
E si esegue il ciclo quattro volte.

In
correcton7[7 ]; si specificano sette elementi.
E si esegue il ciclo otto volte.

Contiamo sulle dita: i=0 e viene incrementato di 1 ad ogni ciclo. Funziona fino a i<7. La domanda per voi (contate sulle dita) è quante volte verrà eseguito il ciclo?

 
Sì, scusate, non avevo visto che non c'è nessun ciclo nella condizione =

Non può essere un problema qui?
correcton_index[0]   = 1;
correcton_index3[0]  = 1;  
 correcton_index7[0]  = 1;
Si specificano zero elementi e vi si assegna un valore.
[Eliminato]  
Roman:
Sì, mi dispiace, non ho visto che nella condizione del ciclo non =

Non può essere un problema qui?
Si specificano zero elementi e vi si assegna un valore.

Grazie per la tua disponibilità ad aiutare, ma inizia a sistemare gli array da solo. )))

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

Grazie per la tua disponibilità ad aiutare, ma inizia a sistemare gli array da solo. )))

La dichiarazione della matrice e l'iterazione sugli elementi della matrice sono diverse )))

[Eliminato]  
Roman:

La dichiarazione della matrice e l'iterazione sugli elementi della matrice sono diverse ))

   int      correcton_index7[9];        // объявление
            correcton_index7[0]  = 1;   // присвоение значения
            correcton_index7[1]  = (int)MathRound(correcton_index3[1] / 2);
Roman, prima di dare lezioni, impara a farlo da solo.