MQL4'te programlama üzerine çevrimiçi kitabın beta sürümü - Sergey Kovalev (SK.) - sayfa 10

 
Üzgünüm, buldum!
Evet, kılavuz gerçekten harika, ancak önceki isteğime geri dönersek - hızlı bir şekilde bakabilmek için elinizin altında olması gerekiyor.
İdeal olarak, MT'nin yeni sürümlerinde standart yardımı değiştirmeleri gerekir.
 

SK'ye

çift my_search_and_etc()
{ çift toplam[]; // fonksiyonun içindeki dizi
//.........
i=DiziMinimum(toplam,iter,0); // İzleyici: < ArrayMinimum işlevi için hatalı başlangıç konumu 0 >

//ikinci hata değişkeni
statik çift toplam[]; //
//.........
i=DiziMinimum(toplam,iter,0); // İzleyici: <ArrayMinimum işlevi için hatalı başlangıç konumu 0>
//onlar. İkinci onay işaretinde dizinin ilk öğesini dinamik olarak adresleme hatası
//......................

//................................
// doğru zaman
çift toplam[1000]; // açık bir boyut belirtmek, statik bir tür anlamına gelir
//.........
i=DiziMinimum(toplam,iter,0); // Tamam
// doğru iki
statik çift toplam[1000]; // açık boyuta reasürans
//.........
i=DiziMinimum(toplam,iter,0); // Tamam
}

 
Hayır, standart yardımı değiştirmeniz gerekmez. Bırak kalsın. Normal dil yazılım geliştiricileri, dilin açıklamasını ve onunla ilgili her türlü öğreticiyi paylaşır.
 
Korey :

SK'ye


Sorunun ne hakkında olduğu çok açık değil. Sizin tarafınızdan sunulan satır kümesi tam bir koddur (o zaman başlatma neden tekrarlanıyor?) veya parçalı satırlar (o zaman neden kaşlı ayraçlar var?). Tamamlanan kodu gönderin ve bir soru formüle edin. Kodu yayınlamak için MQL düğmesini kullanın (düzenleme penceresinin üst satırında).
 
Renat :
Sergey Kovalev'i tebrik ediyoruz!

MQL4 dil eğitiminin yayınlanması 1 Şubat'ta planlanıyor ve MQL4.community web sitesine zaten entegre edilmiş durumda. İngilizce'ye çeviri tüm hızıyla devam ediyor.

Tebrikler için teşekkürler, Renat.

Bu fırsatı değerlendirerek, MQL4 öğreticisinin MetaQuotes Software Corp. Bu benim için büyük bir onur. Güveniniz, desteğiniz ve çok yönlü yardımınız için size içtenlikle minnettarım. Ayrıca, ders kitabının hazırlanmasında değerli tavsiyeleri ve yardımları için şirket çalışanlarına Stanislav Starikov ve Rashid Umarov'a teşekkür ederim.

 
SK'ye
Bir diziyi aynı ArrayMinimum () çağrısıyla başlatmanın 4 yolu vardır;
[] dizisinin boyutunu belirtmeden bir alt yordamda bir dizinin başlatılmasının "RunTime" hatasına yol açtığı gösterilmiştir.
- ilk iki seçenek, hata çeviride alıntılanmıştır: "dizinin başlangıcındaki yanlış ADRES."
-ikinci iki seçenek çalışıyor, [1000] boyutunun belirtilmesinin diziyi otomatik olarak statik hale getirdiği gösteriliyor.
Bulgular:
1) MQL4 dizileri her zaman statik değildir,
2) statik a[] tanımı, yani. açık bir boyut olmadan yürütülmez, ancak hata uyarısı yoktur. Hata, çalışma zamanında, uzmanlar penceresindeki ikinci ve sonraki onay işaretlerinde oluşur.
3) Tanımlanan statik/dinamik hatalar, dizi sub/func içinde tanımlanmışsa ortaya çıkar ve sadece "uzmanlar" penceresinden bakanlar tarafından yakalanır,
ve sadece ikinci tik geldiğinde. Örneğin, strateji test cihazı kullanılmadan hafta sonu göstergede hata ayıklarken hata algılanmayacaktır.
4) Ders kitabındaki satır, sözde "MQL4 dizileri her zaman statiktir", erken yapılara atıfta bulunabilir.
 

Metin eğitimlerine ek olarak istiyorum. Bir dizi video dersi var. Özellikle ilk dersi alır - programın nasıl indirileceği, kurulacağı ve ilk Buy or Shell anlaşmasının nasıl yapılacağı.

 
Korey :
SK'ye
Aynı ArrayMinimum () çağrısıyla bir diziyi başlatmanın 4 yolu vardır;
[] dizisinin boyutunu belirtmeden bir alt yordamda bir dizinin başlatılmasının "RunTime" hatasına yol açtığı gösterilmiştir.
- ilk iki seçenek, hata çeviride alıntılanmıştır: "dizinin başlangıcındaki yanlış ADRES."
-ikinci iki seçenek çalışıyor, [1000] boyutunun belirtilmesinin diziyi otomatik olarak statik hale getirdiği gösteriliyor.
Bulgular:
1) MQL4 dizileri her zaman statik değildir,
2) statik a[] tanımı, yani. açık bir boyut olmadan yürütülmez, ancak hata uyarısı yoktur. Hata, çalışma zamanında, uzmanlar penceresindeki ikinci ve sonraki onay işaretlerinde oluşur.
3) Tanımlanan statik/dinamik hatalar, dizi sub/func içinde tanımlanmışsa ortaya çıkar ve sadece "uzmanlar" penceresinden bakanlar tarafından yakalanır,
ve sadece ikinci tik geldiğinde. Örneğin, strateji test cihazı kullanılmadan hafta sonu göstergede hata ayıklarken hata algılanmayacaktır.
4) Ders kitabındaki satır, sözde "MQL4 dizileri her zaman statiktir", erken yapılara atıfta bulunabilir.


Mantığınız çok açık değil. Boyutsuz bir dizi ilan ediyorsunuz (aslında programa sadece elemanları tanımlanmamış ve bunlar için bellek ayrılmamış dizinin adı veriliyor) ve ArrayMinimum() işlevini kullanarak minimum değeri bulmaya çalışıyorsunuz. olmayan unsurlar arasındadır. Elbette, dizinin statik olarak bildirilip bildirilmediğine bakılmaksızın hata açılır. Aynı zamanda, yürütme hatasını, dizi özelliğinin statik olup olmayacağının bir göstergesi olarak yorumlarsınız.

MQL4'teki diziler tanım gereği statiktir. Bu, (tabii ki, dizide en az bir öğenin olduğu durumlar için) dizi öğelerinin değerlerinin, işlevin önceki tamamlanma anından (dizinin olduğu) itibaren dönemde depolandığı anlamına gelir. statik anahtar sözcüğün dizi tanımlayıcısının bulunup bulunmadığına bakılmaksızın, bir sonraki çağrıya kadar bildirilir.

 
SK'ye
Bana göre, bu bellek ayırma hilelerini uzun süredir kullanıyoruz.
Dizinin içeriği hakkında değil, adreslemesi hakkında yazdım, bununla ilgili. derleme hatası, bağlantı hatası yok, ancak ADDRESS çalışma zamanı hatası var.
Onlar. derleyici, sonraki büyümesi için alt programda bir dizi [] tanımlamama izin verdi, - bu iyi (!),
Bu, diziye göre dinamik bir bellek tahsisidir.
Ancak, bu diziye yönelik tüm işaretçiler doğrudan işaretçiler olarak bağlantılı değildir (ancak işaretçiler işaretçilere değil),
bu, belleğin müteakip dinamik tahsisi sırasında, bağlantılı statik adresler ile dizinin yeni tahsis edilmiş adresi arasında bir uyumsuzluğa yol açar.
Onlar. MQL4'te bir diziye (işaretçi) başvuru artık statiktir ve yalnızca dizi gerçekten statik olduğunda doğru şekilde çalışır.
Derleyici, alt yordam içinde açık bir boyut olmadan büyüme için bir dizinin daha ileri gideceğini algılamaz.
Programcı statik koyar ve düşünür. her şeyin doğru olduğunu, ancak açık bir boyut belirtmezlerse - bunun için statik dizi yok ve dizi aslında dinamik olacak (derleme/yükleme hataları olmadan).
Sorun o kadar büyük değil, genellikle herkes dizileri global düzeyde tutar.
Ancak ders kitabında, yalnızca sözde tüm dizilerin zaten statik olduğunu değil, yerel dizileri açık bir boyuta sahip statik olarak yazmanın gerekli olduğunu belirtmek istenir.
 
Korey :
SK'ye
Programcı statik koyar ve düşünür. her şeyin doğru olduğunu, ancak açık bir boyut belirtmezlerse - bunun için statik dizi yok ve dizi aslında dinamik olacak (derleme/yükleme hataları olmadan).

MQL4'te tüm dizilerin statik olduğunu bilen bir programcı, sadece gerekli olmadığı için statik ayarlamayacaktır.

Ancak ders kitabında, yalnızca sözde tüm dizilerin zaten statik olduğunu değil, yerel dizileri açık bir boyuta sahip statik olarak yazmanın gerekli olduğunu belirtmek istenir.

Belki de kavramları karıştırıyorsunuz. Bu durumda, "statik", işlevin yürütülmesi arasındaki aralıktaki dizi öğelerinin değerlerini cat.js dosyasına kaydetme özelliği anlamına gelir. ilan edilir. Diziler, adının önünde statik bir giriş olmasına bakılmaksızın bu süre boyunca değerlerini her zaman korur (ancak bu yerel değişkenler için geçerli değildir, açık statik gerektirirler).

Aynı zamanda, ArrayResize () işlevini kullanarak bir diziyi birinci boyutta yeniden boyutlandırmak mümkündür.