İzleme görevi (fonksiyon grafiği oluşturma) - sayfa 2

 
sergeev :
Sonuçta, aynı işlev hem start'tan hem de init'ten çağrılabilir. Düzeltilmesi gereken bu.

Parmaklarımda yapabilirim ve özellikle Nuno'yu düşünebilirim))

aşağı yukarı şöyle:

fonksiyonları sayın, 4 olsun, kod başlığına #define X 4 yazın

tik başına maksimum çağrı sayısının #define Y 100 olacağını varsayıyoruz

4 x 100 boyutlarında bir matrisimiz var, matrisi başlatıyoruz = -1

ve şimdi, giriş noktasında bir fonksiyon çağırırken, fonksiyona bir sayaca (grafik şekillendirici) bir çağrı ekliyoruz, bu da bizim girişimizde istenen konuma bir kod (1,2,3 veya 4) eklemesi gerekiyor. serbest bir satırdaki matris X - kim aradı

Görevinizin daha çok ağ grafikleri gibi olduğunu düşünüyorum, ağ grafikleri için matematiksel aparatın uzun süredir geliştirildiğinden şüpheleniyorum - google'a ihtiyacınız var

Not: neyse, bu zaten konunun 2. sayfası;)

 

IgorM , bir grafiği saklamayı önerdiğiniz yola "bitişiklik matrisi" denir. Seyrek grafikler için çok ekonomik değildir (ve programcıların "tamamen bağlı grafik" mimarisi için yenilmesi gerekir, vb.)

Kenarların bir listesini kullanmak çok daha iyidir (yani, 2 öğeden oluşan tek boyutlu bir yapı dizisini saklarız - çağıran işlevin kimliği ve çağrılan işlevin kimliği; yapı ek alanlarla desteklenebilir - çağrı sayaçlar vb.)

ps matapparat gerçekten uzun zaman önce geliştirildi :)

 
lea :

IgorM , bir grafiği saklamayı önerdiğiniz yola "bitişiklik matrisi" denir.

ATP, en azından bir şeyi hatırlamaya başladım, sonuçta, tüm bu tortuları incelediğimden bu yana 15 yıl geçti, ki bu gerçek hayatta asla yararlı değildi))) - ama şunu unutma "veri paketleme" (bellek tasarrufu) - yanılıyor olsam da, matematiksel aygıtın karmaşıklığını arttırmak için performans kaybına yol açacaktır.
 
MetaDriver :
İmkansızlığın ispatı bir fikir için başarısız olur mu?
Fonksiyonlardan giriş ve çıkışların loglanması C++ ile kolaylıkla yapılabilir,
yıkıcılar ve yığın çözme gibi bir şey var.
Her ne kadar ... aynı C ++ için isteğe bağlı olarak
yığındaki koddaki noktalar , işlev çağrılarının sırasını oluşturmanıza izin verir.
.
Ve böylece... her dönüş, ek aramalar anlamına gelir :-).
 
lea :
Ağaç, grafiğin özel bir durumudur.

Evet. demek istediği buydu. MQL kodunun doğrusallığına bağlı olarak saf bir ağaç olacaktır. Köşeler birbirini göstermeyecek çünkü.

IgorM :
4 x 100'lük bir matrisimiz var, matrisi başlatıyoruz = -1
ve şimdi, giriş noktasında bir işlevi çağırırken, işleve bir sayaca (grafik şekillendirici) bir çağrı ekliyoruz, bu, matrisimize girerken istenen konuma bir kod (1,2,3 veya 4) eklemesi gerekir. ücretsiz hat X - kim aradı

Evet. şimdi anlaşıldı. Ancak bana öyle geliyor ki, bu yaklaşım gerçekten emek yoğun, kod açısından çok fazla değil, kaynaklar ve analize hazırlık açısından. Dallanma için üç boyutlu bir matris yapmak gerekli olacaktır.
Genel olarak, seçenek kabul edilir. Ama şimdilik özette 4 sayfaya bırakalım :)

Görevinizin daha çok ağ grafikleri gibi olduğunu düşünüyorum, ağ grafikleri için matematiksel aparatın uzun süredir geliştirildiğinden şüpheleniyorum - google'a ihtiyacınız var

Görev ne bilgi ne de yeniliktir. Sadece bir fonksiyon grafiğinin olağan yapısı. Daha fazla yok.
Yeni matapparat yok, sadece minimum düzeyde basitleştirilmiş bir sürüm gerekiyor.

 
lea :

Kenarların bir listesini kullanmak çok daha iyidir (yani, 2 öğeden oluşan tek boyutlu bir yapı dizisini saklarız - çağıran işlevin kimliği ve çağrılan işlevin kimliği; yapı ek alanlarla desteklenebilir - çağrı sayaçlar vb.)

Eugene, bu tam olarak zaten yapılmış olan şey.

Ama stoper oldu. Üçüncü gün uyku yok, içki yok .... :)

Yeni bir kenara (yeni bir alt düğüm) gitmek için bir kenardan (daha doğrusu bir alt düğüm) bir üst düğüme nasıl döneceğimi anlayamıyorum. Ancak kurala uymak için kaynak kod fonksiyonunun başında sadece bir izleme fonksiyonu kullanıyoruz.

 
sergeev :

Yeni bir şubeye geçmek için bir uçtan bir düğüme nasıl döneceğimi anlayamıyorum.


Ve hepsi, daha önce geçmiş olan tek bir işlevle mi? Bu senin için yeterli - hiçbir şey yapmadan geri dönmek)) Eh, hiçbir şey, ikinci sayfa bitti, yakında Vladimir dayanamayacak)))
 
alsu :
Ve hepsi, daha önce geçmiş olan tek bir işlevle mi? Bu senin için yeterli - hiçbir şey yapmadan geri dönüş yapmak)) Eh, hiçbir şey, ikinci sayfa bitti, yakında Vladimir dayanamayacak)))

Tanrı onlarla, bu sayfalarla. Görev ilginç.

Görüyorsunuz, işte bunu nasıl yapabilirsiniz.... Ana düğüme geri alma, çocuğa yapılan yeni bir çağrıda zaten yapılabilir. Yani, bir alt öğeye geçildiğinde, sistem önce ağacı daha düşük bir düzeye indirecek ve ardından yeni bir alt düzeye yükselecektir.

Ancak bu seçenekte, derinliği ikiden fazla olan dallar yapamazsınız. Çünkü sistem ilerlemeden önce daima geriye gider. Yani, tüm fonksiyonlar aynı seviyede çizilecektir.

Bu nedenle, mevcut konumu tanımlamak için bazı değişken dizilerini kullanmanız gerekecek gibi görünüyor. yoluna devam etmek ve geri gelmemek. İşte tam da bu dönüşte karmaşıklık...

 

Fragmanda bir "kavramsal boşluk" veya daha doğrusu bir uygulama örneği var. MT5'te

Bunu akla getirmek için, çağrı listesi ile çalışması için in () ve out () fonksiyonlarını yeniden yazmanız gerekir. Şimdi standart akışa giriş ve çıkışları aptalca yazdırıyorlar.

Kötü haber: Konu başlatıcının tek bir izleme işlevi rüyasını kurtarmadım. Üzgünüm Sergeyev. :)

İyi haber: Her şey çalışıyor.

Kullanici rehberi.

1. Her işlevin başında "_in" makrosu eklenir

2. Tüm geri aramalar "_return" ile değiştirilir

3. Programın başında iki tanım yazılır

#define _in in( __FUNCTION__ );
#define _dönüş(__FUNCTION__);dönüş


Her şeyi sobsno.

Dosyalar:
rettest.mq5  2 kb
 
sergeev :

Tanrı onlarla, bu sayfalarla. Görev ilginç.

Görüyorsunuz, işte bunu nasıl yapabilirsiniz.... Ana düğüme geri alma, çocuğa yapılan yeni bir çağrıda zaten yapılabilir. Yani, bir alt öğeye geçildiğinde, sistem önce ağacı daha düşük bir düzeye indirecek ve ardından yeni bir alt düzeye yükselecektir.

Ancak bu seçenekte, derinliği ikiden fazla olan dallar yapamazsınız. Çünkü sistem ilerlemeden önce her zaman geri gidecektir. Yani, tüm fonksiyonlar aynı seviyede çizilecektir.

Bu nedenle, mevcut konumu tanımlamak için bazı değişken dizilerini kullanmanız gerekecek gibi görünüyor. yoluna devam etmek ve geri gelmemek. İşte tam da bu dönüşte karmaşıklık...

Ve böyle garip bir görev nereden geliyor? Sadece İKİ işlevi - giriş ve çıkış için - yapabilirseniz ve buhar banyosu yapmazsanız, şüpheli araştırmalar için çaba harcamaya değer mi?