Mors kodu - sayfa 5

 
Mors kodu sürümü "1.004": hata düzeltildi - desen geriye doğru okundu.
Dosyalar:
Morse_code.mq5  15 kb
 
Vasiliy Sokolov :

Soru: 64 bitte gerekli kombinasyonla çakışan bir kombinasyonun piyasada görünme olasılığı nedir? Cevap: (1/2^64)*BarsCount. Onlar. %100'e yakın bir olasılıkla böyle bir kombinasyon bulunmayacaktır. Onlar. Açıkçası, int veya long sayı tek başına kalıbı tam olarak tanımlayamaz, bu nedenle kalıbın uzunluğunu gösteren ek bir parametre gereklidir.

64 bitin tümüne bakarsanız budur. Ama bu açıkça gereksiz.

Benzer çalışmalar yaptığımda, bir şamdan deseninin uzunluğunu 5'ten fazla almanın tavsiye edilmediğini öğrendim. çok büyük olduğu ortaya çıktı, 3 uzunluk yeterli.

Desenimizin uzun bir uzunluğu varsa, "karakteristik özellikler" ayarlamak ve uzunluğu minimum ve maksimum değerlerle sınırlamak çok daha uygundur.

 

Henüz oluşturmadım, ancak genel anlamda fikir şu şekilde: iki parametre - 0 ile 3 arasındaki uzunluk ve int parametresi. Bu sayı zaten EA (Sözde bit gösterimi) içinde yorumlanıyor:

int Uzunluk (diğer adıyla maske) Sözde bit gösterimi
0 X 0
1 X 1
2 xx 00
3 xx 01
4 xx on
5 xx on bir
6 xxx 000
7 xxx 001
sekiz xxx 010
dokuz xxx 011
on xxx 100
on bir xxx 101
12 xxx 110
on üç xxx 111

Geriye bu parametrelerin nasıl kodlanacağına karar vermek kalıyor. Doğrudan çözüm: her bir int parametresinin (tablonun ilk sütunu) bir sözde bit temsiline (üçüncü sütun) karşılık geldiği bir yapı. Maske yalnızca beş karakterle (ххххх) sınırlıysa, yapı çok büyük olmayacaktır.

Ve en önemlisi - optimize edici yapıyı düzenlemenize izin verir!

 

Üç mum için, özellikler penceresinde üç ayrı parametre yapabilirsiniz. Bir taşla iki kuş aynı anda öldürülür - hem görsel hem de optimize edilmiş.

Aynı şey 10 mum için de geçerlidir.

 
Dmitry Fedoseev :

Üç mum için, özellikler penceresinde üç ayrı parametre yapabilirsiniz. Bir taşla iki kuş aynı anda öldürülür - hem görsel hem de optimize edilmiş.

Aynı şey 10 mum için de geçerlidir.

destek

 input bool svecha1 = true ;
input bool svecha2 = false ;
input bool svecha3 = true ;
input bool svecha4 = false ;
input bool svecha5 = true ;
 
Vladimir Karputov :

Henüz oluşturmadım, ancak genel anlamda fikir şu şekilde: iki parametre - 0'dan 3'e kadar olan uzunluk ve int parametresi. Bu sayı zaten EA (Sözde bit gösterimi) içinde yorumlanıyor:

int Uzunluk (diğer adıyla maske) Sözde bit gösterimi
0 X 0
1 X 1
2 xx 00
3 xx 01
4 xx on
5 xx on bir
6 xxx 000
7 xxx 001
sekiz xxx 010
dokuz xxx 011
on xxx 100
on bir xxx 101
12 xxx 110
on üç xxx 111

Geriye bu parametrelerin nasıl kodlanacağına karar vermek kalıyor. Doğrudan çözüm: her bir int parametresinin (tablonun ilk sütunu) bir sözde bit temsiline (üçüncü sütun) karşılık geldiği bir yapı. Maske yalnızca beş karakterle (ххххх) sınırlıysa, yapı çok büyük olmayacaktır.

Ve en önemlisi - optimize edici yapıyı düzenlemenize izin verir!


İşte x'ten xxx'e bir maske için bir numaralandırma:

 //+------------------------------------------------------------------+
//| Enum pattern type: numerical or string                           |
//+------------------------------------------------------------------+
enum ENUM_PATTERN_MASK
  {
   _0=B '0' ,       // 
   _1=B '1' ,       //  
   _2=B '00' ,       // 
   _3=B '01' ,       // 
   _4=B '10' ,       // 
   _5=B '11' ,       // 
   _6=B '000' ,     // 
   _7=B '001' ,     // 
   _8=B '010' ,     // 
   _9=B '011' ,     // 
   _10=B '100' ,     // 
   _11=B '101' ,     // 
   _12=B '110' ,     // 
   _13=B '111' ,     // 
  };
 

Mors kodu sürümü "1.005"

İşte bir çözüm: maske bir numaralandırma olarak verilir

 //+------------------------------------------------------------------+
//| Enum pattern mask                                                |
//+------------------------------------------------------------------+
enum ENUM_PATTERN_MASK
  {
   _0    =   0     ,   // 0
   _1    =   1     ,   // 1

   _2    =   2     ,   // 00
   _3    =   3     ,   // 01
   _4    =   4     ,   // 10
   _5    =   5     ,   // 11

   _6    =   6     ,   // 000
   _7    =   7     ,   // 001
   _8    =   8     ,   // 010
   _9    =   9     ,   // 011
   _10   =   10    ,   // 100
   _11   =   11    ,   // 101
   _12   =   12    ,   // 110
   _13   =   13    ,   // 111

   _14   =   14    ,   // 0000
   _15   =   15    ,   // 0001
   _16   =   16    ,   // 0010
   _17   =   17    ,   // 0011
   _18   =   18    ,   // 0100
   _19   =   19    ,   // 0101
   _20   =   20    ,   // 0110
   _21   =   21    ,   // 0111
   _22   =   22    ,   // 1000
   _23   =   23    ,   // 1001
   _24   =   24    ,   // 1010
...

OnInit() içinde, maske ConvertNumberToString işlevinde " sExtMorseCode " dize değişkenine (" sExtMorseCode " değişkeni genel program düzeyinde bildirilir) çevrilir :

 //+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool ConvertNumberToString( const ENUM_PATTERN_MASK num_mask, string &text)
  {
   bool result= true ;
//---
   switch (num_mask)
     {
       case 0 :  text= "0" ; break ;
       case 1 :  text= "1" ; break ;
       case 2 :  text= "00" ; break ;
       case 3 :  text= "01" ; break ;
       case 4 :  text= "10" ; break ;
       case 5 :  text= "11" ; break ;
       case 6 :  text= "000" ; break ;
       case 7 :  text= "001" ; break ;
       case 8 :  text= "010" ; break ;
       case 9 :  text= "011" ; break ;
       case 10 : text= "100" ; break ;
...
       case 53 : text= "10111" ; break ;
       case 54 : text= "11000" ; break ;
       case 55 : text= "11001" ; break ;
       case 56 : text= "11010" ; break ;
       case 57 : text= "11011" ; break ;
       case 58 : text= "11100" ; break ;
       case 59 : text= "11101" ; break ;
       case 60 : text= "11110" ; break ;
       case 61 : text= "11111" ; break ;
       default : text= "" ; return ( false );
     }
//---
   return (result);
  }

İki sorunu çözdü:

1). kullanıcı, giriş parametrelerinde "0101" biçiminde bir model görür:

Giriş parametresinin rahat görünümü

2). Giriş parametresi, test cihazında optimizasyona mükemmel bir şekilde uygundur.

Dosyalar:
Morse_code.mq5  20 kb
 
Vladimir Karputov :

Mors kodu sürümü "1.005"

İki sorunu çözdü:

1). kullanıcı, giriş parametrelerinde "0101" biçiminde bir model görür:

2). Giriş parametresi, test cihazındaki optimizasyona mükemmel bir şekilde uygundur.

Kullanıcı, orijinal fikre göre matematiksel hesaplamalar yapmadan bir mum kombinasyonu ayarlayabilir mi?

 
Pyxis :

Kullanıcı, orijinal fikre göre matematiksel hesaplamalar yapmadan bir mum kombinasyonu ayarlayabilir mi?


Evet, herhangi bir matematiksel hesaplama olmadan. Ve şimdi kombinasyonu manuel olarak girmenize gerek yok - sadece " desen maskesi " açılır listesinden uygun mum kombinasyonunu seçin.
 
Test cihazında çalıştırdım (tam optimizasyon) Mors kodu sürümü "1.005" - en saf haliyle, desenler (şimdi olduğu gibi) hiç de balık değil :(.
Neden: