Thread overview
Derslerle ilgili sorular
Aug 24, 2009
esatarslan52
Aug 24, 2009
esatarslan52
July 27, 2009

Bir değişkeni string değerde nasıl oluşturabiliriz ? İlk str denedim olmadı.String denedim olmadı. Char ı denedim yine hata verdi. Galiba string değerler için char ile tanımlamak lazım ama ben beceremedim.

import std.cstream;

void main()
{
   dout.writefln("Merhaba dünya!");
}

Galiba burada uygulamaya bir cstream adlı modül ekliyoruz. Benim burada sormak istediğim cstream adlı modüldeki dout.writefln("Merhaba dünya!"); fonksiyonu ile stdio adlı modüldeki write("Merhaba Dünya"); arasındaki fark nedir. Nerede hangisini kullanmak gerekir. Harelde ikiside aynı şey değildir. Değil mi?

import std.cstream;

void main()
{
   dout.writef("Okulda kaç öğrenci var? ");

   // Öğrenci sayısının tutulacağı değişkenin tanımlanması
   int öğrenci_sayısı;

   // Girişten gelen bilginin öğrenci_sayısı değişkenine atanması
   din.readf(&öğrenci_sayısı);

   dout.writefln( "Anladım: okulda ",
                  öğrenci_sayısı, " öğrenci varmış.");
}

Birde buradaki & operatörü ne işe yaramaktadır. Harelde oraya başka operatörlerde geliyordur. Acaba onların görevi nedir?

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

July 27, 2009

Biraz sabır! :D Yakında devam edeceğiz...

Şimdilik: D'de değişken dizgilerin türü 'char[]'. 'string' de kullanabilirsin ama 'string''ler değişmezdirler (immutable).

import std.cstream;

void main()
{
   // değişmez (immutable)
   string merhaba = "Merhaba";

   // değişebilir; değişmezden kopyalanarak ilkleniyor
   char[] hedef = "dünya".dup;

   dout.writefln(merhaba, " ", hedef, "!");

   hedef = "Venüs".dup;
   dout.writefln(merhaba, " ", hedef, "!");
}

dout.write ile write'ın aynı olduklarını düşünebilirsin. Bu, C'de şunların ikisinin eşdeğer olmalarına benzer:

fprintf(stdout, "merhaba");
printf("merhaba");

& işlecini elimdeki derste anlatıyorum zaten. Kısaca, read'in okuduğu bilginin nereye yerleştirileceğini belirtir. Yani "hangi adrese" yerleştirileceğini... O yüzden "adres işleci" de denebilir. İşaretçi kavramı yani...

Ali

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

August 24, 2009

Dilimler dersini okuduktan sonra alttaki ödevi yaptım. Çözümü de bakmadan yaptım :D. Sonra cevabı çözümle karşılaştırdım. Ancak orada .dup'un önemli olduğu yazıyordu. Burayı tam olarak anlamadım.
Benim çözümüm:

import std.stdio;

void main()
{
   int sayılar[10] = [ 1, 1, 1, 1, 1, 2, 2, 2, 2, 2 ];
   int temp[5] = sayılar[0..$/2];
   writeln("Once:  ", sayılar);
   sayılar[0..$/2] = sayılar[$/2..$];
   sayılar[$/2..$] = temp[0..$];
   writeln("Sonra: ", sayılar);
}

Ali hocamın çözümü:

import std.stdio;

void main()
{
   int sayılar[10] = [ 1, 1, 1, 1, 1, 2, 2, 2, 2, 2 ];
  // Önce ilk yarının bir kopyasını alıyorum;
   // Sonundaki .dup ÖNEMLİ!
   int kopya[] = sayılar[0..$/2].dup;

   // İlk yarıya son yarıyı kopyalıyorum
   sayılar[0..$/2] = sayılar[$/2..$];

   // Son yarıya ilk yarının kopyasını kopyalıyorum
   sayılar[$/2..$] = kopya;

   writeln("Sonra: ", sayılar);
}

ikisi de aynı sonucu veriyor. .dup burada neden önemli?

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

August 24, 2009

Kopyasını alacağın dilimin boyutunu bilmediğini varsayarsak kopyalama satırını int temp[] = sayılar[0..$/2]; şeklinde değiştirdiğimizde yine yanlış olan sonucu veriyor. Benim farkettiğim bu, belki teknik açından da farklılıklar olabilir.

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

August 24, 2009

Şimdilik olayı pek deşmemek en mantıklısı kanımca.Yoksa Ali beyinde dediği gibi kirli çamaşırlar çıkıyor :-D .

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

August 24, 2009

Ah! İşte burada daha önce de konuştuğumuz statik dizi, dinamik dizi, ve dilim kavramlarının birbirlerine bu kadar yakın olmalarının sıkıntısını çekiyoruz! :) (Bunları tam da şu sıralarda değiştiriyorlar. Umarım daha kullanışlı bir şey çıkar.)

emre413 dizinin uzunluğunu yazınca, yani şöyle deyince:

int temp[5] = sayılar[0..$/2];

sol tarafta bir statik dizi oluşuyor ve sağ taraftan kopyalanıyor. Bense şöyle uzunluğunu yazmayınca:

int kopya[] = sayılar[0..$/2].dup;

sol taraf, sağ taraftan kopyalanan ve ismi olmayan dizinin bir dilimi oluyor. (Aslında dinamik dizi de oluyor galiba. Bu kavram karmaşasını daha önce konuşmuştuk.)

esatarslan52'nin farkettiği gibi, sağ tarafta .dup olmazsa sağdaki dizinin dilimi oluyoruz; kopyası değil.

Bu konuyu sonraya bırakmaya çalışmıştım ama string'lerin değişmezlik [immutable] kavramı sırasından anlatırken gerekli olduğu için vermek zorunda kaldım ve kirli çamaşırlar hemen ortaya döküldü... :D

Ali

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

August 25, 2009

Teşekkürler,
Peki o zaman en iyisi dediğiniz gibi olayı fazla kurcalamamak.

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