Hatalar, hatalar, sorular - sayfa 2493

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

Nerede kazılır?

Beklemelisiniz - kabin meşgul (arama anındaki veriler hesaplanmadı)

 
Bu konuyla ilgili olmayan yorumlar " MQL5 MT5 MetaTrader 5 Yeni Başlayanlardan Sorular " bölümüne taşındı.
 
Bu konuyla ilgili olmayan yorumlar " MQL5 MT5 MetaTrader 5 Yeni Başlayanlardan Sorular " bölümüne taşındı.
 

bir hata yakaladım

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

İşte kodun kendisi:

 //+-------------------
   // коррекция
   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 için Correcton_index7[i+2] (i+2=8) dizinin ötesine geçemez . Üstelik benzer bir önceki döngü yemin etmez. Ne göremiyorum?

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

bir hata yakaladım

İşte kodun kendisi:

i = 6 için Correcton_index7[i+2] (i+2=8) dizinin ötesine geçemez . Üstelik benzer bir önceki döngü yemin etmez. Ne göremiyorum?

Düzeltmede3[ 3 ]; üç öğe belirtiyorsunuz.
Ve döngüyü dört kez çalıştırıyorsunuz.

Düzeltmede7[ 7 ]; yedi öğe belirtirsiniz.
Ve döngüyü sekiz kez çalıştırıyorsun.

 
Roman :

Düzeltmede3[ 3 ]; üç öğe belirtiyorsunuz.
Ve döngüyü dört kez çalıştırıyorsunuz.

Düzeltmede7[ 7 ]; yedi öğe belirtirsiniz.
Ve döngüyü sekiz kez çalıştırıyorsun.

Parmakları sayarız: i=0 ve her döngüde 1 artar. i<7 iken çalışır. Soru şu (parmaklarınıza güvenin) döngü kaç kez tamamlanacak?

 
Evet, üzgünüm, döngü koşulunda = olmadığını görmedim

Ve burada sorun olamaz mı?
correcton_index[ 0 ]   = 1 ;
correcton_index3[ 0 ]  =  1 ;   
correcton_index7[ 0 ]  = 1 ;
Sıfır eleman belirtirsiniz ve oraya bir değer atarsınız.
 
Roman :
Evet, üzgünüm, döngü koşulunda = olmadığını görmedim

Ve burada sorun olamaz mı?
Sıfır eleman belirtirsiniz ve oraya bir değer atarsınız.

Yardım etmeye istekli olduğunuz için teşekkür ederiz, ancak önce dizilerle kendiniz ilgilenin. )))

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

Yardım etmeye istekli olduğunuz için teşekkür ederiz, ancak önce dizilerle kendiniz ilgilenin. )))

Bir dizi bildirmek ve bir dizinin öğeleri üzerinde yineleme yapmak farklı şeylerdir))

 
Roman :

Dizileri bildirmek ve dizi öğelerini yinelemek iki farklı şeydir))

   int       correcton_index7[ 9 ];         // объявление
            correcton_index7[ 0 ]  = 1 ;   // присвоение значения
            correcton_index7[ 1 ]  = ( int ) MathRound (correcton_index3[ 1 ] / 2 );
Roman, öğretmeden önce kendin öğren.