Jump to page: 1 2
Thread overview
January 27, 2011

Merhabalar;

D dilini Ali Hocamın D programlama dili adlı çalışmasından öğreniyorum. 19 numaralı konu başlında anlatılanlara göre şöyle bir program tasarladım:

import std.stdio;

void main()
{
   writeln(": DILIMLER: ");
   writeln();
   writeln("Var olan bir dizinin belirli bir bolumune erisim saglayacak olan yapiya dilim denir.");
   writeln("Dilim sayesinde var olan baska bir dizinin, elemanlarinin bir bolumunu,");
   writeln("sanki daha kucuk ayri bir diziymis gibi kullanabiliriz. ");
   writeln("Ornek olarak ayGunleri dizisini dorde dilimleyerek birbiriden ayri dort ");
   writeln("ceyrek diziymis gibi soyle kullanabiliriz. ");
   writeln();

   int ayGunleri[12] = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ];
   int ilkCeyrek[]      = ayGunleri[0..3];
   int ikinciCeyrek[]   = ayGunleri[3..6];
   int ucuncuCeyrek[]   = ayGunleri[6..9];
   int dorduncuCeyrek[] = ayGunleri[9..12];
   writeln("ilk ceyrek dilimimiz: ", ilkCeyrek);
   writeln("Dilimler ayri birer dizi degildirler. Bunlar asil dizinin elemanlarina erisim ");
   writeln("saglarlar.Dilimlerin elemanlarina yapilan her mudahale diziye de yansir.");
   writeln("ilkCeyrek dilimine bir eleman ekleyelim ");
   writeln();
   ilkCeyrek ~= 40;
   writeln("ilkCeyrek dizimizin hali: ", ilkCeyrek);
   writeln("ayGunleri dizimiz ise: ", ayGunleri);
   writeln("Himm. dilimlere deger ekledik ama bu eklememiz ana diziye yansimadi -");
   writeln("cunku ana dizimiz sabit uzunluklu- ancak bakalim degisiklik yapilabiliyor mu? ");
   writeln();
   ilkCeyrek[] = 1;
   ikinciCeyrek[]=2;
   ucuncuCeyrek[]=3;
   dorduncuCeyrek[]=4;
   writeln("ilkCeyrek dizimiz : ", ilkCeyrek);
   writeln("ana dizimiz ayGunleri ", ayGunleri);
}

çıktı:  ilkCeyrek dizimiz : [1, 1, 1, 1]
ana dizimiz ayGunleri [31, 28, 31, 2, 2, 2, 3, 3, 3, 4, 4, 4]

Açıklamam:
"ayGunleri dizisi sabit uzunluklu bir dizi. Onu dilimledigimizde ise dilimlerimiz dinamik dizi haline geliyor. Biz biliyoruz ki dinamik dizi halindeki diziler eleman alabilirler. Oysa kitapta dizi dilimlerine erisilip onlarda degisiklik yapildiginda dizinin kendisi de bundan etkileniyor diye belirtilmişti. O halde ilkCeyrek dizisine ekledigimiz 40 degerindeki bir eleman dizi yapısını degistirecek mi diye bakmak istedim. Degistirmedi. Dizi sabit uzunluklu oldugundan oyle olması bana mantıksız gelmedi. Ancak hem ilkCeyrek dilimi hem de diger ceyreklerin degerlerini kitaptaki örnege gore degistirdigimde icerigine 40 degerli eleman ekledigim ilkCeyrek dilimi haric diger dilimlerde degisiklikler olurken ve bu ana dizimize yansirken ilk Ceyregin temsil ettigi dilim ana dizimizdeki eski halini korudu. "

Sorum: Peki ilkCeyrek diliminin veya ana dizimiz olan ayGunleri dizimizin bu davranisi normal midir_?
Teşekkürlerimle

Mert.

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

January 27, 2011

İlk önce hoşgeldiniz!

Ali bey burada açıklamış: http://ddili.org/forum/thread/411

Kısaca dilimler asıl dizilere ulaşan bir referans türüdür. Ancak dilimlere yeni bir eleman eklendiğinde asıl dizi ile bağını koparır ve onun elemanlarını kendine kopyalar ayrıca birde yeni eleman eklenir.

Ali Bey şöyle özetlemiş:

Alıntı:

>

D'nin dilimlerinin garip tarafı, aynı elemanlara erişim sağlayan birden fazla dilim bulunduğunda ortaya çıkabiliyor: dilimlerden birisinin uzunluğu arttığında artık aynı elemanlara erişim sağlamaz hale geliyorlar. Uzunluk artınca elemanlar kopyalanıyor ve uzunluğu artan dilim bu yeni elemanlara erişim sağlamaya başlıyor. Dilimler o zamana kadar aynı elemanlara erişim sağlıyorlarken, uzunluğun artmasından sonra artık farklı elemanlara erişim sağlıyorlar.

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

January 27, 2011

Merhaba Can. Hoşbulduk.
Orayı gözden kaçırmışım. Hemen yöneliyorum.
İlgin için teşekkür ederim.
Mert

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

January 27, 2011

Biraz daha açıklayıcı olması için programın işleyişinide ayrıca anlatmak istedim. Buyrun:

Alıntı:

>

Sorum: Peki ilkCeyrek diliminin veya ana dizimiz olan ayGunleri dizimizin bu davranisi normal midir_?
Teşekkürlerimle

Evet. Daha önceki mesajımdan yola çıkarak programın işleyişine bakalım:


   int ayGunleri[12] = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ];
   int ilkCeyrek[]      = ayGunleri[0..3];
   int ikinciCeyrek[]   = ayGunleri[3..6];
   int ucuncuCeyrek[]   = ayGunleri[6..9];
   int dorduncuCeyrek[] = ayGunleri[9..12];

Buraya kadar her şey beklendiği gibi. dizimizi oluşturuyoruz ve hemen ardından dilimlerimizi oluşturuyoruz.

   ilkCeyrek ~= 40;

Bu işi bozuyor. Şimdiye kadar ilkCeyrek hep ayGunleri dizisinin belirli bir bölümünü gösterdi. Ancak ilkCeyreğe başka bir eleman eklendi. D'ciler yeni eleman eklendiğinde dilimin artık ilkCeyreği göstermesin ayrı bir dizi olsun demişler. Şimdiye kadar gösterdiği elemanlarıda kendine kopyalasın ondan sonra o dizi ile hiç bir bağı kalmasın demişler. Siz yeni bir eleman eklediğinizde yada çıkardığınızda gereken elemanları asıl diziden kendisine kopyalıyor ve artık kendine buyruk dizimiz yaşamına devam ediyor.

Yani artık ilkCeyrek dizimiz ayGunlerinin dilimi değil kendi elemanı olan bağımsız bir dizi oluyor. Ancak diğer ikinciCeyrek, ucuncuCeyrek .... dilimlerine birşey olmadı.

Ve son olarakta:

   ilkCeyrek[] = 1;
   ikinciCeyrek[]=2;
   ucuncuCeyrek[]=3;
   dorduncuCeyrek[]=4;

ilkCeyrek ayrı bir dizi olarak yoluna devam ediyor ve bütün elemanlarını 1 yapıyoruz. Diğerleri dilimler dilimlerin elemanını değiştirince asıl değişkenin elemanıda değişmiş oluyor.

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

January 27, 2011

Merhaba hocam,
Bu türden tuhaflıkları ben de merak ettiğimden kurcalamadan duramıyorum maalesef. Okudum, anladım, geçtim türü bir öğrenim modelini bir türlü benimseyemedim hâlâ. İşte Can beyin belirttiği örneği yani ilkCeyrek dizisinin yaşamını kontrol edip etmeme konusunda neler yapabileceğimi düşünürken mesajın gelmesi hoş oldu. Sanırım bir kaç dakika sonra oraya da kendiliğimden erişip "aaa böyle oluyormuş yahu" diyecekmişim olasılıkla. Konu pekişmiş oldu böylelikle. Ayrıca varlığından haberimin olmadığı makaleye de Can bey işaret etmiş. Kaynak bol olduktan sonra sorun yaşanacağını sanmıyorum ben.
keyifli bir süreç aslında. Tartışma alanlarını daha çok kurcalamalıyım. :-)

İlginiz için ayrıca teşekkür ederim.

mert

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

January 27, 2011

Mert, umarım böyle sıkıntılar hevesini kırmıyordur. Ayrıca titizliğin için çok teşekkürler. O konuyu düzelteceğim.

Can, arşiv gibi adamsın! :) Beni aynı açıklamayı yapmaktan (ve belki de kendimle çelişmekten :p) kurtardın.

Ali

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

January 28, 2011

Alıntı:

>

Bu türden tuhaflıkları ben de merak ettiğimden kurcalamadan duramıyorum maalesef.

Benim tam zıttım :-P Aslında böyle sorular çok yararlı. Bende sizin sayenizde dilimleri pekiştirmiş oldum. Bu yüzden böyle sorular sormaya devam etmelisiniz bence.

Alıntı:

>

keyifli bir süreç aslında. Tartışma alanlarını daha çok kurcalamalıyım. :-)

Kesinlikle. Hem eğlenmek hem de öğrenmek için.

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

January 28, 2011

Dilimler dersi içler acısı bir durumdaymış. "Başka Dizi Olanakları" olarak baştan yazıyorum:

'$', '.dup', dilimler, dilimin boyunun uzamasının paylaşımı sonlandırması (Mert'in başlattığı konu), bütün diziyi etkileyen işlemler ('dizi[] = 1' gibi), vs.

Ali

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

February 02, 2011

Alıntı:

>

Yazarken dikkatimi çeken ve derse eklediğim önemli bir konu oldu.

Kendiliğinden bilinecek bir şey değil ama iştahınızı kabartmak için önce burada göstereyim:

Teşekkürler bende unutmuştum. Yanıtını belki başkalarıda merak eder diye ve heyecanlansınlar diye vermiyorum :-P

Bunun yanıtı forumda var. Hatta Ali Bey hakkında diziler üzerinde tartışıyorken bunla ilgili kullanımın ne olduğunu tam bilmeden örnek vermiştim. Bu kullanımı ilk ve tek andreinin kitabında( pandoranın kutusunda der gibi :-P ) görmüştüm.

Şimdi bu kadar havalandım birde tahmin ettiğim şey çıkmazsa kendimi camdan aşağıya atarım :-)

İp ucu: Bu olanak dizilerde döngü kullanıp elemanlarıyla işlem yapmamızı gereksizleştiriyor. Ali beyin verdiği örnekte farkını göremeyiz. :-)

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

February 01, 2011

Alıntı (acehreli:1296237613):

>

Dilimler dersi içler acısı bir durumdaymış. "Başka Dizi Olanakları" olarak baştan yazıyorum

Tamam, yazdım; ama siteye koymadan önce bir kaç kere daha gözden geçireceğim. Yazarken dikkatimi çeken ve derse eklediğim önemli bir konu oldu.

Kendiliğinden bilinecek bir şey değil ama iştahınızı kabartmak için önce burada göstereyim:

import std.stdio;

void main()
{
   double[] dilim1 = [ 1, 1, 1 ];
   double[] dilim2 = [ 2, 2, 2 ];
   double[] dilim3 = [ 3, 3, 3 ];

   dilim2 = dilim1;              // (1)
   dilim3[] = dilim1;            // (2)

   writeln("dilim1: ", dilim1);
   writeln("dilim2: ", dilim2);
   writeln("dilim3: ", dilim3);
}

(1) ve (2) numaralı satırlar arasında önemli bir fark var. Nedir? :)

İşin kötüsü, o iki satır arasındaki anlamsal farkın programda hemen farkedilemiyor olması: programda belki de aylar sonra yapılan ufak bir değişiklik dilim2 ve dilim3 arasındaki fark nedeniyle beklenmeyen sonuçlar doğurabilir. Nedir? :)

Ali

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

« First   ‹ Prev
1 2