오류, 버그, 질문 - 페이지 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 );
로만, 가르치기 전에 스스로 배우십시오.