Algoritmalar : Domino Oyunu Kurallarının Açıklaması

ÖNEMLİ : Teslime az bir süre kala bazı arkadaşlarımızın bu kuralların internet ortamında olduğundan habersiz olduklarını öğrendim.  Bu amaçla tekrar dağıtmadan önce mümkün yanlış yazılmış durumlar olup olmadığını öğrenmek için Algoritmalar dersi hocamız Prof. Dr. Vasif V. NABİYEV’e kuralları gözden geçirmesi için ricada bulundum ve tahmin ettiğim üzere birtakım eksiklikler çıktı ortaya. Aşağıdaki yazıda bu düzeltilmesi gerekli durumları düzelterek Kırmızı ve Kalın puntolarla belirttim. Bunun dışında yeni bir gelişme de teslim gününün 12 Mayıs olarak kesinleşmesiydi. İyi çalışmalar ..

Giriş : Klasik domino oyunu hakkında ön bilgi için şu bağlantıyı ziyaret ediniz. Bu bağlantıdaki makalede geçen kuralların bazıları ödevin içeriğinde yoktur. Verilen kurallar aşağıda sıralanmıştır.

Klasik Domino – Vikipedi : http://tr.wikipedia.org/wiki/Domino

Genel Tanıtım : Görsel olarak programlanacak bu oyunda iki oyuncu olacaktır. Bilgisayarla karşılıklı oynanacaktır. Ödevde esas olan Bilgisayar’ın en doğru hamlelerle oyunu sürdürmesi ve mümkün oluyorsa kazanmasıdır. Programın yapısı özetle şöyledir : Kullanıcıya açık olan 7 taş , ortaya atılan taşların dizildiği boş alan, puan göstergeleri ve taş yığını. Kullanıcıya açık olan 7 taş tıklanabilir özellikte olmalıdır. Oyun kuralları gereği ortaya atılabilecek taşların tıklanabilirliği aktif , ortaya atılamayacak taşların ise inaktif olması gerekmektedir. Geliştiriciye bağlı olarak taşlar tıklamayla veya sürüklemeyle uygun olan noktaya gidebilmelidir.

Oyuna Başlama :

  • Oyunun ilk başlama şartı 3-2 taşıdır. Bu taş kimdeyse o kişi oyuna başlar ve o taşı ortaya koyar.
  • Şayet bu taş oyunun başında kimsede yoksa çift taş kimdeyse o taşı atarak oyuna başlar.
  • Şayet iki tarafta da çift taş varsa bunların en küçüğü kimdeyse o başlar. [Çift Taş: 0,0  1,1  2,2 … 6,6]
  • Oyun başında kimsede 3-2 veya çift taş yoksa sırayla yığından taş çekilir ve çift taşı ilk elde eden oyuna başlar.
  • Oyunun herhangi bir aşamasında oyuncuların 7 taşından 5 tanesi çift ise oyun o an iptal olur ve biter.
  • Oyunun herhangi bir aşamasında oyuncuların 7 taşından a)5 tanesi çift ise b) 6 veya 7’si aynı sayılı ise (örneğin 1-0,1-1,1-2,1-4,1-5,1-6)  oyun o an iptal olur ve yeniden taş çekilir.

Puanlama Kuralları :

  • Oyun devam ederken ortadaki dizinin uç değerleri toplamı sürekli takip edilir. Çünkü bu uç değerler dikkatli oynanırsa kullanıcıya puan getirecektir.
  • Şu bağlantıdaki şekli inceleyin : http://www.ersinyildiz.com/evrak/ucDegerler.png Veya sayfanın sonuna bakın. Şekil-1
  • Şekilde gördüğünüz gibi, siz taşınızı atmadan önce ortadaki tablo bu şekildeyse , hangi taşa hangi puanı alacağınızı yazdık. Buradaki amaç ortadaki dizinin uç değerlerinin toplamının attığınız taş ile birlikte 5’in katı olmasıdır. Ortaya attılan taş ile beraber uç değerler toplamı 5’in katı etmiyorsa taşı atan puan alamaz.
  • Şu İfade hatalıdır. Doğru olanı hemen altında kırmızı yazılı olandır : Oyuncunun sırası geldiğinde , oyuncunun elindeki çiftler ortaya koyulabilecek durumda ise ve bu çiftlerin toplamı 5’in katları ise bu 4 çift de ortaya atılabilir. 4 Çift yoksa bu durum 2 Çift için de geçerlidir ama 3 Çift Ortaya atılamaz. Atılan iki çift taş ta karşılıklı olmalıdır. Şekli inceleyelim : http://www.ersinyildiz.com/evrak/cift.png – Şekil 2 (sayfa sonunda)
  • Oyuncunun sırası geldiğinde , oyuncunun elindeki çiftler ortaya koyulabilecek durumda ise ve bu çiftlerin toplamı 5′in katları ise bu 2,3 veya 4 çift de ortaya atılabilir. . Şekli inceleyelim : http://www.ersinyildiz.com/evrak/cift.png – Şekil 2 (sayfa sonunda)
  • Şu ifade hatalıdır. Doğru olan hemen altındaki kırmızıyla yazılmış olandır : Şekilde görülen uç değerlerdeki 4 çift taş elinizdeyse ve ortadaki dizi de çizildiği gibiyse 4 taşı birden atabilirsiniz.
  • Fakat 1,1 taşınız yok ise karşısındaki 3,3 taşını da atamazsınız. Ama 5,5 ve 6,6 varsa karşılıklı ortaya atılabilir. 5,5 yok ise karşısındaki 6,6’yı da atamazsınız.
  • Ortaya atılan Çift Taşlar, Dikey , diğer taşlar Yatay olarak dizilir. Eğer bir çift taşın iki yanına yataş taş gelmiş ise bu Çift taşa “Çekirdek Taş” denir ve oyun bu çekirdek taşın 4 yönüne doğru da uzayabilir. Oyunda sadece bir tane Çekirdek taş olur. Eğer oyun esnasında Çekirdek taş oluştuysa rengi değiştirilerek belli edilmelidir.
  • Şekilde görülen uç değerlerdeki 4 çift taş elinizdeyse ve ortadaki dizi de çizildiği gibiyse 4 taşı birden atabilirsiniz.Ortaya atılan Çift Taşlar, Dikey , diğer taşlar Yatay olarak dizilir.

Yazıya Yeni Eklenen Kurallar :

1 – Yığında tek bir taş kalana kadar bu yığından dominolar çekilebilmektedir.

2  – oyun, taraflardan birinin 365 puan toplamasıyla tamamlanmaktadır.

3 – yere atılan taşlardan sonra elde olan taşlar birbirine yazılım olarak yaklaştırılacaktır.

Oyun ne zaman biter ?

  • Oyuncunun birindeki taşlar bitene kadar.
  • Oyun kilitlenene kadar.

Oyunun Kilitlenmesi ne demektir ?

  • Bir oyuncunun elindeki taşlar ortaya atmaya uygun değilse ( uç değerlerdeki taşlar yoksa ) Yığından taş çekilir. Eğer yığın da biterse ve oyuncunun hala taşı yoksa oyuncu o eli pas geçer ve diğer oyuncu hamlesini yapar. Diğer oyuncunun da hamle yapamayacak duruma gelmesiyle oyun kilitlenir ve sonlanır. Oyun bu şekilde sonlanırsa Oyuncuların ellerinde kalan taşların rakamları toplamı hesaplanır ve Hangi oyuncunun taşlarının toplamı daha küçük ise o oyuncuya puan olarak eklenir. Bu puan 5’in katı değilse 5’in katlarına yuvarlanarak rakip oyuncunun puan hanesine eklenir. Örn: 21 ise 25 olarak.
  • Eğer oyuncu atacağı taşla oyunun kilitleneceğini biliyorsa bile o hamle oyuncuya puan getirecekse ( 5’in katı kuralından ) bu hamleyi yapabilir ve oyunu kilitleyebilir.

Ödevin Kuralları :

  1. Rasgele sayı üretecek fonksiyon hazır kullanılamaz.
  2. Kullanılan rasgele fonksiyonunun oluşturduğu değerler bir grafikle ekranda belli aralıklarla gösterilmelidir.
  3. Puanlama her 50 puanda bir graf oluşacak şekilde görsel olarak da gösterilmelidir. ( Şekil eklenecek )

Not : Bu proje 2010-2011 Bahar Dönemi Algoritmalar Dersi II. Arasınav projesi olup , KTÜ Bilgisayar Mühendisliği Bölüm Başkanı Prof. Dr. Vasif V. NABİYEV tarafından kuralları belirlenmiştir.

Bu makalede eksik noktaların olması muhtemeldir. Lütfen kendi notlarınızla karşılaştırınız ve eksik-yanlış gördüğüünüz noktaları etkinlik sayfasında yorum olarak belirtiniz.

Hazırlayanlar :

Ecem Somay

Ersin Yıldız

Etkinlik sayfası : http://www.facebook.com/event.php?eid=203863252959982&pending

Uç Değerler Toplamı

Academy Dersleri üzerine : Bir “Academy” Günlüğü

Bu güne kadar birinci sınıftaki arkadaşlara bazı konularda elimden geldiğince yardım etmeye çalıştım, bunların çoğunluğu Academy Dersi olarak görünse de bu dersler esnasında Bilgisayar Mühendisliği Öğrencisi Olma durumuyla ilgili de iki senelik de olsa  tecrübelerimi paylaştım. Fakat bunları hiç yazıya dökmediğimi farkettim , hem  bir öz değerlendirme olması hem de dökümanların size ulaşması açısından böyle bir yazı yazmayı uygun gördüm.

C Programlama derslerini benim vermemdeki amaç en iyi bilen olduğum için değil. Böyle bir iddaam da olmadı hiç bir zaman. Elektrik derslerinde bahsettiğim üzere Academy Dersleri tamamen bir gönüllük işidir ve bir çıkar amacı taşımaz. Üst sınıfların alt sınıflarla ilgilenmesi(sadece ders anlamında değil)  fikri ve uygulaması bizim birinci sınıf olduğumuz dönemde kulüp başkanımız da olan Abdullah Dağlı ‘nındır. O dönemde KTUBBT olarak C dersleri vermekteydi. Ben ve bir çok arkadaşım da beklenden fazla yararlandık bu derslerden. Benim dersi vermeye gönüllü olmamdaki temel neden de bize sağlanan bu imkandan bizden sonra gelenlerin de faydalanabilmesi ve bu işin böyle devam etmesiydi. Nitekim öyle olması için de çalışıyorum, çalışıyoruz. Tek beklentim bu dönem sıralarda oturan arkadaşlardan en az bir kişinin seneye perdenin önünde  “for döngüsü şurdan, ifler şurayaaaa!! ” nidalarıyla yırtınmasıdır :))

Tarihini anlattıkktan sonra.. Genel bir değerlendirmeyi bu yazıda yapmak yerine bu günü anlatmak isterim. C Programlama derslerine başlayalı 3 hafta oldu ve İstanbulda olmam sebebiyle bir haftalık boşluktan sonra bu gün ikinci dersimizi yaptık. Alıştığım üzere ilk dersteki kalabalık yoktu karşımda. Ama biraz erken de olduğunu düşünüyorum 10 kişi kalmak için 🙂 Neyse , samimi olacaksam da az kişi olması benim biraz da işime gelir açıkçası. Çünkü geçtiğimiz dönem ilk Elektrik dersindeki 60 kişi benim daha önce hiç bulunmadığım bir durumda bulunmamı sağlamıştı. Topluluk önündeki kişi olmak. Çok büyük sıkıntımdı ki bu dersler sayesinde biraz yenmeye çalıştım. Elektrik dersine C kadar hakim olmadığım için tecrübesizliğim ve heyecanım orda daha da ortaya çıkardı , şimdi çaktırmıyorum(!) 🙂

Bu gün diyordum yine dağıldı konu… Bu gün dediğim gibi az kişi vardı ve benim bu derslerde yeni uygulamayı düşündüğüm sistemi uyguladık. Konu anlatmak yerine bu güne kadar anlatılan C kavramlarını nerede nasıl kullanırız nasıl hinlikler yaparız onları göstermeye çalıştık. İlk olarak meşhur kara ekranımızda Windows’ta başta olmak üzere çoğu yerde gördüğümüz Yükleniyor animasyonu yaptık. Bu animasyona bir dosya kopyalarken vs. sıkça rastlarsınız. Ondan sonra ufak bir satır ekleyerek bu animasyonu Windows’un açılırken görüntülenen animasyonuna çevirdik , ondan sonra da Dizi kullanmadan, girilen 10 sayının en büyüğünü veren basit bir programın algortimasını ve akış diyagramını beraberce tasarlayıp koda döktük.

Benim görüşümce tam istediğim çalışma ortamı oluştu ve iyi bir birbuçuk saat geçirdik. Bana bile beklediğimden fazla katkısı oldu. Görülmemiş konular olduğu için bir problemin çözümünde o konuyu dışarıda bırakıp kısıtlandığınızda yeni çözümler düşünürsünüz ve bu sizi yaratıcılığa biraz daha yaklaştırır , bu gün de tam o oldu 🙂 Katılan arkadaşlara teşekkürler , 10 Mart günü aynı saatte görüşmek üzere , bu günün dosyaları hemen şurada , iyi çalışmalar 🙂

Bu arada, En büyük sayıyı çözen programa, en büyük sayıyı ve ondan sonraki en büyük ikinci sayıyı bulma özelliğini “Dizi Kullanmadan ve mümkünse akış diyagramını vererek çözene çok ufak bir hediyem olacak ” 🙂 , kolay gelsin.

Animasyon’u indirmek için tıklayın( Visual Studio 10 projesi )

En büyük sayıyı for ve if ile çözen programı indirmek için tıklayın.

iyi çalışmalar.

Ersin YILDIZ – 04.03.11

Mühendislik Matematiği 1. Ödev için kaynaklar

Algoritması üzerine hala çalıştığım ödev ile ilgili birkaç tane kaynak buldum. Daha doğrusu, kaynaklar ödevin konusuyla ilgili. Yani Gauss-Jordan Elimination. Kaynaklar tamamen Türkçe. Aşağıdaki bağlantılardan indirebilirsiniz.




Lineer Cebir Slayt Gösterisi – Lineer Cebir konusunun uzunca anlatıldığı slayt gösterisi. ( Ege Üniv. Prof. Dr Şaban EREN )

Doğrusal Cebir – Word Dosyası – Lineer Cebir ve satır işlemlerinin anlatıldığı word belgesi.

Gauss Jordan – Gauss Jordan yönteminin anlatıldığı PDF belgesi. İçinde örnekler ve sorular var.

Gauss Jordan 2 – Gauss – Gauss Jordan yöntemlerinin anlatıldığı PDF belgesi

İyi Çalışmalar 🙂

ERSİN YILDIZ

Programlamaya Giriş Dersi ( Genel Bilgiler )

Merhabalar , bu yazımda programlamayla yeni karşılaşan arkadaşların kafasındaki soru işaretlerini azaltmayı amaçlıyorum. Bu amaçla programlamaya hem bir Bilgisayar Mühendisliği dersi olarak , hem de mesleğin yazılım tarafına ilk adım olarak yaklaşacağım.

  • Programlama Nedir ?

Program bir bilgisayarın donanım birimlerine işlev kazandıran bir emir dizisidir dersemyanlış olmaz. Bu program yeri gelir 1 byte büyüklüğünde olur , yeri gelir 1 GigaByte büyüklüğünde olur. Basit bir benzetme yapacak olursak Donanım insan bedeni , Yazılım da bu bedendeki ruhtur.

Bir program farklı programlama dilleriyle geliştirilebilir.  Bu yazımda programlama dillerine girmeden ve çok derine inmeden temel bilgileri vermek istediğimden bu konuyu kısa geçiyorum. Bu yazımda programlama dillerinin Yüksek Seviyeli Dil ailesinden olan C programlama dilinden bahsediyorum.

  • KTÜ Bil. Müh. Dersi olarak “Programlama”

KTÜ Bilgisayar Mühendisliği birinci sınıf bahar yarıyılı derslerinden biri olan Programlamaya Giriş dersi , 2010-2011 dönemine kadar Prof. Dr. Rıfat YAZICI hocamız tarafından verilmiştir. Ben 2009-2010 döneminde bu dersi aldım ve Rıfat hocamdan bu dersi aldığım için kendimi hala şanslı nitelendiririm.  Bilindiği üzere Rıfat hocamız geçtiğimiz dönem emekli oldu. Programlamaya Giriş dersini bu dönem hangi hocamızın vereceği konusunda net bir bilgim yok. O yüzden bu konuyu kısa tutuyorum. Yazının devam eden kısmında Rıfat hocamızın ders notlarını indirebileceğiniz adresi bulabilirsiniz.

Bölümümüzde bu derste verilen Programlama Dili, şu ana kadar C Programlama Dili olmuştur. Yeni gelen hocamızın tercihini bilmememe rağmen değişeceğini de düşünmüyorum. Programlama öğrenmek için C Programlama dili biraz ağır olabilmektedir kimi zaman. Fakat bu derste amaç dili öğrenmekten ziyade Program ve Programlamanın genel yapısını öğrenmektir. Ama burada çok önemli olan nokta , Programlamaya  sadece  ” geçilmesi gereken bir ders” olarak yaklaşmamaktır. C’yi biraz üzerine giderek öğrenmemiz mümkün , bu bilgiyle dersi geçmemiz de mümkün ama Programlama Mantığı’nı alamadıktan sonra gelecek dönem derslerinde büyük sorunlar yaşamamız kaçınılmaz. Programlamayı ve C’yi iyi bilmek durumundayız. Bu nedenle buna bir dersten ziyade , mesleğimize önemli bir adım olarak bakmalıyız. Bunun yolu da birşeyler üretmeyi sevmekten geçiyor sanırım 🙂

Dersi alacak arkadaşlara tavsiyelerim bundan ibaret değil elbette. Öncelikle bir dönem boyunca Konsol Ekranında bir takım programlar geliştireceksiniz ve bu durum sizi bi aşamadan sonra karamsarlığa sürükleyebilir. Konsolda geliştirdiğiniz programlarla günlük hayattakileri sürekli ister istemez kıyaslayıp bazen boşa uğraştığınızı bile düşünebilirsiniz ( ki ben düşünmüştüm zaman zaman ). Fakat sizi bu durumdan kurtaracak olan şey yine sizin geliştirdiğiniz uygulamalar olacaktır. Birşeyi yapabilir olmaktan duyacağınız haz sizi bu konuya daha çok adapte olmanızı sağlayacaktır emin olun.  Yeri gelecek çok sıkılacağınız gereksiz bulacağınız uygulamalar yazacaksınız, derste yapılan örnekler size sıkıcı gelmeye başladığında kendiniz çözebileceğiniz problemler bulmayı deneyin. Bunlardan en ünlüsü girdiğiniz notlarınıza göre ortalama hesabı veren programdır mesela :)) Bu tarz ” çıktısı somut ” olan problemler bulmakta sıkıntı yaşarsanız bu konuda bana e-posta yoluyla vs. ulaşırsanız size yardımcı olabilirim.

Yazının teknik olmayan kısmı buraya kadardı , lafı da çok dağıttım zaten farkındayım 🙂 Yazmayı öğrenene kadar idare ediverin , Yazının teknik olan kısmında Rıfat hocamızın ders notlarını bulabilir , Ücretli ve Ücretsiz Derleyiciler hakkında bilgi edinebilir , kaynak kitap tavsiyeleri bulabilir ve başlangıç mahiyetinde birkaç kod bulabilirsiniz. Teknik yazıyı da gün içinde bitirip yayınlamaya çalışıyorum.  Yardımcı olmamı istediğiniz başka bir ders varsa yorumla belirtirseniz elimden geldiğince yazarım bi’şeyler. Selametle ..

Ersin YILDIZ

KTÜ Bilgisayar Mühendisliği 2. Sınıf ( 2010-2011)

Görüşlerinizi paylaşırsanız sevinirim 🙂