오류, 버그, 질문 - 페이지 2493

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

어디서 파나요?

기다려야 함 - 부스가 바쁘다 (통화 당시의 데이터는 계산되지 않음)

 
이 주제와 관련이 없는 댓글은 " MQL5 MT5 MetaTrader 5 초보자의 질문 "으로 이동되었습니다.
 
이 주제와 관련이 없는 댓글은 " MQL5 MT5 MetaTrader 5 초보자의 질문 "으로 이동되었습니다.
 

실수를 잡았다

...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) 은 배열을 벗어날 수 없습니다. 또한 유사한 이전주기 가 맹세하지 않습니다. 무엇을 볼 수 없습니까?

수정3[ 3 ]에서; 세 가지 요소를 지정하고 있습니다.
그리고 사이클을 네 번 실행합니다.

수정7[ 7 ]에서; 7개의 요소를 지정합니다.
그리고 사이클을 여덟 번 실행합니다.

 
Roman :

수정3[ 3 ]에서; 세 가지 요소를 지정하고 있습니다.
그리고 사이클을 네 번 실행합니다.

수정7[ 7 ]에서; 7개의 요소를 지정합니다.
그리고 사이클을 여덟 번 실행합니다.

우리는 손가락을 믿습니다. 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 );
로만, 가르치기 전에 스스로 배우십시오.