MQL5'te OOP hakkında sorular - sayfa 95

 
Maxim Kuznetsov :

GA hakkında daha çok "kırmızı bir kelime için". Peki, Gray kodu yakınsamaya nasıl yardımcı olabilir? bu sadece teorik...

aynı başarı ile rastgele karıştırabilirsiniz

Hiçbir şey söylemeyeceğim, uzun süre internette yazdıklarına inanmıyorum, her şeyi kontrol etmeye çalışıyorum

İşte Gray koduna dönüştürmek ve geri dönmek için çalışan kodlar

 //+------------------------------------------------------------------+
uint IntToGrey( const uint value ) // https://e-maxx.ru/algo/gray_code
  {   return ( value ^ ( value >> 1 )); }
//+------------------------------------------------------------------+
uint GreyToInt( const uint value ) // https://e-maxx.ru/algo/gray_code
  {
   uint n = 0 ;
   for ( uint g = value ; g != 0 ; g >>= 1 )
     {
      n ^= g;
     }
   return (n);
  }
//+------------------------------------------------------------------+
 
Ve bu genetik algoritmayı nasıl etkileyebilir? Genetik olan, tamamen genetik ise, değerlere tepki vermemelidir. Ek olarak bir tür ortalama alma veya gradyan inişi kullanılırsa, bunun bir etkisi olabilir. Ancak o zaman sorunu doğrudan çözmek daha iyidir - parametreyi dizi boyunca filtreleyin ve diziyi karıştırın. Özellikler penceresinden optimize edilecek parametrenin değeri, dizi öğesinin indeksidir ve EA'nın kendisinde, dizideki değeri kullanın. Sonra optimize ediciyi aldatmak için ortaya çıkacak. Ancak yalnızca yakınsama, ortalama veya gradyan inişi nedeniyle gerçekleşirse. Ama bu tamamen genetik bir algoritmaysa, bu kodlamanın ne işe yaradığını hayal bile edemiyorum. Amaç ne? Bacaklar nereden büyür?
 

bu kod var:

 class A
{
private :
   const int _a;
public :
   A( const int a): _a(a) { Print (_a); }
};
//+------------------------------------------------------------------+
class B
{
private :
   const A a;
public :
   B( const int b): a(b) {}
};
//+------------------------------------------------------------------+
void OnStart ()
{
   B b( 3 ); // 3
}
//+------------------------------------------------------------------+

her şey yolunda, ancak bir dizi A nesnesine ihtiyacım var, yani böyle gerekir:

 class B
{
private :
   const A a[ 2 ];
public :
   B( const int b): a[ 0 ](b),a[ 1 ](b) {}   //'[' - member(s) initialization expected
                                       // 'a' - explicit initializer for arrays not allowed
};

İşaretçiler kullanmadan bir dizi nesne için bir kurucu çağırmak mümkün müdür?

 
Igor Makanu :

bu kod var:

her şey yolunda, ancak bir dizi A nesnesine ihtiyacım var, yani böyle gerekir:

İşaretçiler kullanmadan bir dizi nesne için bir kurucu çağırmak mümkün müdür?

Numara. Sadece koltuk değneği aracılığıyla.
 

bu kod için mümkün mü:

 //+------------------------------------------------------------------+
struct LIST;
struct MyStruct
{
   double             d_data;
   int                i_data;
   MyStruct() {}
   MyStruct( const int i_v, const double d_v): d_data(d_v), i_data(i_v) {}
   LIST               operator +(MyStruct &value)
   {
      LIST result;
       ArrayResize (result.arr, 2 , 10 );
      result.arr[ 0 ] = this ;
      result.arr[ 1 ] = value;
       return (result);
   }
   MyStruct           operator *( const double mult)
   {
      MyStruct result = this ;
      result.d_data *= mult;
       return (result);
   }
};
//+------------------------------------------------------------------+
struct LIST
{
   MyStruct          arr[];
   LIST               operator +(MyStruct &value)
   {
       int last = ArraySize ( this .arr);
       ArrayResize ( this .arr, last + 1 , 10 );
       this .arr[last] = value;
       return ( this );
   }
};
//+------------------------------------------------------------------+
void OnStart ()
{
   MyStruct a( 1 , 1.11 ), b( 2 , 2.22 ), c( 3 , 3.33 );
   LIST x = a + b + c * 2 ;
   ArrayPrint (x.arr);
//    [d_data] [i_data]
//[0]  1.11000        1
//[1]  2.22000        2
//[2]  6.66000        3
}
//+------------------------------------------------------------------+

LIST için şablon / şablon yap?

ilk defa çalışmadı :(

 
Igor Makanu :

bu kod için mümkün mü:

LIST için şablon / şablon yap?

ilk defa çalışmadı :(

Bugün nasılsın. götürmek

UPD: hmm... çok akıllısın)))

UPD: bir yam yakalayın)))

 //+------------------------------------------------------------------+
template < typename T>
struct LIST
{
   T          arr[];
   LIST<T>               operator +(T &value)
   {
       int last = ArraySize (arr);
       ArrayResize (arr, last + 1 , 10 );
      arr[last] = value;
       return ( this );
   }
};
//+------------------------------------------------------------------+
struct MyStruct
{
   double             d_data;
   int                i_data;
   MyStruct() {}
   MyStruct( const int i_v, const double d_v): d_data(d_v), i_data(i_v) {}
   LIST<MyStruct>               operator +(MyStruct &value)
   {
      LIST<MyStruct> result;
       ArrayResize (result.arr, 2 , 10 );
      result.arr[ 0 ] = this ;
      result.arr[ 1 ] = value;
       return (result);
   }
   MyStruct           operator *( const double mult)
   {
      MyStruct result = this ;
      result.d_data *= mult;
       return (result);
   }
};
//+------------------------------------------------------------------+
void OnStart ()
{
   MyStruct a( 1 , 1.11 ), b( 2 , 2.22 ), c( 3 , 3.33 );
   LIST<MyStruct> x = a + b + c * 2 ;
   ArrayPrint (x.arr);
//    [d_data] [i_data]
//[0]  1.11000        1
//[1]  2.22000        2
//[2]  6.66000        3
}
 
Vladimir Simakov :

Bugün nasılsın. götürmek

UPD: hmm... çok akıllısın)))

UPD: bir yam yakalayın)))

Teşekkür ederim! - İşler!

ve sen ne düşündün? kod minimalist, görevleri yerine getiriyor - bir dizi yapı elde etmek istedim, listelerle her zaman uygun değil, her şey çalışıyor, bu kodu kullanmanın standart dışı durumlarının simüle edilebileceği açık, ancak bir düzine satırla kod

 

başka birinin özel alanına erişirken bu kod neden derleyici hatası vermiyor:

 class A
{
private :
   int _value;
public :
   void set ( const int value )      { _value = value ;    }
   int    get ()                     { return (_value);    }
   void set (A &a, const int value ){ a._value = value ;  }
};

void OnStart()
{
  A x,y;
  x. set ( 10 );
  y. set ( 20 );
  Print( "x = " ,x. get ());   // 10
  Print( "y = " ,y. get ());   // 20
   y. set (x, 777 );
  Print( "x = " ,x. get ());   // 777
  Print( "y = " ,y. get ());   // 20
}
//+------------------------------------------------------------------+
 
bu senin özel alanın
 
Andrei Trukhanovich :
bu senin özel alanın

Tamam teşekkürler!

ve türetilmiş sınıf , özel alanları değiştirmek için aynı şekilde üst sınıftaysa - "yasal" mı?

onlar. aşağı yukarı şöyle:

 class B: private A
{
        A a;
         void setA(A &obj, const int value ) { a. set (obj, value ); }
}
....
A x;
B y;
y.(x. 55 )