Jump to page: 1 2 3
Thread overview
yapı elemanlarına ulaşımda foreach() kullanımı
Jan 18, 2018
cos00kun
Jan 18, 2018
erdem
Jan 18, 2018
cos00kun
Jan 18, 2018
cos00kun
Jan 18, 2018
erdem
Jan 18, 2018
cos00kun
Jan 18, 2018
kerdemdemir
Jan 18, 2018
cos00kun
Jan 19, 2018
cos00kun
Jan 19, 2018
cos00kun
Jan 19, 2018
cos00kun
Jan 19, 2018
cos00kun
Jan 19, 2018
cos00kun
Jan 20, 2018
cos00kun
Jan 20, 2018
cos00kun
January 18, 2018

Aşağıdaki kodda foreach() kullanarak Saat yapısındaki elemenları ekrana yazdırmanın en basit yolu nedir ? (varsa) "...." yere ne yazalımki (foreach kullanarak !! ) saat,dakika ve saniye değerlerini ekrana çıkarsın ?

import std.stdio;
struct Saat {
	ushort saat;
	ushort dakika;
	ushort saniye;
}

void main()
{
	Saat zaman;
	foreach(elemanlar;........) {
		write(elemanlar);
	}
	readln();
}

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

January 18, 2018

İlkönce bir tane yapı örneği oluşturmak gerekiyor. Örneğin

   Saat saat = Saat(3, 24, 18);
   writeln(saat.dakika);

Hatta daha iyisi saat yapısının bir 'toString()' işlevi olabilir. Böylece writeln(saat) şeklinde kullanabiliriz.

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

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

January 18, 2018

evet sağolun aslında kitapta Yapı bölümünü zaten okudum. write(zaman) ile çözümüde biliyorum ancak benim tek amacım foreach ile bunları otomatik okutmaktı. Aslında itiraf etmeliyim amacım http://ddili.org/forum/post/12949 burdaki programı artık uygulamaya geçirerek bunu GtkD kütüphanesi yardımıyla tamamlamak tı :blush:
yine itiraf edeyimki orda yazılan şu kısımda biraz tıkandım sanırım

........
   auto entries = new Falcon4Entity[](adet);
   auto okunanEntries = dosya.rawRead(entries);
........

ayrıca burada sanki sorduğumun cevabı var gibiydi.. Ben tüm anlattıklarınıza rağmen şöyle bir mantık düşündüm sanırım.. git dosyadan struct da belitilen değişkenlerin byte uzunlukları kadar değeri al ve struct değişkenlerine at bunları yaptıktan sonra yazdır..
Bu noktada tekrar o konulara ve yazılanlara bakıp biraz daha kurcalayayım bakalım.. eğer bir ilerleme kaydedemez yada anlayamazsam tekrar sorarım.. Eğer konuyu iyice kavrarsam GtkD topicğimde kaldığım yerden bu bahsettiğim programı yazarak devam ederim :-)

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

January 18, 2018

tamamdır Ali hocam istediğim tüm cevapları aldım sağolun :-)

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

January 18, 2018

Ali hocanın gösterdiği kullanıma örnek de şu şekilde olabilir:

import std.stdio;
import std.format;
import std.random;

struct Saat
{
   this (uint saat, uint dakika, uint saniye)
   {
       this.saat_ = saat;
       this.dakika_ = dakika;
       this.saniye_ = saniye;
   }

   uint saat_;
   uint dakika_;
   uint saniye_;

   uint saat() const @property { return saat_; }
   uint dakika() const @property { return dakika_; }
   uint saniye() const @property { return saniye_; }

   string toString() const
   {
       return format!"%02s:%02s:%02s"(saat_, dakika_, saniye_);
   }
}
void main()
{
   auto birSaat = Saat(12, 15, 22);
   writeln(birSaat);

   Saat[] saatler;
   saatler.length = 19;

   foreach(saat; saatler)
   {
       saat = Saat(uniform!("[]")(0, 12), uniform!("[]")(0, 60), uniform!("[]")(0, 60));
       writeln(saat);
   }
}

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

January 18, 2018

Erdem hocam güzel çözüm olmuş teşekkürler

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

January 18, 2018

Bu örnek için döngü şöyle yazılabilir:

   foreach(eleman; __traits(allMembers, Saat)) {
       writeln(__traits(getMember, zaman, eleman));
   }

Her tür yapıyla çalışması için şöyle bir işlev kullanılabilir:

import std.stdio;
struct Saat {
   ushort saat;
   ushort dakika;
   ushort saniye;
}

void üyeleriYazdır(T)(auto ref const(T) nesne) {
   foreach(üye; __traits(allMembers, T)) {
       writeln(__traits(getMember, nesne, üye));
   }
}

void main()
{
   auto zaman = Saat(1, 2, 3);
   üyeleriYazdır(zaman);
}

Üye isimlerini de içerecek biçimde:

void üyeleriYazdır(T)(auto ref const(T) nesne) {
   foreach(i, üye; __traits(allMembers, T)) {
       if (i != 0) {
           write(", ");
       }
       write(üye, ":", __traits(getMember, nesne, üye));
   }
   writeln();
}

(Not: Hem sol değerlerle hem de sağ değerlerle çalışabilsin diye auto ref yazdım.)

Ali

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

January 18, 2018

Erdem'in söylediği türüne göre en uygun yöntem. Ben, nesne üyelerini başka dillerde olduğu gibi hemencecik yazdırıvermek için o kadar karmaşık bir yol düşündüm. Ama aslında o iş için 'write(zaman)' bile çoğu durumda yeterli oluyor.

Ali

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

January 18, 2018

Birinci satır, 'adet' elemanı olan bir Falcon4Entity dizisi oluşturuyor. Şunun eşdeğeri:

   Falcon4Entity[] entries;
   entries.length = adet;

İkinci satır da dosyaya daha önce rawWrite ile yazılmış olduğu varsayılan Falcon4Entity dizisini yukarıda oluşturduğumuz dizinin elemanlarının üzerine okuyor.

rawWrite ve rawRead'i daha basit yapılarla denemeni öneririm. Bu yöntemin string üyeler için (veya başka türden dinamik dizi üyeler için) kullanılamadığını göreceksin. Sabit uzunluklu dizilerde sorun yoktur ve zaten o yüzden gösterdiğin konudaki örnekte 'byte[8]' gibi sabit uzunluklu diziler kullanılıyor.

Ali

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

January 19, 2018

Coskun sorunu surda tartisilmis soruya benzettim benzer bir konuda calisiyor olabilirmisin?

http://ddili.org/forum/post/13012

Eger ayni ise ben soyle bir oneride bulunmustum :

struct ZamanFormati
{
int saat;
int dakika;
int saniye;
bool sabahMi;
};

char* timeConversion(char* s) {
ZamanFormati zaman;
zaman.sabahMi = s[strlen(s) - 2] == 'A';
sscanf(s, "%2d : %2d : %2d", &zaman.saat, &zaman.dakika, &zaman.saniye);
sprintf( s, "%02d:%02d:%02d", zaman.sabahMi ? zaman.saat % 12 : ((zaman.saat %12) + 12), zaman.dakika, zaman.saniye);
return s;
}

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

« First   ‹ Prev
1 2 3