Fehler, Irrtümer, Fragen - Seite 2493

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

Wo soll man graben?

Sie müssen warten - die Kabine ist besetzt (die Daten wurden zum Zeitpunkt der Kontaktaufnahme nicht berechnet)

 
Kommentare, die sich nicht auf dieses Thema beziehen, wurden nach "Fragen von MQL5 MT5 MetaTrader 5 Anfängern" verschoben.
 
Kommentare, die sich nicht auf dieses Thema beziehen, wurden nach "Fragen von MQL5 MT5 MetaTrader 5 Anfängern" verschoben.
 

Ein Fehler ist aufgetreten

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

Hier ist der Code selbst:

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

Wenn i = 6 ist, kanncorrecton_index7[i+2] (i+2=8) dieGrenzen des Arrays nichtüberschreiten. Dies gilt umso mehr, als die vorherige Schleife nicht denselben Fehler verursachte. Was übersehe ich?

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

Ein Fehler ist aufgetreten

Hier ist der Code selbst:

Wenn i = 6 ist, kanncorrecton_index7[i+2] (i+2=8) die Grenzen des Arrays nicht überschreiten. Dies gilt umso mehr, als die vorherige Schleife nicht denselben Fehler verursachte. Was übersehe ich?

Incorrecton3[3]; geben Sie drei Elemente an.
Und die Schleife wird viermal aufgerufen.

In
correcton7[7]; geben Sie sieben Elemente an.
Und führen die Schleife achtmal aus
.

 
Roman:

Incorrecton3[3]; geben Sie drei Elemente an.
Und Sie lassen die Schleife viermal laufen.

In
correcton7[7 ]; geben Sie sieben Elemente an.
Und Sie führen die Schleife achtmal aus.

Zählen wir an den Fingern: i=0 und wird bei jeder Schleife um 1 erhöht. Es funktioniert bis i<7. Die Frage, die sich Ihnen stellt (zählen Sie an den Fingern ab), ist, wie oft die Schleife ausgeführt werden soll.

 
Ja, tut mir leid, ich habe nicht gesehen, dass es keine Schleife in der Bedingung gibt =

Kann das nicht ein Problem sein?
correcton_index[0]   = 1;
correcton_index3[0]  = 1;  
 correcton_index7[0]  = 1;
Sie geben Nullelemente an und weisen dort einen Wert zu.
 
Roman:
Ja, sorry, habe nicht gesehen, dass in den Zustand des Zyklus nicht =

Kann das nicht ein Problem sein?
Sie geben Nullelemente an und weisen ihnen einen Wert zu.

Vielen Dank für Ihre Bereitschaft zu helfen, aber fangen Sie damit an, die Arrays selbst zu sortieren. )))

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

Vielen Dank für Ihre Bereitschaft zu helfen, aber beginnen Sie damit, die Arrays selbst zu sortieren. )))

Array-Deklaration und Iteration über Array-Elemente sind unterschiedlich )))

 
Roman:

Array-Deklaration und Iteration über Array-Elemente sind unterschiedlich ))

   int      correcton_index7[9];        // объявление
            correcton_index7[0]  = 1;   // присвоение значения
            correcton_index7[1]  = (int)MathRound(correcton_index3[1] / 2);
Roman, bevor Sie einen Vortrag halten, sollten Sie lernen, wie man es selbst macht.