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

 

Dmitry Fedoseev :
Her seferinde yeniden hesaplayın veya yeniden hesaplamayın

Hiçbir şey anlamadın. PositionTotal() üzerindeki kama ışığı birleşmedi. Sadece bunu yapmanın kötü olduğunu belirttim.

Dmitry Fedoseev :
Ama öldürücü bir deney getirmek yerine

Denememde neyi sevmiyorsun? Derleyici, ilk aramanın sonucunu optimize edip önbelleğe aldı mı?

tam olarak bunu optimize ediyor: for (int i = 0; i < 1+2 ; i++) {}

veya bunun gibi: const int X = 1 ; for (int i = 0; i < X+2; i++) {}

ve bu kesinlikle değil: int X = 1 ; for (int i = 0; i < X+1; i++) {} için bir telepat değil ve xs bu X ile ne ve nerede olabilir, aniden döngü gövdesinde veya dolaylı olarak örneğin referans/işaretçi tarafından değiştirilir? Her yineleme için 'X+1' eklemek güzel olacaktır. '+1'i kaldırsanız bile, bu x bir sabit olarak bildirilmezse, yine de mevcut 'X' değerini kullanır.

Ve kesinlikle işlev tarafından döndürülen sonucu önbelleğe almıyor, Carl! ("ve if for (int index=f();;) " 'nizi tahmin ederek - bu, dizin başlatıldığında tam olarak bir kez çağrılır).

Dmitry Fedoseev :
Ve derleyici - bu, kodu optimize ettiği ve bir işlev aracılığıyla değil, değişkene doğrudan erişim olduğu anlamına geliyordu.

evet, elbette, derleyici piyasadaki durumu tam olarak biliyor ve bir işlev çağrısının her zaman bir değer döndürdüğünden emin, o zaman neden bu işlevi bir kereden fazla çağırın, OnInit() içinde bir kez bu yeterlidir, sonucu kendiniz hatırlayın , ve tamam!

Ve bu, döngünün kendisinin yürütülmesi çerçevesinde bile, sizin durumunuzda PositionsTotal() ile bazı emirlerin artık orada olmayabileceğini umursamıyor - ayak seslerinde nakavt ediliyorlar, eller tarafından kapatılıyorlar veya örneğin başka bir danışman - ve geri kalanı aptalca işlenmeyecek, çünkü hepsi ANİDEN! daha az oldu?

Dmitry Fedoseev :
Bu, ArraySize() işlevinde çok belirgindir, bir işlevi çağırmak ile bir değişkeni kullanmak arasındaki farkı söyleyemez. Ama ne yazık ki PositionsTotsl() ile durum böyle değil.

bazı orta ölçekli dizilerin boyutu ve mevcut açık pozisyonların sayısı nasıl ilişkilidir? Bir dizinin elemanlarına dizine göre erişiyorsunuz, örneğin 3 elemanlı bir boyut için [999] dizisine bakın. Bu dizi aslında "akıllı" bir türse, sınıf, örneğin doğrulamanın gerçekleştiği yerde '[]' operatörüyle birlikte oradadır, o zaman sorun yok. Ve değilse? Evet, her durumda, klasik bir kod örneğiniz var. O zaman su birikintisini gazlaştıracak ne var, kabul ederlerdi ve şişirmezlerdi.

 
Tio Nisla :

Dmitry Fedoseev :
Her seferinde yeniden hesaplayın veya yeniden hesaplamayın

Hiçbir şey anlamadın. PositionTotal() üzerindeki kama ışığı birleşmedi. Sadece bunu yapmanın kötü olduğunu belirttim.

Dmitry Fedoseev :
Ama öldürücü bir deney getirmek yerine

Denememde neyi sevmiyorsun? Derleyici, ilk aramanın sonucunu optimize edip önbelleğe aldı mı?

tam olarak bunu optimize ediyor: for (int i = 0; i = 1+2; i++) {}

veya bunun gibi: const int X = 1 ; for (int i = 0; i = X+2; i++) {}

ve bu kesinlikle değil: int X = 1 ; for (int i = 0; i = X+1; i++) {} için bir telepat değil ve bu X neden ve nerede olabilir, örneğin döngü gövdesinde aniden veya dolaylı olarak örneğin referans/işaretçi tarafından değiştirilir? Her yineleme için 'X+1' eklemek güzel olacaktır. '+1'i kaldırsanız bile, bu x bir sabit olarak bildirilmezse, yine de mevcut 'X' değerini kullanır.

Ve kesinlikle işlevin döndürdüğü sonucu önbelleğe almıyor, Carl! ("ve if for (int index=f();;) " 'nizi tahmin ederek - bu, dizin başlatıldığında tam olarak bir kez çağrılır).

Dmitry Fedoseev :
Ve derleyici - bu, kodu optimize ettiği ve bir işlev aracılığıyla değil, değişkene doğrudan erişim olduğu anlamına geliyordu.

evet, elbette, derleyici piyasadaki durumu tam olarak biliyor ve bir işlev çağrısının her zaman bir değer döndürdüğünden emin, o zaman neden bu işlevi bir kereden fazla çağırın, OnInit() içinde bir kez bu yeterlidir, sonucu kendiniz hatırlayın , ve tamam!

Ve bu, döngünün kendisinin yürütülmesi çerçevesinde bile, sizin durumunuzda PositionsTotal() ile bazı emirlerin artık orada olmayabileceğini umursamıyor - ayak seslerinde nakavt ediliyorlar, eller tarafından kapatılıyorlar veya örneğin başka bir danışman - ve geri kalanı aptalca işlenmeyecek, çünkü hepsi ANİDEN! daha az oldu?

Dmitry Fedoseev :
Bu, ArraySize() işlevinde çok belirgindir, bir işlevi çağırmak ile bir değişkeni kullanmak arasındaki farkı söyleyemez. Ama ne yazık ki PositionsTotsl() ile durum böyle değil.

bazı orta ölçekli dizilerin boyutu ve mevcut açık pozisyonların sayısı nasıl ilişkilidir? Bir dizinin elemanlarına dizine göre erişiyorsunuz, örneğin 3 elemanlı bir boyut için [999] dizisine bakın. Bu dizi aslında "akıllı" bir türse, sınıf, örneğin doğrulamanın gerçekleştiği yerde '[]' operatörüyle birlikte oradadır, o zaman sorun yok. Ve değilse? Evet, her durumda, klasik bir kod örneğiniz var. Su birikintisini gazlaştıracak ne var, itiraf edeceklerdi ve kabarmayacaklardı.

Işık PositionTotal() üzerinde birleşmiyorsa, işareti tamamen kaçırmışsınızdır. Bu nedenle, döngünün her tekrarında ArraySize () işlevi çağrılabilir ve hız bundan değişmez.

Deneyiniz yokluğundan dolayı bana uymuyor.

Fantezilerinizin geri kalanı ilginç değil, çünkü onlar fanteziler (dahası, vahşi ve gerçeklikten çok uzak ve hatta hatalı).

Anaokulunda olmalısın.

 
Dmitry Fedoseev :

Neyin bilgisi ile? Bu algoritma doğada yoksa, ancak onu kendiniz icat etmeniz gerekiyorsa ve her şeyi belirleyen odur.

İstenilen kodun ilgili dilde yetkin bir şekilde nasıl yazılacağı bilgisi ile.

Anlamıyorum, bunu yapabilecek böyle bir algoritma yok mu?

İşlemler hakkında bilgi nasıl toplanır ve kullanılır? Danışmanın tüm pozisyonları, hacimleri, karı, türü, açılış fiyatı hakkında bilgi toplamam gerekiyor. Ardından en son konum veya en büyük konum hakkındaki bilgilere dönün.

Yani yazar bu soru ile genel olarak bir konu da oluşturmuştur.

Ve döngüler ve işlevlerin performansı hakkında, bu zaten diğer ilgili kişiler tarafından yazılmıştır. Tabiri caizse, bu tür algoritmaların uygulanmasında daha karmaşık) Ama onlar aynı zamanda en iyi nasıl veya nasıl doğru yapılacağını bilmek isteyenlerdir.

 
Nikolay Mitrofanov :

İstenilen kodun ilgili dilde yetkin bir şekilde nasıl yazılacağı bilgisi ile.

Anlamıyorum, bunu yapabilecek böyle bir algoritma yok mu?

Yani yazar bu soru ile genel olarak bir konu da oluşturmuştur.

Ve döngüler ve işlevlerin performansı hakkında, bu zaten diğer ilgili kişiler tarafından yazılmıştır. Tabiri caizse, bu tür algoritmaların uygulanmasında daha karmaşık) Ama onlar aynı zamanda en iyi nasıl veya nasıl doğru yapılacağını bilmek isteyenlerdir.

Hala pozisyonları nasıl hesaplayacağınızdan mı bahsediyorsunuz? Peki o zaman, özür dilerim.

İlginç, hâlâ bilmek isteyen ama yine de bilmeyen bu bilgili kişiler. Ve hepsi de pozisyonları saymakla mı ilgili?

Tekrar özür dilerim, yanılmamışım, "algoritmanın uygulanması" ifadesiyle konum sayma işlevini mi kastediyorsunuz? Yani, PositionsTots() işlevini bir döngüye mi yazıyorsunuz yoksa bir değişken mi kullanıyorsunuz - buna algoritma mı diyorsunuz?
 
Dmitry Fedoseev :

Hala pozisyonları nasıl hesaplayacağınızdan mı bahsediyorsunuz? Peki o zaman, özür dilerim.

İlginç, hâlâ bilmek isteyen ama yine de bilmeyen bu bilgili kişiler. Ve hepsi de pozisyonları saymakla mı ilgili?

Peki sorun çözüldüyse neyi tartışıyorsunuz?) LOL.

Pozisyonlar hakkında veri elde etme görevi vardır.

Döngüde kullanılan açık pozisyonların sayısını almak için bir dil işlevi vardır.

Döngüde nasıl doğru kullanılacağına dair bir soru var: for döngüsünün ilk parametresinde veya ikincisinde - koşulun kontrol edildiği yer.

Senden ne istediklerini anlamaman garip)))

Sayı sabit olmadığı için maliyetli olduğunu yazıyorsunuz. Ama neden, açıklayamazsın.

Neden pahalı olduğunu açıklayabilir misin?

Kişisel olarak geliştiricilerin, bu işlevin her onay işaretiyle açık pozisyonları yeniden hesaplamamasına özen gösterdiğini, ancak bunu yalnızca bir pozisyonu açarken ve kapatırken yapacağını düşünüyorum.

Geliştiricilerin bunu düşünmediğini mi düşünüyorsunuz?

İşlevin maliyetli olması, yeniden hesaplama yapması ve yalnızca terminalin RAM'inden değeri almaması neden bu kadar güven verici?

Şimdiye kadar, anlamlı bir cevap yerine boş gevezelik okudum.

 
Nikolay Mitrofanov :

Peki sorun çözüldüyse neyi tartışıyorsunuz?) LOL.

Durumun tüm mizahı bu - pozisyonların nasıl hesaplanacağına dair bir sempozyumun dördüncü sayfasında ikinci gün. Çok ilginç.

 
Dmitry Fedoseev :

Işık PositionTotal() üzerinde birleşmiyorsa, işareti tamamen kaçırmışsınızdır. Bu nedenle, döngünün her tekrarında ArraySize () işlevi çağrılabilir ve hız bundan değişmez.

Deneyiniz yokluğundan dolayı bana uymuyor.

Fantezilerinizin geri kalanı ilginç değil, çünkü onlar fanteziler (dahası, vahşi ve gerçeklikten çok uzak ve hatta hatalı).

ArraySize(), dizi dinamik değilse ve bir sınıf türü değilse, dizinin kendisini bildirirken zaten bir sabittir. Ancak bu da bir şey ifade etmez, çünkü ArraySize (dizi) ve sizeof(array) iki büyük farktır. İlki çağrılır ama görmezsiniz, ikincisi derleme zamanında hesaplanır.

 int arr[ 5 ];

PrintFormat (" sizeof (array): %d, num_elem = %d\n", sizeof (arr), sizeof (arr) / sizeof ( int ));
PrintFormat (" ArraySize (): %d\n", ArraySize (arr));
ArrayResize (arr, 7 );
PrintFormat (" ArraySize (): %d\n", ArraySize (arr));
PrintFormat (" sizeof (array): %d, num_elem = %d\n", sizeof (arr), sizeof (arr) / sizeof ( int ));
ArrayResize (arr, 3 );
PrintFormat (" ArraySize (): %d\n", ArraySize (arr));
PrintFormat (" sizeof (array): %d, num_elem = %d\n", sizeof (arr), sizeof (arr) / sizeof ( int ));

2021.05 . 03 22 : 01 : 37.253 show_the_shitz EURJPY,H4: initialized
2021.05 . 03 22 : 01 : 37.253 show_the_shitz EURJPY,H4: sizeof (array): 20 , num_elem = 5
2021.05 . 03 22 : 01 : 37.253 show_the_shitz EURJPY,H4: ArraySize (): 3
2021.05 . 03 22 : 01 : 37.253 show_the_shitz EURJPY,H4: sizeof (array): 20 , num_elem = 5
2021.05 . 03 22 : 01 : 37.253 show_the_shitz EURJPY,H4: ArraySize (): 7
2021.05 . 03 22 : 01 : 37.252 show_the_shitz EURJPY,H4: ArraySize (): 5
2021.05 . 03 22 : 01 : 37.252 show_the_shitz EURJPY,H4: sizeof (array): 20 , num_elem = 5

Öyleyse alternatif bakış açınızı başka bir yerde anlatın.

-----------------

Ve neyi çarmıha geriyorum? Kişi görmek ve düşünmek istemez. Tamam, işi ayın evresine, Mars ortası meridyeni boyunca geçen zamana ve sol arka topuktaki kaşıntıya bağlı olan bir kod üretsin. Pek çok kişinin, özellikle de yeni başlayanların projelerine kopyala-yapıştır yapmaktan çekinmemeleri ve sonra neyin yanlış olduğunu çözmeleri çok yazık.

 
Tio Nisla :

ArraySize(), dizi dinamik değilse ve bir sınıf türü değilse, dizinin kendisini bildirirken zaten bir sabittir. Ancak bu da bir şey ifade etmez, çünkü ArraySize (dizi) ve sizeof(array) iki büyük farktır. İlki çağrılır ama görmezsiniz, ikincisi derleme zamanında hesaplanır.

Öyleyse alternatif bakış açınızı başka bir yerde anlatın.

-----------------

Ve neyi çarmıha geriyorum? Kişi görmek ve düşünmek istemez. Tamam, işi ayın evresine, Mars ortası meridyeni boyunca geçen zamana ve sol arka topuktaki kaşıntıya bağlı olan bir kod üretsin. Pek çok kişinin, özellikle de yeni başlayanların projelerine kopyala-yapıştır yapmaktan çekinmemeleri ve sonra neyin yanlış olduğunu çözmeleri çok yazık.

Katil argüman! Söz yok... ArraySize() neden dinamik olmayan bir diziye uygulansın? Bunun nasıl yapılabileceğini hayal bile edemiyorum. Peki ya sizeof() burada? orada iyi misin?

Ve bu benim bakış açım değil, uzun süredir forum katılımcıları tarafından doğrulandı. Sadece bu başlığı aramayacağım.

Ancak bunun önbelleğe alma ile hiçbir ilgisi olmadığını söyleyebilirim.

 
Nikolay Mitrofanov :

Ve benim için o kadar iyi ki, bir kişi onu anlamaya çalışıyor ve daha derine iniyor ..

Küçük şeylere dikkat etmeden, kodlayıcı daha sonra rastgele kod yazma alışkanlığına girer. Ve sonra kodu taramak, çifte iş yapmak anlamına gelir ve genellikle sadece yazar için değil, kodla çalışacak kadar şanslı olanlar için de.

Doğru yazmayı ve hemen iyi ve ayrıntıları anlayarak yazmayı öğrenebiliyorsanız neden rastgele yazıyorsunuz?)

Tavsiyeniz .. peki, bu .. IMHO


Tavsiyeniz, daha sonra saçlarını tarayabilen deneyimli bir programcı (kendine güveni yüksek) için iyidir, çünkü nerede ve neyi tarayacağını bilir.

Fedoseev haklı. Hiç gerekli değil ve kodu istediğimiz gibi taramak hemen ortaya çıkmayacak. Ve zamanla, bir zamanlar yapılanları biraz farklı yazmanın daha iyi olduğu anlayışı geliyor. Ve her yeni kod baştan taranacaktır.

 

Forumun ilginç gerçekleri. Biri bir şey istediğinde kimse bir satır kod yazmaz. Ve yazar yazmaz hemen gelirler, sıraya girerler ve takırdamaya başlarlar - oh, oh, oh, ne yanlış kod. Ve ilginç bir şekilde, bu genellikle üç peni kadar basit kodlar için geçerlidir. Her boşluk inceleniyor. Ve daha karmaşık bir şey olarak, bir tanktaki kadar sessiz, sağır.

Neden: