August 13, 2009

Tekrardan elinize sağlık :)

Bence ileri düzey işlemlerin daha sonraki derslere bırakılması daha iyi olmuş. Yoksa fazla karışık gelebilirdi yeni öğrenen birisine.

Tavisyeler
Tanımlama başlığı altında diziler için genel manada nasıl tanımlanacağı belirtilebilir.
Sözdizimi (Bu ifade bana hep saçma gelmiştir ama daha iyisi aklıma gelmiyo <_< )
'tip'[diziUzunluğu] değişkenAdı

Konu anlatımındaki örnekler int tipi üzerine yoğunlaşmış. Aynı şekilde problemler kısmındaki sorularda sadece int ile yapılacak işlemler. Programlamaya yeni başlayan biri dizilerin sadece int-real sayı tipleri veya sadece sayısal veri tipleri ile kullanıldığı gibi yanlış bir anlam çıkartabilir. Bu yüzden problemler kısmındaki soruların bir tanesi string veya char tipi ile ilgili bir soruya dönüştürülmesi daha iyi olabilir.

Yine sorulardan bir tanesi, konuyu anlatırken belirttiğiniz gibi dizi uzunluğunda yapılan hatalarla ilgili olabilir. Mesela yanlış dizi uzunluğundan hata veren bir program verilip koddaki hatanın bulunup çalışır hale getirilmesi istenebilir.

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

August 12, 2009

Diziler:

http://ddili.org/ders/d/diziler.html

Dilimler [slice] gibi ileri düzey işlemleri sonraya bıraktım, çünkü zaten o olanakların nasıl olacakları daha belli değil! :D

Ali

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

August 13, 2009

Alıntı (acehreli):

>
  1. Dizi dışına erişme problemine yer açmak için şimdiki problemlerin ikisini birleştirdim. Aklıma indeks hatasıyla ilgili küçük bir program gelmiyor... :( Fikir?

Ali

ustad soyle basit bir sey olabilir:

import std.stdio;

void main()
{
	static string[] en_guzel_sehirler = ["istanbul", "kuala lumpur", "semerkand", 5:"johor"];
	// yukaridaki diziyi baz aldiginizda,
	// bir sonraki satirin ciktisi ne olacaktir?
	writeln(en_guzel_sehirler[6]);
}

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

August 13, 2009

o zaman soyle bir sey olabilir.

import std.stdio;

void main()
{
   int[10] sayilar;
   int i = 0;
   while(i <= 10)
   {
       sayilar[i] = i*i+1-5;
	    i++;
   }
   sayilar.reverse;
   writeln(sayilar);
   // bu kodun ciktisi nedir?
   // hata varsa, hatayi nasil duzeltirsiniz?
}

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

August 13, 2009

Aşağıdaki gibide birden fazla hatayı adım adım bulabilirlerde.

import std.stdio;
import std.cstream;

int main()
{
   int[] sayılar;
   int girişSayisi;
   int k;
   int sayaç=0;

   write("Kaç adet sayı girişi yapacaksınız:");
   din.readf(&girişSayisi);
   sayılar = new int[girişSayisi];
   while(sayaç<=girişSayisi)
   {
       writef("%d.Sayıyı giriniz:",sayaç+1);
       din.readf(&sayılar[sayaç]);
       sayaç++;
   }

   sayaç =1;
   writeln("===Diznin elemanları====");
   while(sayaç<=sayılar.length)
   {
       sayaç++;
       writef("%d ",sayılar[sayaç]);
   }

   return 0;
}

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

August 13, 2009

Teşekkürler...

  1. Problem çözümlerinden birisinde yaptığım bir hatayı düzelttim:
// ÇOK AYIP HATA: ;)
if ((sayı % 2) == 1) {
   // tek
} else {
   // çift
}
  1. Tanımlanma başlığının sonuna biraz daha açıklama koydum ve örnekler verdim.

  2. string konusuna bu dersten sonra girmek üzereyim; onun için örneklerde daha kullanmadım. Bu kadar uzun süre bahsetmeden gelebildiğime şaşırıyorum doğrusu. :) Umarım çok sıkıcı olmamıştır.

  3. Dizi dışına erişme problemine yer açmak için şimdiki problemlerin ikisini birleştirdim. Aklıma indeks hatasıyla ilgili küçük bir program gelmiyor... :( Fikir?

Ali

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

August 13, 2009

Soru güzel ama bir kaç nedenden ötürü onu bu aşamada kullanamayız:

  • string'leri hemen bu dersten sonra anlatacağım, (string'ler char dizileri oldukları için önce dizileri anlatmak gerektiğini düşündüm)

Ama önemli değil; string yerine başka bir tür kullanabiliriz tabii...

  • Daha önemlisi, 'string[] dizi = ...' diye yazınca dizi bir 'slice' oluyor. Bu konu çok karışık olduğu için ve zaten D'ciler tam da şu sıralarda bunları değiştirdikleri için yalnızca statik ve dinamik diziler kullandım.

(Not: Statik kelimesini bu kullanımda 'static' anlamında değil, uzunluğu sabit anlamında kullanılıyorum; çünkü belgelerinde onlar da static kelimesini iki değişik anlamda kullanıyorlar! :#: )

Ben dinamik dizileri anlatırken çok dikkatli olarak sağ taraflarına bir şey koymadım:

 int[10] statik_dizi_ilk_değersiz;
 int[10] statik_dizi_ilk_değerli = ...;
 int[]   dinamik_dizi;
 int[]   slice = ...;

İşte o sonuncusunda bence büyük yanlışlık yapmışlar! Nasıl olur da birisi dinamik dizi olur, öteki slice olur! Neyse ki, bunlar değişiyor...

Neyse... Bu yüzden o örneği bu aşamada kullanamam. :) Problemin şu kadar basit olmasını da istemiyorum:

  double[5] sayılar;
  write(sayılar[5]);

Çok kolay herhalde. Gerçekten karşılaşılabilecek bir hata bulabilsek... :)

Ali

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

August 14, 2009

dwt isteruk!

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

August 13, 2009

İkinize de teşekkürler! İki programı birleştirdim ve diğer programlarla tutarlı olacak şekilde kendimce değiştirdim:

http://ddili.org/ders/d/diziler.html

İlk defa olarak çözümü çözüm sayfasında hemen vermek yerine önce kendilerinin çözmelerine özendirmeye çalıştım. Belki de bütün sorularda öyle yapmalıyım. Çözüm sayfasında önce ipucu verilsin, sonra isterlerse çözümü görsünler.

Galiba güzel fikir... :)

Ali

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

August 19, 2009

Karakterler:

http://ddili.org/ders/d/karakterler.html

Sonundaki program size tanıdık gelecek. Teşekkürler esatarslan52! ;)

Ali

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