[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 3. - sayfa 436

 

Tamsayı türündeki tüm öğelerin 1'den 100'e kadar artan düzende sıralandığı ArrayTemp[100] vardır.

İlk 1-50 elemanı çıkarmak ve dizinin boyutunu [50]'ye düşürmek gerekir.

Bunu, dizinin 2. yarısını geçici olana kopyalayarak, orijinal olanı yeniden boyutlandırarak ve ardından geçici olandan orijinal olana kopyalayarak yapmayı düşündüm.

- Daha kolay bir yolu var mı?

Teşekkür ederim!

 
chief2000 :

Tamsayı türündeki tüm öğelerin 1'den 100'e kadar artan düzende sıralandığı ArrayTemp[100] vardır.

İlk 1-50 elemanı çıkarmak ve dizinin boyutunu [50]'ye düşürmek gerekir.

Bunu, dizinin 2. yarısını geçici olana kopyalayarak, orijinal olanı yeniden boyutlandırarak ve ardından geçici olandan orijinal olana kopyalayarak yapmayı düşündüm.

- Daha kolay bir yolu var mı?

Teşekkür ederim!



Azalan düzende sıralayabilir ve ardından diziyi yeniden boyutlandırabilirsiniz . Daha hızlı olacağını düşünüyorum. Ama kim bilir?)
 
Figar0 :

Azalan düzende sıralayabilir ve ardından diziyi yeniden boyutlandırabilirsiniz. Daha hızlı olacağını düşünüyorum. Ama kim bilir?)

Teşekkür ederim!

 
Vinin :

İlk adımların güzel, Olga Alexandrovna. 330 satır kod


Güzel gün! Bunu nasıl övgü ya da tam tersi olarak kabul edeceğimi bilmiyorum, ama her durumda, cevap için teşekkürler.

Ne yazık ki hala bir çözüm bulamıyorum, bu yüzden bu şekilde görüyorum - ana kalite ve dilbilgisi ve bununla, şimdilik, anladığım kadarıyla bir boşluk var, çünkü kod gitmedi.

soruma cevap bekliyorum...

 

İyi insanlar elinden geldiğince yardım eder

İşte koşula göre, sürenin bitiminden sonra siparişlerin silinmesi gereken bir kod, bu koşul

MyCurrentTime >= OrderExpiriation && OrderMagicNumber () == MagicNumber

Peki aslında, bu koşulu ilk if deyimine eklerseniz, o zaman içindeki diğer deyim bu koşulu dikkate almıyor?

Yani bu kod çalışmaz ve bekleyen tüm siparişleri bir kerede siler.

   for ( int counter= 0 ;counter< OrdersTotal ();counter++)
    {
     if ( OrderSelect (counter,SELECT_BY_POS,MODE_TRADES) == false) break ;

     if (MyCurrentTime >= OrderExpiriation && OrderMagicNumber () == MagicNumber) //Если текущее время больше чем время истечения
      {
        
        
       if ( OrderType () == OP_BUYLIMIT || OrderType () == OP_SELLLIMIT || OrderType () == OP_BUYSTOP || OrderType () == OP_SELLSTOP)
        {
         OrderDelete ( OrderTicket ());
        }
        
      }
    }

Ancak bu kod çalışır ve siparişleri hemen silmez.

   for ( int counter= 0 ;counter< OrdersTotal ();counter++)
    {
     if ( OrderSelect (counter,SELECT_BY_POS,MODE_TRADES) == false) break ;

     if (MyCurrentTime >= OrderExpiriation && OrderMagicNumber () == MagicNumber) //Если текущее время больше чем время истечения
      {
        
        
       if ( OrderType () == OP_BUYLIMIT || OrderType () == OP_SELLLIMIT || OrderType () == OP_BUYSTOP || OrderType () == OP_SELLSTOP && MyCurrentTime >= OrderExpiriation && OrderMagicNumber () == MagicNumber)
        {
         OrderDelete ( OrderTicket ());
        }
        
      }
    }
 

Söyle bana, kırılma noktası ne için? Forumda arama yaptı ama herhangi bir bilgi bulamadı. Bu nasıl kullanılır?

 
chief2000 :

Tamsayı türündeki tüm öğelerin 1'den 100'e kadar artan düzende sıralandığı ArrayTemp[100] vardır.

İlk 1-50 elemanı çıkarmak ve dizinin boyutunu [50]'ye düşürmek gerekir.

Bunu, dizinin 2. yarısını geçici olana kopyalayarak, orijinal olanı yeniden boyutlandırarak ve ardından geçici olandan orijinal olana kopyalayarak yapmayı düşündüm.

Hiçbir şey yapamazsınız ve 50. öğeyi ilk öğe olarak kabul edebilirsiniz. ArrayCopy zaten biraz zaman alacak.
 
sss2019 :

İyi insanlar elinden geldiğince yardım eder

İşte koşula göre, sürenin bitiminden sonra siparişlerin silinmesi gereken bir kod, bu koşul

Peki aslında, bu koşulu ilk if deyimine eklerseniz, o zaman içindeki diğer deyim bu koşulu dikkate almıyor?

Yani bu kod çalışmaz ve bekleyen tüm siparişleri bir kerede siler.

Ancak bu kod çalışır ve siparişleri hemen silmez.

Genel olarak, son siparişten başlayarak siparişleri gözden geçirmek iyi bir işarettir. İkinci durumda, koşula parantez eklemekten korkmayın.

 
fore-x :

Söyle bana, kırılma noktası ne için? Forumda arama yaptı ama herhangi bir bilgi bulamadı. Bu nasıl kullanılır?

çalışmıyor. Normal bir hata ayıklayıcı olacağını düşünerek yaptılar ama yapmadılar.
 
splxgf :
Hiçbir şey yapamazsınız ve 50. öğeyi ilk öğe olarak kabul edebilirsiniz. ArrayCopy zaten biraz zaman alacak.

Gerçek şu ki, işlem sırasında dizi periyodik olarak daha fazla sayıda öğe içermelidir (genişler), bu da optimizasyon / test hızını etkiler. Bu nedenle, "olumlu" anlarda onu orijinal durumuna geri getiriyorum.

Figar0'ın çözümü: benimkinden daha basit olduğu ortaya çıktı ve iyi çalışıyor.

Teşekkür ederim!