Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 131

 
Sepulca :

Beyin için iyi bir bulmaca. Şu şekilde deneyebilirsiniz:

4. boyut için test sonucu. Dizinin X öğesi seçilmemişse, aksi takdirde boyut 6 için dizi[rakam] ve parça kullanın:


Kodunuza baktım, ancak aşağıdakiler net değil - hiçbir aşamada orijinal dizinin verilerini okumadınız. sadece içindeki eleman sayısı
 
//chief2000 :

Kodunuza baktım, ancak aşağıdakiler net değil - hiçbir aşamada orijinal dizinin verilerini okumadınız. sadece içindeki eleman sayısı


Orijinal dizinin verilerine neden ihtiyacım var? Ben sadece senin fikrine göre dizi elemanları seçiyorum. Ve örnekteki verilerle ne yapacağınız size kalmış. Onlar. N[0]=3 ise, N[1]=2 ise, N[2]=1 ise, N[3]=0 ise, daha fazla analiz için dizi[N[0]], dizi[N[ kullanırız 1 ]], dizi[N[2]], dizi[N[3]] ve eğer N[0]=3, N[1]=2, N[2]<0, N[3]<0, daha sonra daha fazla analiz için sadece dizi[N[0]], dizi[N[1]] kullanıyoruz çünkü N[2]<0 ve N[3]<0. Gönderinize göre tekrarlanmayan tüm olası kombinasyonları sıralar (dizilerin numaralandırılmasının 0'dan ArraySize(array)-1'e başladığı gerçeğini dikkate alarak):

[ 4 ] <=> { 1 2 3 4 }

1 , 12 , 13 , 14 , 123 , 124 , 134 , 1234 , 
2 , 23 , 24 , 234 , 
3 , 34 ,
4

Ardından algoritmanıza göre ilerleyin:

 if (NewComb){
// Получили новую комбинацию в массиве N размерностью k    
    
     for (i= 0 ;i<k;i++){ // Перебираем массив N. Если N[i]<0 то элемент array[N[i]] не участвует в выборке.
                     // Например, для размерности 4 если N[0]=3,N[1]=1,N[2}<0,N[3]<0 то это выборка array[3] и array[1]
                     //                             если N[0]=3,N[1]=2,N[2]=1,N[3]=0 то это выборка array[3] и array[2] array[1] и array[0]
     if (N[i]>= 0 ){// использовать как-то array[N[i]]}
    }

   }
 
Sepulca :


Orijinal dizinin verilerine neden ihtiyacım var? Ben sadece senin fikrine göre dizi elemanları seçiyorum. Ve örnekteki verilerle ne yapacağınız size kalmış. Onlar. N[0]=3 ise, N[1]=2 ise, N[2]=1 ise, N[3]=0 ise, daha fazla analiz için dizi[N[0]], dizi[N[ kullanırız 1 ]], dizi[N[2]], dizi[N[3]] ve eğer N[0]=3, N[1]=2, N[2]<0, N[3]<0, daha sonra daha fazla analiz için sadece dizi[N[0]], dizi[N[1]] kullanıyoruz çünkü N[2]<0 ve N[3]<0. Gönderinize göre tekrarlanmayan tüm olası kombinasyonları sıralar (dizilerin numaralandırılmasının 0'dan ArraySize(array)-1'e başladığı gerçeğini dikkate alarak):

Ardından algoritmanıza göre ilerleyin:


Şimdi açık (bir sonraki aşamada verileri okudum, kendi olmayan kodla çalışmak olağandışı).
Çok teşekkürler!

 

Fonksiyonda bir hata bulmaya yardım edin.

Sorun şu ki, MA'nın üzerindeki çubukları sayarsak, işlev doğru değeri döndürür.

Ancak MA'nın altındaysa - işlev her zaman 1 (bir) döndürür

 int CheckFiltr ()
   {
   int i= 1 ;
   for (;;)
      {
       if ( NormalizeDouble (High[i],Norm)&& NormalizeDouble (Low[i],Norm)< NormalizeDouble ( iMA ( NULL , 0 ,PerMa, 0 ,MetMa,AplPr,i),Norm)|| NormalizeDouble (High[i],Norm)&& NormalizeDouble (Low[i],Norm)> NormalizeDouble ( iMA ( NULL , 0 ,PerMa, 0 ,MetMa,AplPr,i),Norm))
         {
         i++;
         Comment ( "Фильтр = ", i);         
         }
       else break ;
      }
   return (i);
   }
 
MarkTrade :

Fonksiyonda bir hata bulmaya yardım edin.

Sorun şu ki, MA'nın üzerindeki çubukları sayarsak, işlev doğru değeri döndürür.

Ancak MA'nın altındaysa - işlev her zaman 1 (bir) döndürür

Hazırlıksız, bu daha iyidir, ancak kodu önemli ölçüde optimize edebilirsiniz, çünkü sadece gramer düzeltildi:

 int CheckFiltr ()
   {
   int i= 1 ;
   int Norm= Digits ;
   for (;;)
      {
       if (
           (   NormalizeDouble (High[i],Norm)< NormalizeDouble ( iMA ( NULL , 0 ,PerMa, 0 ,MetMa,AplPr,i),Norm)
            && NormalizeDouble (Low[i] ,Norm)< NormalizeDouble ( iMA ( NULL , 0 ,PerMa, 0 ,MetMa,AplPr,i),Norm)
           )
          ||
           (   NormalizeDouble (High[i],Norm)> NormalizeDouble ( iMA ( NULL , 0 ,PerMa, 0 ,MetMa,AplPr,i),Norm) 
            && NormalizeDouble (Low[i] ,Norm)> NormalizeDouble ( iMA ( NULL , 0 ,PerMa, 0 ,MetMa,AplPr,i),Norm)
           )
         )

         {
         i++;
         Comment ( "Фильтр = " ,i);         
         }
       else break ;
      }
   return (i);
   }
 
paladin80 :

Örneğiniz için aslında bir fark yok ama her durumda dizinin başlangıcını ve sonunu belirtmeniz gerekiyor.

Dizi büyükse yinelemenin başlangıcı önemlidir. Örneğin, koşul genellikle dizinin sonunda tetikleniyorsa, sondan başlamak en iyisidir. Bu örnek, bir sipariş/pozisyon aramak için tipiktir. Tabii ki, bu durumda önce arama yapılırsa, program yine de bu noktaya ulaşacaktır, ancak daha fazla kaynak harcanacaktır.


Tekrar teşekkürler! Şimdi "işaretli" çubukların sayısını optimize etmeye çalıştım, ancak pencerede hiçbir sonuç yok. Baştan ve sondan saymaya çalıştım ama nafile.

 extern int number= 3 ;
//------------------------------------+
for ( int x=number; x>= 1 ; x--)
{
 if (Open[x]==Open[x- 1 ]) continue ;
     if (Open[x]<Open[x- 1 ])
   {
   //--- action
   }
 else {
     if (Open[x]>Open[x- 1 ])
   {
   //--- action
  }
 }
}
 
Sepulca :
Hazırlıksız, bu daha iyidir, ancak kodu önemli ölçüde optimize edebilirsiniz:


Bu böyle çalışır... Teşekkürler!

Sadece versiyonumun neden çalışmak istemediğini anlamak için ...

 
MarkTrade :


Bu böyle çalışır... Teşekkürler!

Sadece versiyonumun neden çalışmak istemediğini anlamak için ...


Kodunuza daha yakından bakın

 if ( NormalizeDouble (High[i],Norm)&& NormalizeDouble (Low[i],Norm)< NormalizeDouble ( iMA ( NULL , 0 ,PerMa, 0 ,MetMa,AplPr,i),Norm)
|| NormalizeDouble (High[i],Norm)&& NormalizeDouble (Low[i],Norm)> NormalizeDouble ( iMA ( NULL , 0 ,PerMa, 0 ,MetMa,AplPr,i),Norm))
     
Sadece ilk terimi sıfırla karşılaştırırsınız, yani. doğru ya da değil.
 
MarkTrade :


Bu böyle çalışır... Teşekkürler!

Sadece versiyonumun neden çalışmak istemediğini anlamak için ...

Senin kodun:

 int CheckFiltr ()
   {
   int i= 1 ;
   for (;;)
      {
       if ( NormalizeDouble (High[i],Norm)&&
           NormalizeDouble (Low[i],Norm)< NormalizeDouble ( iMA ( NULL , 0 ,PerMa, 0 ,MetMa,AplPr,i),Norm)
            ||    
           NormalizeDouble (High[i],Norm)&&
           NormalizeDouble (Low[i],Norm)> NormalizeDouble ( iMA ( NULL , 0 ,PerMa, 0 ,MetMa,AplPr,i),Norm))
         {
         i++;
         Comment ( "Фильтр = " ,i);         
         }
       else break ;
      }
   return (i);
   }

Belki daha açıktır

ayy .. zaten cevaplandı, evet normalleştirmeden yapabilirsiniz

 
Roger :


Kodunuza daha yakından bakın

Sadece ilk üyeyi sıfırla karşılaştırırsınız, yani. doğru ya da değil.


yani " a ve b c'den büyükse " ifadesi doğru değil, " a c'den büyük ve b c'den büyükse " doğru - sizi doğru mu anladım?