Thread overview
İlginç for() döngüsü örnekleri...
Jul 31, 2012
Salih Dinçer
Jul 31, 2012
Salih Dinçer
Jul 31, 2012
Salih Dinçer
July 31, 2012

Merhaba,

Bildiğiniz ilginç örnekler var mı?

Teşekkürler...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 31, 2012

Ooo, bu çok sağlamdı! Parmaklarım titreyerek yazıyorum ki böyle kapsamlı bir şey beklemiyordum desem yeridir...:)

En güzeli de güzel parantezlere rağmen küme dışında da değişkenlerin etkin olması. Bunu açıkçası bilmiyordum, çok faydası oldu. Teşekkür ederim. Benim de tek türetebildiğim örnek şu şekilde:

   int derece = 3, hız, x;
   for(if(derece > 0 && derece < 30)
       hız = 2; else hız = 10;
       derece < 100;
       derece++, x = derece % hız ? 0 : derece++) {
       derece.write("\t");
   }

Elbette çok saçma, hatta okunabilirliliği yüksek olan bir benzeri yapılabileceği kanaatindeyim. Çünkü 2 + 1 ile üç farklı koşul kullandım. Tam bir karmaşalar zinciri gibi ve herhalde hiç kimse beğenmeyecektir. Öyle ki iki noktalı virgüle 'if()''den dolayı zorunlu olarak bir tane daha ekledim. Gerçi güzel parantezler ile tıpkı Ali hocamın örneğine benzer kapatabilirdim. Özetle, son bölümdeki virgülü de sayarsak da etti mi üç buçuk virgül...:)

Offf, karmaşa üstü karmaşa! Peki ne yapar bu parça? Kısaca başlangıç ısısına göre kendi hızını belirler. Eğer 30 dereceden düşük ısılarsa fazladan bir kere daha (toplamda ise ikişer ikişer) sayı artar. Tersi bir koşulda ise teker teker artmanın yanında her 10 derecede iki artar. Evet, çok saçma ve de daha güzel bir benzeri yapılabilirdi.

İş olsun işte...:)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 31, 2012

Ali hocamdan öğrendiğim, şu kümeleme olanağını paylaştığım örneğe uyguladım ve bir gerçeğin farkına vardım. Aslında 'for()' döngüsünün ilk bölümünü istersek dışına da alabiliriz. Bu durumda ikisi arasında tek fark olacaktır; o da tanımlanan değişken veya değişkenlerin küme sonunda ölmesidir. Bunları şu örnekte denedim:

import core.stdc.stdio: printf;

void main(string[] param)
{
//* code-toggle-on/off
   for({
         int derece = 3, hız, x;
         if(derece > 0 && derece < 30)
         hız = 2; else hız = 10;
       }
       derece < 100;
       derece++, x = derece % hız ? 0 : derece++) {
       printf("%d\t", derece);
   }
/*/
   int derece = 3, hız, x;
   if(derece > 0 && derece < 30)
   {
      hız = 2;
   } else {
      hız = 10;
   }
   for(;derece < 100; derece++) {
       //x = derece % hız ? 0 : derece++;
       if(derece % hız == 0) derece++;
       printf("%d\t", derece);
   }//*/
}

Her iki kod parçası da Linux32'de 1924 byte object code üretiyor. Hatta ikinci kodda, gövdeye aldığım şu üçlü koşulu değiştirdiğimde bir değişkenden avantaj ediyorsunuz ki kod 1916 byte'a düşüyor! Demek ki hiç okunabilirliği azaltmadan geleneksel şekilde yazım belki daha çok esneklik getirilebilir.

Siz ne dersiniz arkadaşlar? Ali hocam ile dialog yapıyormuş gibi geçmese ne iyi olurdu...:)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 31, 2012

D'de for'un yazım kurallarına göre iki değil, yalnızca tek noktalı virgül gerekiyor. O aklıma geldi:

import std.stdio;

void main()
{
   int i;

   for ({
             int k;
             writeln("Burada istediğim deyimler olabilir");

             foreach (j; 0 .. 5) {
                 writeln("İlkleme bölgesi ", j);
                 k += j;
             }

             double l = 4.5;
        }

        i < 4;  // <-- işte tek noktalı virgül

        ++i) {

       writeln("  for'un içi ", i);
       writeln("  k ve l burada görünüyor: ", k, ' ', l);
   }
}

Çıktısı:

'Burada istediğim deyimler olabilir
İlkleme bölgesi 0
İlkleme bölgesi 1
İlkleme bölgesi 2
İlkleme bölgesi 3
İlkleme bölgesi 4
for'un içi 0
k ve l burada görünüyor: 10 4.5
for'un içi 1
k ve l burada görünüyor: 10 4.5
for'un içi 2
k ve l burada görünüyor: 10 4.5
for'un içi 3
k ve l burada görünüyor: 10 4.5
'

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]