Ben onu tamamen unutmuşum.Artık telafi edecek bir kod yazmam gerekir. :)
Push() işlevi hatalı gibi geldi.konum sürekli yigin.length'ten küçük olmalı, yoksa farklı bir şey mi var?
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]
July 05, 2012 Şablonlar ile yığın sınıfı | ||||
---|---|---|---|---|
| ||||
Posted in reply to zafer | Ben onu tamamen unutmuşum.Artık telafi edecek bir kod yazmam gerekir. :) -- |
July 05, 2012 Şablonlar ile yığın sınıfı | ||||
---|---|---|---|---|
| ||||
Posted in reply to Salih Dinçer | Dolu dolu bilgi var, nereden başlayacağımı bilemiyorum doğrusu, en iyisi en baştan başlamak sanırım. Alıntı (acehreli): >Aslında Push()'ta ve Pop()'ta da enforce kullanabilir. Ali haklısın amacım sadece daha fazla olanağı bir arada gösterebilmekti. Alıntı (acehreli): >Eğer Yığın bir topluluksa, foreach onun üzerinde değil, onun bir aralığı üzerinde ilerlemelidir. Bu maddeyi biraz daha açmanın çok faydalı olacagını düşünüyorum. Aralıklarla yeni yeni ilgenen biri olarak foreach üzerinde ilerlemek ile aralık üzerinde ilerlemek arasındaki farkı anlamadım? Alıntı (Salih Dinçer): >Öyle ki bir elektronikçi olarak Zafer'i kıskandım şimdi! Çünkü benim yapmam gerekirdi...:) Salih aramızda ayrı gayrı yok, senden daha güzel örnekler bekliyoruz. empty() konusuna gelince aslında o empty() metodu halka açık kullanım için tasarlanmadı. O empty() metodu aralık olanağını gerçekleştirmek için kullanılan empty, popFront, front üçlemesinin bir parçası ve bu şekilde kullanım tehlikeli çünkü yıgını bitiriyor. Aslında şöyle bir bakıyorum da bu örnek bize erişim belirteçlerinin ne kadar değerli olduğunu bir kez daha gösteriyor. Erişim belirteçlerini kullanarak olası bir çok hatayı baştan önleyebilecegimiz gibi terside mümkün tabi. Ben yigin sınıfını başka bir module taşıyıp erişim belirtecini private olarak işaretledim. Bu erişimi kısıtladı ve dışarıdan kullanımı iptal etti ancak bu yapı aralık olanağınında erişimini engelledi. Buna nasıl çözüm bulabilirim? Alıntı: >Error: class yigin.Yigin!(string).Yigin member empty is not accessible Son olarak Kadir'e söylemiştim ama sanırım pek ilgisini çekmedi. Sözleşmeli programlamanın invariant() olanağını bu sınıfta gerçekleştirmeye çalıştım. Yalnız bunu yaparken şöyle bir olay ile karşılaştım. invariant() bloğunda kullandığım assert() ifadesinde aşağıdaki yazımı bir türlü çalıştıramadım. Alıntı: >assert(konum < yigin.length); Sonunda çözümü şu şekilde gerçekleştirdim. Ancak neden çalışmadığını anlayamadım. Siz ne dersiniz? Alıntı: >int yiginKapasitesi = yigin.length; Ayrıca Salih'in belirttigi "Yigin dolu" hatasını düzelttim. Salih'e teşekkürler.
-- |
July 05, 2012 Şablonlar ile yığın sınıfı | ||||
---|---|---|---|---|
| ||||
Posted in reply to Kadir Can | Alıntı (Kadir Can): >Ben onu tamamen unutmuşum.Artık telafi edecek bir kod yazmam gerekir. :) Sorun değil Kadir, ben eklemiş oldum. Telafisini bekliyoruz artık. ;) Küçük bir öneri belki Yıgın sınıfına Clear() isimli bir metot ekleyerek kullanıcı istediginde mevcut yıgını temizlemesini sağlayabiliriz. Alıntı (Kadir Can): >Push() işlevi hatalı gibi geldi.konum sürekli yigin.length'ten küçük olmalı, yoksa farklı bir şey mi var? Ben bir hata göremiyorum ama istersen birlikte tekrar bakalım;
Evet, konum degişkeni burada Yıgın sınıfının üye degişkeni ve görevi yıgın üzerinde bulunulan konumu göstermek. Yıgın yapısı için biz bir dizi kullandık, dizimiz sıfırdan başlıyor ve kullanıcının girdigi değer kadar bir büyüklüğe sahip. Örneğin kullanıcı on elemanlı bir yıgın oluşturmak isterse bizim yıgın dizimiz en fazla on elemanlı oluyor. Bu duruma göre konum degişkeni yıgın dizisi üzerindekl geçerli konumları göstermesi gerekiyorsa her zaman yigin dizisini boyutundan küçük olmak zorunda. -- |
July 05, 2012 Şablonlar ile yığın sınıfı | ||||
---|---|---|---|---|
| ||||
Posted in reply to zafer | Alıntı (zafer): >Salih aramızda ayrı gayrı yok, senden daha güzel örnekler bekliyoruz. empty() konusuna gelince aslında o empty() metodu halka açık kullanım için tasarlanmadı. O empty() metodu aralık olanağını gerçekleştirmek için kullanılan empty, popFront, front üçlemesinin bir parçası ve bu şekilde kullanım tehlikeli çünkü yıgını bitiriyor.
Alıntı (zafer): >Ben yigin sınıfını başka bir module taşıyıp erişim belirtecini private olarak işaretledim. Bu erişimi kısıtladı ve dışarıdan kullanımı iptal etti ancak bu yapı aralık olanağınında erişimini engelledi. Buna nasıl çözüm bulabilirim?
Herhalde benim DMD'de bir sorun var. Sizde de böyle bir sorun oluyor mu, yoksa ben bir şeylerimi karıştırdım? -- |
July 05, 2012 Şablonlar ile yığın sınıfı | ||||
---|---|---|---|---|
| ||||
Posted in reply to Salih Dinçer | Çok fazla kod ve yazı yazılmış okuyamadım :-) Alıntı: >Bu arada aklıma gelmişken, ben de private ile ilgili olarak çok ilginç bir sorun ile karşılaştım! Çünkü public gibi davranıyor. Bunu yukarıda denediğim örnekte de görebilirsiniz. Zafer'in kodunda ise Push'lardan sonra şu satırı eklemeniz yeterli: Bir yıl önce dmd'nin bilinen hatalarından biri idi. Şimdi ne oldu bilmiyorum ancak anlaşılan devam ediyor :-) -- |
July 05, 2012 Şablonlar ile yığın sınıfı | ||||
---|---|---|---|---|
| ||||
Posted in reply to zafer | Alıntı (zafer): >
|
July 05, 2012 Şablonlar ile yığın sınıfı | ||||
---|---|---|---|---|
| ||||
Posted in reply to zafer | Alıntı (zafer): >
public void Push(T)(T deger)
}
|
July 05, 2012 Şablonlar ile yığın sınıfı | ||||
---|---|---|---|---|
| ||||
Posted in reply to Kadir Can | Clear() işlevini ekledim; ama şu haliyle biraz masraflı.Aslında sanırım yaptığım olması gerekendi, yani yığını temizlediğimizde elemanların kaybolmaması, sadece kullanıcıyı gösterilmemesi gerekiyor.Bu konuda yorumlarınızı bekliyorum.
Yığın şablonunu int ile de çağırabilirdim ama deneme kodu olduğu için ne kadar fazla şey görsek o kadar iyidir diyorum. :) -- |
July 05, 2012 Şablonlar ile yığın sınıfı | ||||
---|---|---|---|---|
| ||||
Posted in reply to Salih Dinçer | @Salih; -- |
July 05, 2012 Şablonlar ile yığın sınıfı | ||||
---|---|---|---|---|
| ||||
Posted in reply to Kadir Can | Kadir, ben de yolda düşünüyorken aklıma koşut işlemler ve sürekli veri pompalanan bir bellek yapısı geldi. Yatmadan bir şeyler kodlayım dedim ve şu aşağıdaki program meydana geldi. Henüz buffer sürekli tazelenmiyor ve kilit işlemini bitirmedim. Ayrıca veriyi sondan değil girdiği sırayla (alıştığımız şekle göre ters) işliyor. İşlemler uzun sürsün diye de basitinden asalları sayan işlev koydum. Şimdi sıra kilitleme işleminde çünkü veri gelirken ve dizi kısalırken işler karışabilir, öyle değil mi?
-- |