January 04, 2011

Gerçekten çok güzel yazmışsınız.Şimdi sıra gerçekleştirmede.İki boyutlu dizi olayı güzel.Onu yapmaya çalışacağım.
Şu anda dosyaları seçmemin nedeni,dosyaları düşünüyor olmam değil.Programı değiştirdiğimde oluşan değişiklikleri görmek istiyordum..Fakat kaydet() gibi bir fonksiyonu da yazarsam dosyalardan kurtuluruz. :D

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

January 04, 2011

Yavaş yavaş gerçekleştiriyorum.Şu arama işlevlerini yazınca(O arada bir de eşleme tablolarına çalışacağım.) eşleme tablolarına komple geçiş yapacağım.

Bazı işlevleri ve kolon sayısı kısıtlamalarını kaldırdım.

çokluEklemeyi desteklemeye karar verdim ve çokluKolonOluştur işlevini yazdım.

Bir inceleme yazınızı daha görmek isterim.

Fazla mı yükleniyorum size?Öyleyse özür dilerim.

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

January 04, 2011

Alıntı (Kadir Can):

>

eşleme tablolarına komple geçiş yapacağım.

Kesinlikle! Kullanımları da çok kolay... :)

Notlar:

  • vtOluştur() içindeki dosya, yerel bir nesne:
   void vtOluştur()
   {
	File dosya=File(dosyaAdı,"a");
   }

dosya, o işleve girildiğinde oluşturuluyor ve o işlevden çıkıldığında sonlanıyor. Şimdiki haliyle o vtOluştur'un hiçbir etkisi kalmamış

  • Hazır elin değmişken daha önce de şöylediğim şu kısaltmayı da kullanabilirsin:
   void çizgiÇek(const char[] ÇizgiŞekli)
   {
       for(int i=0;i<=90;i++){
       dosya.write(ÇizgiŞekli);
       }
       dosya.writeln();
   }

yerine

import std.string;
// ...
   void çizgiÇek(const char[] ÇizgiŞekli)
   {
       dosya.writeln(repeat(ÇizgiŞekli.idup, 90));
   }

Doğrusunu istersen .idup çağrısına gerek olmamalı; Phobos ufak düzeltmelerden geçtikçe o da ileride hallolur.

Alıntı:

>

Fazla mı yükleniyorum size?

Tabii ki değil. :)

Ali

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

January 05, 2011

Teşekkür ederim.repeat() işlevini de halledeyim.

Bir şey sormak istiyorum.

Eşleme tabloları kullanacağız ,eşleme tablolarında 2den(key ve value) haricinde veri tutmak mümkün mü?

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

January 06, 2011

Teşekkürler canalpay.Yakında eşleme tablolarına geçerken yardım eder misin?

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

January 06, 2011

Bende şu okulu temiz bir biçimde halledeyim sana yardımcı olmaya çalışacağım. Şuanlık hiç bakmadan sadece soruna yanıt veriyorum:

Alıntı:

>

Eşleme tabloları kullanacağız ,eşleme tablolarında 2den(key ve value) haricinde veri tutmak mümkün mü?

Evet. Örneğin şurada bende kullanmışım: http://code.google.com/p/dkv/source/browse/trunk/dkvG/dkvB.d?r=49#24
(24 ve 25.satırda tanımlamışım.)

Tanımlanması dchar gibi. Nasıl dchar[] deyince dchar dizisi oluyor aynen öyle.dchar[][] deyincede dchar[] dizisi oluyor dchar[] ise dchar dizisi...

Örneğin orada

bool değiştirildi_mi[string][string][string];

şeklinde tanımlamışım.

eşleme tablosuna özel işlevler işleçler nasıl kullanacağını konuyla az ilgisi olan bir konuda görebilirsin: http://ddili.org/forum/thread/228

Orada örneğin şöyle bir eşleme tablosu tanımlamışım:

bool değiştirildi_mi[string][string][string];

Ve şöyle bir biçimde işleçleri kullanmışım:


if(("ilk" in değiştirildi_mi)/*amaç değiştirildiğimi tablosunda ilk diye bir veri var
mı diye bakmak.*/&&("ikinci" in değiştirildi_mi["ilk"]*/eğer varsa ilk eşleme tab
losuna erişip ikinci diye veri var mı diye bakmak.)
&&("üçüncü" in değiştirildi_mi["ilk"]["ikinci"])/*Eğer ikincide de varsa 3.ye bakm
ak.*/)

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

January 06, 2011

Aslında ders oldukça açıklayıcı.Son bir haftaya kadar D ile ilişiğimi kesmiş olduğum için ben unutum.Yoksa derste sıkıntı yok.

Yapı fikri iyi gibi duruyor.Yapıları hatırlıyorum.

Sizce eşleme tablosu mu,yapı mı,yoksa karışık kullanımı mı?

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

January 06, 2011

Teşekkürler.

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

January 06, 2011

İyi fikir Can: Önce okul! :)

Alıntı (canalpay):

>

Orada örneğin şöyle bir eşleme tablosu tanımlamışım:

> bool değiştirildi_mi[string][string][string];
> ```

>

Öyle olur ama onun bir sakıncası da görülebilir. Orada, değiştirilme bilgisi veriden ayrı olarak duruyor. Veriyle ilgili başka bilgiler de olsa, örneğin sıkıştırılmış mı, şifrelenmeli mi, vs., o zaman aynı biçimde devam edersek iki eşleme tablosu daha gerekebilir:


bool sıkıştırılmış_mı[string][string][string];
bool şifrelenmiş_mi[string][string][string];



Bunu ben de eskiden C'de yapıyordum; ama yapıların yararını anladıktan sonra bir daha o duruma düşmedim veya düşmemeye çalıştım. :) Bu işin daha iyisi, ilgilendiğimiz bütün bilgiyi bir arada (bir yapıda veya bir sınıfta), tutmak olabilir.

Kadir Can'ın sorusunun yanıtı, hayır, eşleme tablolarında yalnızca indeks (anahtar) ve değer tutulabilir. Ama Can'ın da gösterdiği gibi, değer olarak başka eşleme tabloları da kullanılabilir; veya benim burada önereceğim gibi bir sınıf kullanılabilir.

Belirli indeksle ilgili olan bilgiler o sınıfın içinde tutulur.


import std.stdio;
import std.string : format;

class KayıtBilgisi
{
/* Asıl veri bu; örnek olsun diye int seçiyorum; herhangi başka bir tür de
* olabilirdi */
int veri;

// Bunlar o veriyle ilgili ek bilgiler
bool değiştirildi_mi;
bool sıkıştırılmış_mı;
bool şifrelenmiş_mi;
/* ... ve daha başka kayıt bilgileri ... */

/* Bir kayıt oluşturulabilmesi için veri değerinin bize söylenmesi şart; o
* yüzden bunu kurucu işlev parametresi olarak almak istiyoruz /
this(int veri)
{
this.veri = veri;
/
Diğerlerinin ilk değerleri 'false'tur; öyle bırakıyorum ama
* özellikle kendimiz de atayabilirdik */
}

/* Bu nesneyi güzelce string'e dönüştürmek için /
override string toString() const
{
/
Örneğin şöyle bir düzende: */
return format("%s (%s,%s,%s)",
veri, değiştirildi_mi, sıkıştırılmış_mı, şifrelenmiş_mi);
}
}

/* Bu, anahtar olarak string kullanan ve içinde KayıtBilgisi tutan bir eşleme

  • tablosudur. Programda 'KayıtTablosu' gibi güzel bir ismi olsun diye burada
  • 'alias' ile ona güzel bir isim veriyoruz. (Yani bu adım şart değil ama
  • yararlı.) */
    alias KayıtBilgisi[string] KayıtTablosu;

void main()
{
/* İstenirse hazır değerlerle ilklenebilir: */
KayıtTablosu tablo = [ "kadir can" : new KayıtBilgisi(42),
"can" : new KayıtBilgisi(7),
"ali" : new KayıtBilgisi(3) ];

/* Veya çalışma zamanında veri eklenebilir: */
tablo["veli"] = new KayıtBilgisi(18);

/* Daha sonradan: */
foreach (indeks, değer; tablo) {
writeln(indeks, ": ", değer);
}

/* Bir verinin tabloda bulunup bulunmadığını görmek için */
auto bulunan = "şükran" in tablo;

if (bulunan) {
/* 'bulunan'ın türü bir göstergedir; onun için değerine '*' ile
* erişiyoruz */
writeln("bulunan kayıt: ", *bulunan);

} else {
writeln("Öyle bir kayıt yok");
}
}



Aslında o programda da bir *kopukluk* var: kayıtların indeksleri ile kayıtlar birbirlerinden ayrı duruyorlar. Evet, indeks ve kayıtlar eşleme tablosu tarafından bir arada tutuluyorlar ama bazen indeks de asıl verinin parçasıdır. O zaman 'int' gibi basit veri türü yerine indeksle asıl veriyi bir arada tutan bir yapı veya sınıf kullanılabilir.

Programı şu şekilde değiştirmeye başlayabiliriz:


struct Veri
{
string isim; // <-- indeks de aslında Veri'nin parçası
int kapıNumarası;
}

class KayıtBilgisi
{
Veri veri;
/* ... */
this(Veri veri)
{



Kadir Can, şu dersi görmüş olduğunu ve anlamadığını varsayıyorum: ;)

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

Bana o dersi daha kolay anlaşılır yapmamda yardım eder misin. Seni neresinde kaybettim? :)

Ali

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

Daha fazlası gerekene kadar bu konunun #20 numaralı yazısındaki programdaki gibi olabilir bence:

string[][] kayıtlar;

Başka çözümleri yetersizlikler görüldükçe düşünürüz.

Ali

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