Programlamayı öğrenmeme yardım et. - sayfa 2

 
Alexey Viktorov :

Böyle bir örnek için teşekkürler.

Her şeyi bu şekilde düzenlemeyi ve xs gibi yazmamayı tercih eden tek kişinin ben olduğumu sanıyordum.

xs - Rusçaya çevrilmiş “Bilmek istiyorum” ... kötü düşünme ...

Her türlü uzun PositionGet ... vb. yazmamak için standart kütüphaneden sınıfları kullanmak daha iyidir.

 
Dmitry Fedoseev :
Teşekkür ederim. sindiriyorum.
 
Alexey Viktorov :

Böyle bir örnek için teşekkürler.

Her şeyi bu şekilde düzenlemeyi ve xs gibi yazmamayı tercih eden tek kişinin ben olduğumu sanıyordum.

Sorun ne?

" coder nazi" için almayın, ancak örneğin, bu tür yapılar beni zorluyor:

 for ( int index= PositionsTotal ()- 1 ; index>= 0 ; index--) { /* тело цикла */ }

Göz ağrıyor. " xs nasıl " değil, şöyle yapmak daha iyi değil mi:

 int index = PositionsTotal ();

while (index-- > 0 ) { /* тело цикла */ }

Veya bu "bok kodu":

 for ( int i= 0 ;i< PositionsTotal ();i++)

nerede PozisyonlarToplam ()   döngünün her yinelemesinde çağrılır!

Normal bir kodlayıcı, dizinlerine göre konumlar üzerinde yinelenen (zayıf bir şekilde burada olmayan) bir döngünün gövdesinde asla manipülasyon yapmaz ve bu, sayılarında bir değişikliğe yol açar. Bu sadece cehalet ve buggy kodunun akrobasisidir. Böyle bir şey bekleniyorsa, iyi bir şekilde, tüm döngüyü yeniden başlatmak gerekir.

Ve bazı insanlar böyle bir şeyi sever:

 double Lot;

// где-то вычисляется значение Lot, финальная проверка и приведение к допустимым границам фееричны:
if (Lot > MaxLot) Lot = MaxLot;
if (Lot < MinLot) Lot = MinLot;

// а то и вовсе:
if (Lot > MaxLot) Lot = MaxLot;
   else
     if (Lot < MinLot) Lot = MinLot;

// а не проще ли сделать так?
Lot = MathMin ( MathMax (Lot, MinLot), MaxLot);

Her ne kadar yeni başlayanlar için ve optimizasyon için ek saatlerce işlemci süresiyle ilgilenmese de, BASIC'teki okul "programlama" derslerinden bu tür "eğer aksi takdirde-her şey" yapıları daha anlaşılır.

Ve tüm bunlar kopyala-yapıştır ilkesine göre koddan koda kopyalanır .

Yani burada...

 
Tio Nisla :

...

Veya bu "bok kodu":

nerede PozisyonlarToplam ()   döngünün her yinelemesinde çağrılır!

...

Elbette? Akıllı olmak istedim ama bir galoşta oturdum ...

Ve bunun için özel olarak mı kayıt oldunuz? İşte burada - ilk gönderiden ve bir su birikintisine ...

 
Dmitry Fedoseev :

Elbette? Akıllı olmak istedim ama bir galoşta oturdum ...

Ve bunun için özel olarak mı kayıt oldunuz? İşte burada - ilk gönderiden ve bir su birikintisine ...

Eee canım. "Malzemeyi öğrenin", Alger ve Knut. Kişiliğe gerek yok.

Tamam, açıklamama izin verin:

    for  (            int i= 0            ;          i< PositionsTotal ()            ;    i++     )    { }
    ^^^               ^^^^^^^                       ^^^^^^^^^^^^^^^^^^                 ^^^          ^^^
объявление   |   объявление переменной   | проверка условия выполнения цикла:     | инкремент  | тело цикла
  цикла      | типа "int", инициализация | 'i' < значения, возвращаемого функцией | переменной |
типа "for"   |       значением '0'       | которая вызывается на каждую итерацию  |

Anlaşıldı mı canım?

Değilse, [ctrl+f ile başlayan https://learnc.info/c/loop.html dikkatlice okuyun, "Döngü İçin" arayın]

Linki bulmaya tenezzül bile etmedim.

Ve yetkin, güzel, özlü kod yazmayı öğrenin. Montajcı ile başlamanız gerekir, ancak her saat döngüsünün ve baytın önemli olduğu mikro denetleyicilerde.

not

Burada, uzmana "for" döngüsünün basit bir örneğini göstermek için çok tembel değildim.

 int OnInit ()
{
   for ( int i= 0 ;i<somefunc();i++) PrintFormat ( "array[%d]\n" , i);
   return ( INIT_SUCCEEDED );
}

int somefunc() {
   static int count = 0 ;
   PrintFormat ( "Туточки уже %d-й раз!\n" , ++count);
   return 3 ; // это типа количество чего-то там, элементов массива например
}

Ve bu koşunun sonucu:

 2021.05 . 03 08 : 01 : 36.343 show_the_shitz EURJPY,H1: initialized
2021.05 . 03 08 : 01 : 36.343 show_the_shitz EURJPY,H1: Туточки уже 4 -й раз!
2021.05 . 03 08 : 01 : 36.343 show_the_shitz EURJPY,H1: array[ 2 ]
2021.05 . 03 08 : 01 : 36.343 show_the_shitz EURJPY,H1: Туточки уже 3 -й раз!
2021.05 . 03 08 : 01 : 36.343 show_the_shitz EURJPY,H1: array[ 1 ]
2021.05 . 03 08 : 01 : 36.343 show_the_shitz EURJPY,H1: Туточки уже 2 -й раз!
2021.05 . 03 08 : 01 : 36.343 show_the_shitz EURJPY,H1: array[ 0 ]
2021.05 . 03 08 : 01 : 36.343 show_the_shitz EURJPY,H1: Туточки уже 1 -й раз!

İşlevin yalnızca her yinelemede değil, finalde +1 kez bile çağrıldığı fark edilir.

İşte burada.

Циклы в Си. Циклы с постусловием, предусловием, Цикл for со счётчиком.
Циклы в Си. Циклы с постусловием, предусловием, Цикл for со счётчиком.
  • 1989.04.14
  • Sypachev S.S. 1989-04-14 sypachev_s_s@mail.ru Stepan Sypachev
  • learnc.info
Циклы в Си: цикл while с предусловием, цикл do while с постусловием, цикл for со сщётчиком. Бесконечный цикл. Оператор break. Оператор continue. Примеры работы с циклами
 
Tio Nisla :

Eee canım. "Malzemeyi öğrenin", Alger ve Knut. Kişiliğe gerek yok.

Tamam, açıklamama izin verin:

Anlaşıldı mı canım?

Değilse, [ctrl+f ile başlayan https://learnc.info/c/loop.html dikkatlice okuyun, "Döngü İçin" arayın]

Bir bağlantı bulmak için çok tembel bile değil.

Ve yetkin, güzel, özlü kod yazmayı öğrenin. Montajcı ile başlamanız gerekir, ancak her saat döngüsünün ve baytın önemli olduğu mikro denetleyicilerde.

not

Burada, uzmana "for" döngüsünün basit bir örneğini göstermek için çok tembel değildim.

Ve bu koşunun sonucu:

İşlevin yalnızca her yinelemede değil, finalde +1 kez bile çağrıldığı fark edilir.

İşte burada.

alkışlıyorum! Devam etmek...


 
Dmitry Fedoseev :

alkışlıyorum! Devam etmek...


Neden bu kadar dağınıksın? Evet, internette bile yayınlandı. Annem azarlayacak!
 
Bir kod insanı rahatsız ediyorsa, gözünü acıtıyorsa, dünyada daha bir çok meslek vardır: kapıcı, yükleyici, temizlikçi, tertipçi...
 
Dmitry Fedoseev :

Elbette? Akıllı olmak istedim ama bir galoşta oturdum ...

Ve bunun için özel olarak mı kayıt oldunuz? İşte burada - ilk gönderiden ve bir su birikintisine ...

İlginç bir konuşmanız var)))

Beyler, bireyler bireylerdir, ama yine de gerçeği öğrenelim.

bu örnekte görüyorum ki   PozisyonlarToplam ()   döngünün her yinelemesinde çağrılır.

Sen, Dmitry, derleyicinin farklı şekilde çalıştığını iddia ediyorsun. Anlamıyorum. Açıklamak.

 //+------------------------------------------------------------------+
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
CTrade         m_trade;
CSymbolInfo    m_symbol;
//-------------------------------------------------------------------+
void OnInit ()
  {
   m_symbol.Name( Symbol ());
   m_symbol.RefreshRates();

   for ( int i = 0 ; i < 10 ; i++)
     {
      m_trade.Buy( 1 , _Symbol , m_symbol.Ask() + i * 2 * _Point , 0 , 0 );
     }

//---закомментировать не нужное
   for ( int i = 5 ; i < PositionsTotal (); i++) // так удаляются только 3 сделки
     {
      m_trade.PositionClose( _Symbol );
     }
//---закомментировать не нужное
   int index = PositionsTotal ();
   for ( int i = 5 ; i < index; i++) // так удаляются 5 сделок
     {
      m_trade.PositionClose( _Symbol );
     }

//вывод: PositionsTotal() вызывается на каждой итерации
  }
//+------------------------------------------------------------------+

işlevi olduğunu söylemek isterseniz   PositionsTotal () her seferinde pozisyonları yeniden hesaplamaz, sadece açık pozisyonların sayısının kaydedildiği değişkenin değerini döndürür, o zaman evet, haklısınız, başka bir değişken bildirmenin bir anlamı yok, ama o zaman ne yapar? derleyici bununla ne ilgisi var?

Ve eğer bu fonksiyon her seferinde açık pozisyonları yeniden hesaplarsa, o zaman derleyicinin bu fonksiyonun değerinin daha sonraki hesaplamaları etkileyip etkilemediğini anlaması ve buna dayanarak bir fonksiyonu veya bir değişkeni ikame etmesi gerektiği ortaya çıkar.

Bir şey benim için çalışmıyor.

 
Aleksandr Slavskii :

İlginç bir konuşmanız var)))

Daha önce eklemek istedim, eğer somefunc() işlevi, bir şeyin miktarını döndürmenin yanı sıra, başka bazı manipülasyonlar gerçekleştirirse, örneğin, ticaret parametrelerini hesaplarsa, o zaman bu tür kullanım ince eserler üretir ve kodun yazarını bir şeye yönlendirebilir. stupor: "Ne??? 4 kez nasıl??? O_o F$#@!!! Orada da üç kez olmalı? Danışman neden bana yalan söylüyor?". Bu, uzmanı saçının köklerine kadar çileden çıkaran "bok kodu" dediğim şeydi. Odaklanmadım çünkü belli ki ama sen benim için yaptın. Ancak diziyi yeniden başlatmadan dinamik olarak hesaplanan bir dizinle adreslemenin bir şey olduğu gerçeğini hesaba katmadılar. Çıplak "sya"da bu genellikle GPF'ye, akıllı işaretçiler ve dizilerle "artılar"da bir istisna ve işleyicisine yol açar. Mql'de neden olduğu belli değil.