エラー、バグ、質問 - ページ 2493

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

どこを掘るの?

待つ必要がある - キュービクルは混雑している(連絡時にデータは集計されていない)

 
このトピックに関係のないコメントは、「MQL5 MT5 MetaTrader5初心者からの質問」に移動しました。
 
このトピックに関係のないコメントは、「MQL5 MT5 MetaTrader5初心者からの質問」に移動しました。
削除済み  

エラー発生

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

以下は、コードそのものです。

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

i=6のとき,correcton_index7[i+2](i+2=8) は配列の限界を超えては いけない.前のループでは同じ エラーは出なかったからなおさらだ。何を見落としているのだろう?

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

エラー発生

以下は、コードそのものです。

i=6のとき,correcton_index7[i+2](i+2=8) は配列の 限界を超えることはできない.前のループでは同じ エラーは出なかったからなおさらだ。何を見落としているのだろう?

correcton3[3];では、3つの項目を指定しています。
そして、ループは4回呼び出さ
れます。

correcton7[
7]では、7つの要素を指定しています。
そして、ループを8回実行
します。

削除済み  
Roman:

correcton3[3];では、3つの要素を指定 します。
そして、そのループを4回実行するのです。


correcton7[
7 ]では 7つの要素を指定して います。
そして、そのループを8回実行するのです。

指で数えてみよう。i=0で、ループするたびに1ずつ増えていく。i<7まで動作する。あなたへの質問(指で数えてください)は、このループが何回実行されるかです。

 
はい、すみません、条件にループがないことを見抜けませんでした =。

問題ないでしょうか?
correcton_index[0]   = 1;
correcton_index3[0]  = 1;  
 correcton_index7[0]  = 1;
0個の要素を指定し、そこに値を割り当てる。
削除済み  
Roman:
はい、申し訳ありませんが、サイクルの条件では見ませんでした=。

問題ないでしょうか?
0個の要素を指定し、そこに値を割り当てる。

ご協力ありがとうございます!まずは自分でアレイを整理してみましょう。)))

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

ご協力ありがとうございます!まずは自分でアレイを整理してみましょう。)))

配列の宣言と配列の要素 に対する反復は異なる )))

削除済み  
Roman:

配列の宣言と配列の要素 に対する反復は異なる ))

   int      correcton_index7[9];        // объявление
            correcton_index7[0]  = 1;   // присвоение значения
            correcton_index7[1]  = (int)MathRound(correcton_index3[1] / 2);
ローマン、講義する前に、自分でやり方を覚えろ。