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ı.
[Silindi]  

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.

[Silindi]  
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.
[Silindi]  
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))

[Silindi]  
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.