Hatalar, hatalar, sorular - sayfa 326

 
Urain :

atama işlemleri yaptığınız ilk gönderide birden çok basamaklı atamaya izin veriliyor. Burada çoklu karşılaştırma yapmaya çalışıyorsunuz.


bu yüzden karşılaştırabilirim, ancak if(a<b<c) işe yarıyor ve daha güzel görünüyor, ancak yardım bu konuda hiçbir şey söylemiyor gibi görünüyor. nasıl daha hızlı çalışır?
 
sergey1294 :
bu yüzden karşılaştırabilirim, ancak if(a<b<c) işe yarıyor ve daha güzel görünüyor, ancak yardım bu konuda hiçbir şey söylemiyor gibi görünüyor. nasıl daha hızlı çalışır?

İfadeniz buna eşdeğer

 if (a<(b<c))
b ve c'yi karşılaştırırsanız, bu karşılaştırmanın sonucu 0 veya 1 olacaktır, ardından bu sonucu a ile karşılaştırırsınız.
 
sergey1294 :
bu yüzden karşılaştırabilirim, ancak if(a<b<c) işe yarıyor ve daha güzel görünüyor, ancak yardım bu konuda hiçbir şey söylemiyor gibi görünüyor. nasıl daha hızlı çalışır?

Bu nasıl çalışır

 if (a&&b&&c== 3 ) Alert ( "a=b=c=3" );
if (a<b&&b<c) Alert ( "a<b<c" );
  if (a==b) Alert ( " a=b " );

ve bu yüzden hayır

  if (a<b<c) Alert ( "a<b<c" );
  if (a=b=c= 3 ) Alert ( "a=b=c=3" );
  if (a==b==c== 3 ) Alert ( " a=b=c=3 " );
 if (a==b==c) Alert ( " a=b=c " ); //Вот нежелание работать этого примера для меня странно (хотя может так и задумано)
Ukrayna :

İfadeniz buna eşdeğer

b ve c'yi karşılaştırırsanız, bu karşılaştırmanın sonucu 0 veya 1 olacaktır, ardından bu sonucu a ile karşılaştırırsınız.
Böyle bir mantıkla her şey netleşiyor, sadece nedense önce a ve b'nin karşılaştırılacağını düşünüyorum (belki yanlış elbette) ...
 
Urain :

İfadeniz buna eşdeğer

b ve c'yi karşılaştırırsanız, bu karşılaştırmanın sonucu 0 veya 1 olacaktır, ardından bu sonucu a ile karşılaştırırsınız.

Çok açık ama işte bu deyimin üzerine küfür etmeyen ama işe yaramayan bir şaka

 void OnStart ()
  {
//---
   int a= 1 ;
   int b= 2 ;
   int c= 3 ;
   int d= 3 ;
//---   
   if (a!=b<c==d) Alert ( "" );
   else Alert ( "Условие не верно" );
//---
  }
 
Interesting :
...yalnızca nedense ilk önce a ve b karşılaştırılacak diye düşünüyorum (belki yanlış olabilir tabii) ...
Evet, tamamen mekanik olarak yanılmışım, en başından beri bir sol karşılaştırma var, sonra bir doğru.
 
sergey1294 :

Belli ama işte bu deyimin şakası küfür değil işe yaramıyor

Burada şaka yok, sadece operasyonların önceliklerini ve Urain'den bir açıklamayı dikkate almanız gerekiyor.

Bu ifade de küfür değil ama korkunç bir şekilde buggy

 if (a<b<c) Alert ( "a<b<c" );

Bu sorun, revizyon, "Öncelikler ve işlem sırası" bölümünde ayrıntılı olarak açıklanmaktadır (önceliği ve yürütme sırasını dikkate almanız gerekir).

Bu nedenle, her şeyi doğru anlarsam, derleyiciye göre karşılaştırma şöyle görünür (Nikolai'nin yorumlarını dikkate alarak)

 if ((a!=(b<c))==d) Alert ( "" )
 
Interesting :
Ve en azından listenin yaklaşık boyutu ne? Belki listenin boyutunda bir sınır vardır ...
Tam 100 satır.
 
-Alexey- :
Tam 100 satır.

Listede 100'den 106'ya (ve her zaman farklı bir sayı, ancak 110 değil) görüntülenen kitaplıklarımdan birini (110 işlev) denedim.

 

.csv dosyasını okurken, aynı anda birkaç sorun ortaya çıktı. Yanlış işlemin nedenlerini bulmaya çalışmak için basit bir komut dosyası yazdım. Komut dosyası, "test.csv" dosyasındaki verileri okur. Dosyanın sonuna ulaşır ulaşmaz, "for" döngüsünün yineleme numarasını , dosyanın boyutunu ve dosya işaretçisinin günlüğe konumunu yazdırır. Ama burada garip şeyler oluyor, yani: "test.csv" dosyasında yalnızca 15 satır var, bu nedenle "for" döngüsünün yineleme sayısı 14 olmalı, ancak günlükte 0 yazdırılıyor.Dosya boyutu doğru yazdırılıyor , ancak dosya sonu işaretçisinin konumu bir nedenden dolayı - bu, dosyanın boyutundan daha büyük. Komut dosyası kodu:

 void OnStart ()
  {
   int handle;
   ulong i, size;
   double _Ask, _Bid;
   string str;
      
   handle = FileOpen ( "test.csv" , FILE_CSV | FILE_READ , ',' );
   
   if (handle != INVALID_HANDLE )
     {
      size = FileSize (handle);
      
       for (i = 0 ; i < size; i++)
        {
         str = FileReadString (handle);
         _Ask = FileReadNumber (handle);
         _Bid = FileReadNumber (handle);
        
         if ( FileIsEnding (handle))
           {
             Print (i, " " ,size, " " , FileTell (handle));
             break ;
           }
        }
     }   
      
   FileClose (handle);

   return ;
  }

"test.csv" dosyası ve günlük ekli. Bu konu hakkında kimin fikri var?

PS İşin en ilginç yanı bu betiğin MT4'te hatasız çalışması.

Dosyalar:
test.zip  1 kb
 
DenisR :

.csv dosyasını okurken, aynı anda birkaç sorun ortaya çıktı. Yanlış işlemin nedenlerini bulmaya çalışmak için basit bir komut dosyası yazdım. Komut dosyası, "test.csv" dosyasındaki verileri okur. Dosyanın sonuna ulaşır ulaşmaz, "for" döngüsünün yineleme numarasını, dosyanın boyutunu ve dosya işaretçisinin günlüğe konumunu yazdırır. Ama burada garip şeyler oluyor, yani: "test.csv" dosyasında yalnızca 15 satır var, bu nedenle "for" döngüsünün yineleme sayısı 14 olmalı, ancak günlükte 0 yazdırılıyor.Dosya boyutu doğru yazdırılıyor , ancak dosya sonu işaretçisinin konumu bir nedenden dolayı - bu, dosyanın boyutundan daha büyük. Komut dosyası kodu:

"test.csv" dosyası ve günlük ekli. Bu konu hakkında kimin fikri var?

PS İşin en ilginç yanı bu betiğin MT4'te hatasız çalışması.

Hazırlıksız, tüm dosya str'ye yazılır ...
FILE_ANSI bayrağını şu şekilde ekleyin: varsayılan olarak unicode okur :)
Yine de 15 olacağım çünkü sonunda boş bir satır var.