Hatalar, hatalar, sorular - sayfa 2637

 
Andrei Trukhanovich :

belki işlevsel ile karşılaştırıldığında?

Wikipedia'ya bakın:

Ve bunun aynı şey olmadığı ortaya çıkıyor.


Yani prosedürel...

 
Nikolai Semko :

Belki sizi şaşırtacağım ama günümüzün genç programcıları OOP'yi prosedürel programlamadan daha kolay programlama olarak görüyorlar.

25 yıl öncesini düşünürsünüz. FKÖ'nün modern gençliği zaten anne sütünü içiyor. Trendde olmak istiyorsanız OOP öğrenin, aksi takdirde tek bir şey var - homurdanmak.

Ve gerçekten öyle. Öyleyse eski programcıların okul çocukları için mevcut Olimpiyat problemlerini çözmeye çalışmasına izin verin.

Dinamik programlama, çizge teorisi, OOP, sınıflar vb. gibi üniversitelerde daha önce öğretilenler. 9-10. sınıfların mevcut okul çocukları (tabii ki hepsi değil) bu tür sorunları birkaç dakika içinde çözüyor.

Ve bu doğal. Doğanın yasası :)

 
Roman :

Evet, OOP'yi anlıyorum, elbette istediğimiz ölçüde değil.
Bu bir homurdanma değil, yapıcı bir öneridir.
Geliştirici tek bir fonksiyon yazmasın diye iki malloc atayarak kullanıcıları OOP öğrenmeye zorlar.
Bu elbette hala dilin ilerlemesi, gelişmesi ve yaygınlaşmasıdır. OOP'yi nasıl sevdiklerini ve anladıkları burada görülebilir.
Anlıyor musun Nikolai, paketleyicideki her şey yürütme için ekstra kod, açıklamaya gerek yok sanırım.
Modern optimizasyon derleyicilerinden de bahsetmeye gerek yok, hangi talimatların uygulanacağını bilmiyoruz.
Amerikalı programcıların bile OOP kötü olduğu için değil, kodun elde edilmesi daha kolay ve daha hızlı olduğu için prosedürel bir tarzda yazmayı tercih etmesi sizi şaşırtabilir.
Ve projede nesnel görevler yoksa, neden gençler için hala bir şekilde anlamanız gereken sarmalayıcıları kullanıyorsunuz ))
Bu nedenle, gençlerin FKÖ'yü isteyerek özümsediği konusunda size katılmıyorum.

Mql dilinin mantığının üzerine inşa edildiği C dilinde düşünüyorum.
C dili 1972'de doğdu, yani 48 yıl önce ortaya çıktı))
Ama ne derse desin, C en hızlı dillerden biridir. Neden biliyor musun? Çünkü sınıflar şeklinde sarmalayıcıları yoktur.

Hiç de öyle değil. Sadece OOP olmayan birçok dil hala kullanılıyor. örneğin C. Örneğin Kanada'da, çoğu devlet kurumu Kobol'da oturur ve hiçbir şekilde ondan kurtulamaz.

https://www.tiobe.com/tiobe-index/

Roman, dürüst olmak gerekirse, matrislerin boyutunu değiştirme konusunda neden bir dalga yükselttiğinizi anlamıyorum - bununla ilgili ne gibi zorluklar olabilir.
Bunun için işaretçilere veya OOP'ye ihtiyacınız yok.
Her neyse, bir bilgisayar için herhangi bir boyuttaki dizi tek boyutlu bir dizidir.
Bu yüzden tek boyutlu bir dinamik diziyle çalışın. Ve matrisleri sanal olarak oluşturun ve işlevler aracılığıyla istediğiniz gibi yeniden boyutlandırın.
Örneğin şöyle bir şey:

 double GetValFromMx( double &A, int x, int y, int SizeX, int SizeY) {
if (x<SizeX && y<SizeY) return A[y*SizeX+x];
else return EMPTY_VALUE ; }

Uygulamada, bu tek boyutlu dizileri temel alan çok boyutlu dizilerle uğraşmama rağmen, kodumda yalnızca tek boyutlu diziler kullanıyorum.

 
Roman :

Bu nedenle, bariz bir istek var, lütfen sadece ArrayResizeMx(A, n, m) matrisleri için ArrayResize gibi fonksiyonlar yapın.

her şey yapılır, OOP kullanarak hazır çözümler istemezsiniz (OOP bilmenize gerek yok, hazır olanları kullanın!)

ALGLIB kullanın, matrisi yeniden boyutlandırmak için bir Resize() yöntemi vardır .... ama yine de hepsi OOP ile yapılır)))

Not: Forumu araştırdım, bu konuyla ilgili birçok konuşma vardı, örnekler vardı, bir yapıyı bir dizi alanıyla sarabilir, bir dizi yapı içine sarabilirsiniz - OOP'siz olacak, ama bence hepsi hantal görünüyor

Roma :

Mql dilinin mantığının üzerine inşa edildiği C dilinde düşünüyorum.

C dili 1972'de doğdu, yani 48 yıl önce ortaya çıktı))
Ama ne derse desin, C en hızlı dillerden biridir. Neden biliyor musun? Çünkü sınıflar şeklinde sarmalayıcıları yoktur.

Artık saf C'yi hatırlamıyorum, üniversitede uzun süre okudum, ama yanılmıyorsam, o zaman C'nin dinamik dizileri yoktu, ancak işaretçilerle çalışmak mümkündü. bellek ve bu nedenle belleğe erişimi kontrol etmek için bellek ayırma işi tamamen programcıya aittir, aslında aynı sarmalayıcı olacaktır.

tamam, asil bir holivar çalışabilir, devam etmenin bir anlamı yok

 
Nikolai Semko :

Roman, dürüst olmak gerekirse, matrislerin boyutunu değiştirme konusunda neden bir dalga yükselttiğinizi anlamıyorum - bununla ilgili ne gibi zorluklar olabilir.
Bunun için işaretçilere veya OOP'ye ihtiyacınız yok.
Her neyse, bir bilgisayar için herhangi bir boyuttaki dizi tek boyutlu bir dizidir.
Bu nedenle, tek boyutlu bir dinamik diziyle çalışın. Ve matrisleri sanal olarak oluşturun ve işlevler aracılığıyla istediğiniz gibi yeniden boyutlandırın.

Evet, bir bilgisayar için herhangi bir boyutun tek boyutlu bir dizi olduğu açıktır.
Her şey dilin kullanım kolaylığı ile ilgili, eğer kodda [][] boyutunu görürsek, bunun tek boyutlu bir dizi değil, bir matris olduğunu görsel olarak anlarız.
Kodun okunabilirliği, ne içerdiğini tahmin etmek yerine birçok kez artar []
Matrisler için bellek ayırmak için bir fonksiyon eklemem istendiğinde böyle bir yanlış anlama ile karşılaşacağımı düşünmemiştim.
Hepiniz ArrayResize kullanıyorsunuz, bu kullanışlı ve endişelenmeyin. Bir geliştiricinin çok boyutlu bir dizi için bellek ayırma işlevi yazma sorunu nedir?
Doğru, hiçbir sorun ve engel yok, ancak kullanıcılar için bu, kodu düzenlemenin rahatlığı. Bu yüzden, mql'ye çok büyük, iyi bir C sayısal yöntem kütüphanesi taşımaya karar verdim,
ve bunun için normal mql araçları yoktur. Yine, verimsiz kodu çitleme arzusunun ortadan kalktığı bir tür koltuk değneği.

 
Roman :

Evet, OOP'yi anlıyorum, elbette istediğimiz ölçüde değil.
Bu bir homurdanma değil, yapıcı bir öneridir.
Geliştirici tek bir fonksiyon yazmasın diye iki malloc atayarak kullanıcıları OOP öğrenmeye zorlar.
Bu elbette hala dilin ilerlemesi, gelişmesi ve yaygınlaşmasıdır. OOP'yi nasıl sevdiklerini ve anladıkları burada görülebilir.
Anlıyor musun Nikolai, paketleyicideki her şey yürütme için ekstra kod, açıklamaya gerek yok sanırım.
Modern optimizasyon derleyicilerinden de bahsetmeye gerek yok, hangi talimatların uygulanacağını bilmiyoruz.
Amerikalı programcıların bile OOP kötü olduğu için değil, kodun elde edilmesi daha kolay ve daha hızlı olduğu için prosedürel bir tarzda yazmayı tercih etmesi sizi şaşırtabilir.
Ve projede nesnel görevler yoksa, neden gençler için hala bir şekilde anlamanız gereken sarmalayıcıları kullanıyorsunuz ))
Bu nedenle, gençlerin FKÖ'yü isteyerek özümsediği konusunda size katılmıyorum.

Mql dilinin mantığının üzerine inşa edildiği C dilinde düşünüyorum.
C dili 1972'de doğdu, yani 48 yıl önce ortaya çıktı))
Ama ne derse desin, C en hızlı dillerden biridir. Neden biliyor musun? Çünkü sınıflar şeklinde sarmalayıcıları yoktur.

MQL, C++ ile oluşturulmuştur.

Roman, bahsettiğin bu özellikleri tanıtabilmek için MQL'e bir çok ek şeyler eklemen gerekecek. Ve bu zaten yeni başlayanlar için bir komplikasyon.

Profesyonel olmayanlar için daha kolay olması gerektiğini kendiniz söylediniz.

"Bisiklette iyi pedal çevirmeyi öğrendim, çok basit ve anlaşılır. Pedalları BMW'ye tanıtalım, daha kolay olacak" gibi bir durum. :)

ps Genel olarak, hem prosedürel hem de OOP stillerinin sefil ve pratik olmadığı görüşündeyim))

 
Igor Makanu :

her şey yapılır, OOP kullanarak hazır çözümler istemezsiniz (OOP bilmenize gerek yok, hazır olanları kullanın!)

ALGLIB kullanın, matrisi yeniden boyutlandırmak için bir Resize() yöntemi vardır .... ama yine de hepsi OOP ile yapılır)))

Not: Forumu araştırdım, bu konuyla ilgili birçok konuşma vardı, örnekler vardı, bir yapıyı bir dizi alanıyla sarabilir, bir dizi yapı içine sarabilirsiniz - OOP'siz olacak, ama bence hepsi hantal görünüyor

Artık saf C'yi hatırlamıyorum, üniversitede uzun süre okudum, ama yanılmıyorsam, o zaman C'nin dinamik dizileri yoktu, ancak işaretçilerle çalışmak mümkündü. bellek ve bu nedenle belleğe erişimi kontrol etmek için bellek ayırma işi tamamen programcıya aittir, aslında aynı sarmalayıcı olacaktır.

tamam, asil bir holivar çalışabilir, devam etmenin bir anlamı yok

ALGLIB denendi, bir nesneden yazdırmayla ilgili bir sorun var, ArrayPrint işlevi nesneleri yazdırmıyor.
Ve [][] öğesinden, başlıklarla bile güzel bir matris görüntüler, yine hesaplamanın sonucunu görsel olarak izlemeniz gerektiğinde bilgileri algılamanın rahatlığı.
Evet, Temko foruma baktı ama etkilenmedi. İşte tüm bunlar tam olarak hantal ve verimsiz görünüyor. C çok zarif bir dildir ve mql onu bozar.
Evet, C'de dinamik matrisler için bellek işaretçiler aracılığıyla tahsis edilir, ancak mql'de bir değişkene işaretçi yoktur, yine nesnelere gider, ne için.
Kullanıcıların ihtiyaç duyduğu tek şey ArrayResizeMx(A, n, m, k) işlevi olduğunda ve zaten yerel yürütmede olacaksa, farkı anlarsınız.
Evet devam etmenin bir anlamı yok, duyduysanız ve yaptıysanız çok teşekkür ederim. Ancak işlev gerçekten kullanışlı ve gerekli.

 
Roman :

Yüksek sesle akıl yürütme, ancak bu, geliştiriciye hitap ediyor.
Bu nedenle, Zloy'u kişisel olarak almayın.

Dinamik matrislerle çalışmanın ancak nesneler veya yapılar aracılığıyla mümkün olduğu ortaya çıktı. Genel olarak, başka bir koltuk değneği elde edilir.
Mql'de bir değişkene işaretçi yoktur, nesne yaklaşımını kullanmaya devam eder, orada işaretçiler vardır.
Dinamik matrisleri kullanmak için kullanıcının OOP'yi bilmesi ve işaretçilerle ve hatta MQL uygulamasında bile çalışması gerektiği ortaya çıktı.
Bu tür bilgiye sahip kaç kişi var? Cevabı kendin biliyorsun. Nesne yaklaşımıyla uğraşmak benim için zor olmayacak ama OOP bilmeyenler için
özellikle dinamik matrislerle çalışmak için dili kullanmak için yapay bir eşik oluşturulur.
Bana öyle geliyor ki geliştirici, tam tersine, dilin kullanımını basitleştirmek ve karmaşıklaştırmamakla ilgilenmeli .
Yani, kullanıcının dille rahat çalışması için ihtiyaç duyduğu işlevleri geliştirmek.
Ve dahası, neredeyse sayısal yöntemlerin temeli olan matrislerle.

Bu nedenle, bariz bir dilek var, lütfen sadece ArrayResizeMx(A, n, m) matrisleri için ArrayResize gibi fonksiyonlar yapın.
iyi ve çok boyutlu için mümkündür. Yani, nesnelerde olduğu gibi matrislerle değil, tanıdık C-tarzı dizilerde olduğu gibi çalışma fırsatı verin.
Özellikle matrislerin görsel gösterimi için, ArrayPrint(A, 0) işlevi bir nesneden değil dizilerden bir matris yazdırır.

Geliştiriciler bu konuda çok spesifik. Burada

Респект и уважуха создателям языка, Но...
Респект и уважуха создателям языка, Но...
  • 2010.05.15
  • www.mql5.com
Добавление ООП потребовало от создателей языка изменения синтаксиса, для введения классов и структур и много-го чего.
 
Koldun Zloy :

Geliştiriciler bu konuda çok spesifik. Burada

Bir sonraki gönderide, Halt'tan özel sorularla uzağa gitmenize gerek yok,
Onu uzun zamandır aynı zamandan tanıyorum, yetkin bir askeri geliştirici ve bu yüzden burayı terk etti, cevap açık.
On yıl geçti, ne değişti?
Kod tabanı basit algoritmalarla doldurulduğu için bu seviyede kaldı. Profesyonel çözümler nerede?
Bunun için, bu profesyonel çözümleri yazmak ve kod tabanımızı geliştirmek için araçlar vermek yerine python ile entegre oluyoruz.
Hata burada, alet yok, buna karşılık gelen programcı seviyesi yok.
Tamam, ben uyuyacağım, henüz uyumadım. Herkese iyi şanslar.

Респект и уважуха создателям языка, Но...
Респект и уважуха создателям языка, Но...
  • 2010.05.15
  • www.mql5.com
Добавление ООП потребовало от создателей языка изменения синтаксиса, для введения классов и структур и много-го чего.
 
Nikolai Semko :

Yani prosedürel...

Prosedür C'dir, orada her şey basit, sadece kendinizi ayağınızdan vurmak için daha fazla fırsat.

Sanırım kafanız karıştı ve işlevsel demek istediniz. Ancak, önemli değil.