<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ahmet BÜTÜN &#187; Visual C#.NET</title>
	<atom:link href="http://blog.ahmetbutun.net/index.php/category/yazilim/visual-csharp/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.ahmetbutun.net</link>
	<description>Hep denedin, hep yenildin... olsun, yine dene, yine yenil, daha iyi yenil!</description>
	<lastBuildDate>Fri, 03 Sep 2010 20:03:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>C# ile MasterMind oyununu bilgisayara karşı oynamak!</title>
		<link>http://blog.ahmetbutun.net/index.php/2010/09/02/c-ile-mastermind-oyununu-bilgisayara-karsi-oynamak/</link>
		<comments>http://blog.ahmetbutun.net/index.php/2010/09/02/c-ile-mastermind-oyununu-bilgisayara-karsi-oynamak/#comments</comments>
		<pubDate>Wed, 01 Sep 2010 23:47:43 +0000</pubDate>
		<dc:creator>@bütün</dc:creator>
				<category><![CDATA[Projeler]]></category>
		<category><![CDATA[Visual C#.NET]]></category>
		<category><![CDATA[Yapay Zeka]]></category>
		<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[agains computer]]></category>
		<category><![CDATA[bilgisayara karşı]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[mastermind]]></category>

		<guid isPermaLink="false">http://blog.ahmetbutun.net/?p=1036</guid>
		<description><![CDATA[Title : Playing mastermind game against computer with C# MasterMind nedir? Nasıl oynanır? Grafik 1. MasterMind oyunu MasterMind iki kişiyle oynanan bir kod-kırma oyundur. Oyunculardan birisi kod-oluşturucu diğeri ise kod-kırıcıdır. Kod-oluşturucu 6 farklı renkteki mandalı kullanarak 4 adet seçer ve bir kod oluşturur (aynı renk birden fazla kullanılabilr). Kod-kırıcı ise kod-oluşturucunun verdiği ipuçlarını kullanarak bu [...]]]></description>
			<content:encoded><![CDATA[<p>Title : Playing mastermind game against computer with C#</p>
<p>MasterMind nedir? Nasıl oynanır?</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1042" title="Mastermind Board" src="http://blog.ahmetbutun.net/wp-content/uploads/2010/09/mastermind_board_blog.jpg" alt="" width="525" height="557" /><strong>Grafik 1. MasterMind oyunu</strong></p>
<p>MasterMind iki kişiyle oynanan bir kod-kırma oyundur. Oyunculardan birisi kod-oluşturucu diğeri ise kod-kırıcıdır. Kod-oluşturucu 6 farklı renkteki mandalı kullanarak 4 adet seçer ve bir kod oluşturur (aynı renk birden fazla kullanılabilr). Kod-kırıcı ise kod-oluşturucunun verdiği ipuçlarını kullanarak bu kodu bulmaya çalışır. Kod-oluşturucu kod-kırıcının doğru yerde ve doğru renkteki her tahmini için tahtada tahminin yapıldığı yerin sağına siyah bir mandal (yukarıdaki resimde turuncu), doğru renkte ancak farklı yerde yer alan her bir tahmin için ise beyaz bir mandal yerleştirir. Mesela, kod-oluşturucunun seçtiği renk kombinasyonu şöyle olsun,</p>
<p>Beyaz | Mavi | Sarı | Kırmızı</p>
<p>Kod-kırıcı ise şöyle bir tahminde bulunsun.</p>
<p>Beyaz | Kırmızı | Pembe | Yeşil</p>
<p>Bu durumda kod-oluşturucu, 1 siyah 1 beyaz mandal ile kod-kırıcıya, yapılan tahminde bir mandalın yerinin de renginin de doğru (Beyaz), bir mandalın ise renginin doğru ancak yerinin yanlış (Kırmızı) olduğu bilgisini verecektir.</p>
<p>MasterMind oyununda  farklı varyasyonlar kullanılabilir elbette. Mesela</p>
<p>-          Aynı renk birden fazla kullanılamaz (bütün mandallar farklı renkte)</p>
<p>-          Aynı renk en fazla iki defa kullanılabilir</p>
<p>-          Aynı renk en fazla 3 defa kullanılabilir</p>
<p>gibi…Bizim burada ele alacağımız MasterMind oyunu sayıların temel alındığı (aynı zamanda, temelde sayılar kullanılarak farklı nesnelerin de yer alabileceği) bir oyun olacak. Ve bütün kod oluşturmak için kullanılan rakamlar en fazla bir defa kullanılabilecektir (sayıların rakamları birbirlerinden farklı).</p>
<p><span id="more-1036"></span></p>
<p>Kısaca MasterMind oyunu hakkında bilgi verdikten sonra asıl konumuza gelebiliriz.</p>
<p>Biliyorsunuz arkadaşlar bir süredir C# ile kombinasyon, permütasyon hesapları yapmakla meşguldüm. Nedeni ise MasterMind oyununu klasik biçiminden (bilgisayar sayı üretir kullanıcı tahmin etmeye çalışır) daha farklı bir şekilde C# ile yeniden yazmaktı. Farklı olmasını planladığım kısmı, kullanıcıların da bilgisayara karşı bu oyunu oynayabilmelerini sağlamaktı. Yani kullanıcı kafasından bir sayı seçecekti ve bilgisayar da kullanıcının verdiği bilgiler doğrultusunda bu sayıyı bulmaya çalışacaktı. Seneler önce üniversitede iken Pascal programlama dili ile başarmıştım bunu. Çok aradım ama bulamadım yıllar evvel yazdığım bu programcığı, sizinle paylaşmayı çok isterdim.</p>
<p>Pascal ile yazdığım programcık yalnızca 4 basamaklı sayılar için çalışıyordu yani 5, 6, 7 ve daha fazla sayıda basamağı olan sayılar için geçerli değildi. Ve aynı zamanda seçilen sayılar, 0-9 arasındaki rakamlardan oluşuyordu yani sayıların oluşturulduğu rakam havuzu her zaman sabitti. Yazılım dünyasında sabit olan şeyleri pek sevmiyorum, dinamik yapılardan daha fazla keyif alıyorum. Bu nedenle de C# ile yazmayı planladığım MasterMind oyununu da dinamik yapılar üzerine inşa etmeyi planladım hep. Yani sayıların oluşturulacağı rakam havuzu sabit olmayacaktı ve aynı zamanda sayıların basamak sayısı da dinamik olacaktı. Yani isterseniz şöyle diyebilecektiniz, ben 5 basamaklı ve aynı zamanda 0, 7 ve 6 rakamlarının olmadığı sayılarla bu oyunu oynamak istiyorum.  Bu aynı zamanda bana şu esnekliği de sağlıyor olacaktı: oyunu yalnızca sayılarla oynamak zorunda olmayacaktım, istersem rakamları başka nesnelerle ilişkilendirebilir (renk, şekil vs.) böylece oyuna oynanabilirlik adına esneklik kazandırabilecektim. Emin olun bunu başarmak biraz zor! Bu nedenle de yukarıda bahsettiğim gibi son zamanlarda olasılık, permütasyon ve kombinasyon  hesapları ile dolu kafam. Ama sonunda bitirdim…İşte sonuç,</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1041" title="Mastermind" src="http://blog.ahmetbutun.net/wp-content/uploads/2010/09/mastermind_blog.jpg" alt="" width="525" height="380" /><strong>Grafik 2. MasterMind oyunu uygulama ara yüzü</strong></p>
<p>Uygulama İngilizce, uzun süredir bütün uygulamalarımı İngilizce olarak yazdığım için -kodlar dahil-  böyle bir alışkanlık oluştu bende. Türkçe olsa belki benim için bile daha anlaşılır olacak ancak İngilizce yazmaya alışmışım ve sanırım işin doğasının da bu olması gerektiğini düşünüyorum. Ama Türkçe versiyonunun olmasını isterseniz &#8211; yorumlarınızda bu konuyu bildirmeniz yeterli- onu da hemen hazırlar paylaşırım.</p>
<p>Sol üstte yer alan “<strong>Game Properties &#8211; Oyun Özellikleri</strong>” bölümü, oyunun temel özelliklerini belirleyebileceğiniz bölümü. En üstte yer alan rakamlar, sayıların oluşturulmasını istediğiniz rakamları gösteriyor. Bu örnekte 0-9 arasındaki bütün rakamlar kullanılabilir durumda gösterilmiş. Kullanılmasını istemediğiniz rakamların işaretlerini kaldırmanız yeterli olacaktır. Aynı şekilde kullanılmasını istediğiniz rakamları da işaretlemeniz gerekecektir. Burada dikkat edilmesi gereken nokta, en az seçilen sayı basamağı kadar rakamın seçilmiş olması. Demek istediğim 4 basamaklı ve rakamları birbirlerinden farklı bir sayıyı 3 adet rakamı kullanarak oluşturamazsınız, bu durumda en az 4 adet rakama ihtiyacınız olacaktır. Merak etmeyin böyle bir ihtimal olduğunda program sizi uyaracaktır.</p>
<p>Yine “<strong>Game Properties &#8211; Oyun Özellikleri</strong>” bölümde yer alan “<strong>Length &#8211; Uzunluk</strong>” seçeneği ile oyunda kullanılacak sayının kaç basamaklı olduğunu belirleyebilirsiniz. “<strong>Number &#8211; Sayı</strong>” bölümü ise, eğer bilgisayar kod-üretici rolünde ise, bilgisayarın ürettiği sayıyı gösteriyor (şifreli şekilde, her bir basamağı * işaretli). Yine bu bölümde yer alan “<strong>Com vs Human</strong>” seçeneği, kullanıcının kod-oluşturucu, bilgisayarın kod-kırıcı olduğu oyun şeklini (siz kafanızda bir sayı tutarsınız ve bilgisayar sayıyı bulmaya çalışır), “<strong>Human vs Com</strong>” seçeneği ise bilgisayarın kod-oluşturucu, kullanıcının ise kod-kırıcı olduğu oyun şeklini (bilgisayar bir sayı üretir siz sayıyı tahmin etmeye çalışırsınız) seçmenizi sağlar. Yani oyun tipleri arasında geçiş yapmanıza olanak verir.</p>
<p>Sol altta yer alan “<strong>Game Activity- Oyun Faaliyeti</strong>” bölümü, oyunun gidişatını gösterir. Oyunun tipi ne olursa olsun bütün tahminler ve yapılan tahminler üzerindeki ip uçlarının tamamı burada kullanıcıya gösterilir. Sol kutucuk tahmin edilen sayıları gösterir. Kod-kırıcının bilgisayar olduğu oyun tipinde bilgisayar her yeni tahmin yaptığında, yeni tahmin otomatik olarak burada yer alacaktır. Kod-kırıcının kullanıcı olduğu oyun tipinde ise, yeni bir tahminde bulunmak için bu kutucuğun üzerinde sağ tıklamanız ve açılan menüden “<strong>New Guess</strong>” seçeneğini seçerek (ya da basitçe bu kutucuk üzerinde çift tıklayarak) tahmininizi açılan kutuya yazmanız gerekecektir. Sağ taraftaki diğerine göre daha küçük olan kutucuk ise yapılan tahminler ile ilgili doğru ve yanlış bilgilerini verir. Bu bilgiler ışığında da yeni sayı tahminleri yapılır. Oyunda kullanıcının kod-kırıcı olduğu durumlarda (bilgisayara karşı oynanırken), yine bu kısımda (“<strong>Game Activity- Oyun Faaliyeti</strong>”) yer alan “<strong>True &#8211; Doğru</strong>” ve “<strong>False &#8211; Yanlış</strong>” kutucukları ile bilgisayarın ürettiği tahminlerde yer alan doğru ve yanlış sayılarını bilgisayara bildirmenizi sağlar.</p>
<p>Uygulamada sağ tarafta yer alan 3 kutucuk ise verilen bilgiler doğrultusunda bilgisayar tarafından hesaplanan ihtimaller doğrultusunda üretilen (dolayısıyla bilgisayara karşı oynan oyunlarda) sayıları göstermektedir. En soldaki kutucuk olası sayıları göstermektedir, yani kullanıcı tarafından tutulan sayı mutlaka bu ihtimaller içerisinde yer almaktadır. Ortada yer alan kutucuk, bir önceki tahminde yer alan olası sayıları, en sağdaki kutucuk ise en son verilen bilgiler doğrultusunda üretilen olası sayıları göstermektedir. Basitçe, soldaki kutucuk, sağda yer alan iki kutucuğun kesişimidir aslında -ki bu yöntem bilgisayar tarafından sayının bulunması için kullanılan çok akıllıca bir yapay zeka yöntemidir- böylece bilgisayar verilen bilgileri birbirleri ile ilişkilendirir. Daha açık bir ifade ile, bilgisayar yeni bir tahminde bulunurken yalnızca son tahminde kendisine verilen ip uçlarını değil, o ana kadar verilen bütün ip uçlarını değerlendirir. Üretilen sayıları bir öncekilerle kesiştirmek bunu yapmanın en iyi yoludur.</p>
<p>Gel gelelim MasterMind oyununu bilgisayar karşı oynayabilmenin, daha doğrusu bilgisayarın düşünmesini sağlamanın zorluğuna…İşin zorluğu ihtimalleri hesaplayabilmekte…Matematiksel olarak hesaplamak çok kolay ancak bunu bilgisayara da yaptırabilmek zorlu bir iş. Bu uygulama ile ben bu işi yapabildiğimi düşünüyorum ve bunu da sizinle paylaşmak istedim.</p>
<p>O halde biraz kombinasyon, permütasyon ve olasılık çalışalım…</p>
<p>4 basamaklı bir sayı için, rakamları birbirinden farklı sayılar :</p>
<h2>9 * 9 * 8 * 7 = 4.536 adet</h2>
<p>ihtimalin olduğunu görürüz. Basamak sayısı arttıkça ihtimaller de artıyor elbette,</p>
<h2>5 basamaklı sayılar = 9 * 9 * 8 * 7 * 6 = 27.216 adet</h2>
<h2>6 basamaklı sayılar = 9 * 9 * 8 * 7 * 6 * 5 = 136.080 adet</h2>
<h2>7 basamaklı sayılar = 9 * 9 * 8 * 7 * 6 * 5 = 544.320 adet</h2>
<p>İhtimalin söz konusu. Bu ihtimaller permütasyon ile basitçe hesaplanabiliyor ancak bizim buradaki durumumuz biraz farklı. Burada doğru ve yanlış bilgilerini de hesaba katmamız gerekiyor. Yani bilgisayar bir sayı tahmin ederken, kullanıcının ona verdiği “tahmin ettiğin sayı içerisinde 2 doğru 1 adet yanlış var” bilgisini de göz önünde bulundurması lazım. Peki bunu nasıl yaptıracağız bilgisayara? Konuyu anlayabilmek için detaylarına inmemiz lazım, inceleyelim….</p>
<p>Örneğin bilgisayarın tahmini</p>
<h2><strong>1234</strong></h2>
<p>olsun. Kullanıcı da tahminde 2 doğru 1 yanlış olduğunu belirtmiş olsun. İhtimalleri hesaplayalım :</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1044" title="Options" src="http://blog.ahmetbutun.net/wp-content/uploads/2010/09/options_blog.jpg" alt="" width="525" height="209" /><strong>Grafik 3. Seçim ihtimalleri ve olası sayılar</strong></p>
<p>Görüldüğü üzere toplam 12 adet seçim ihtimali var, yani şu rakam doğru yerde-şu rakam yanlış yerde  olursa deme ihtimalimiz 12. Her bir seçim ihtimali sonucunda oluşturulabilecek sayılar da seçimlerin karşısında yer alıyor. Bu sayılar elbette yapılan seçimin sonucunda oluşturuluyorlar. Gelelim bu sonuçların matematiksel ifadesine…</p>
<p>Yapılan tahminde 2 adet doğru rakamımız varsa eğer, bu rakamların ihtimallerini bulmak için kombinasyon almamız yeterli olacaktır. Yani 4’ün (sayımız 4 basamaklı) 2’li kombinasyonu,</p>
<h2>4! / (4-2)! * 2! = 6</h2>
<p>Yani şu rakam ve şu rakam doğru yerde olsa diyebileceğimiz toplam 6 adet ihtimal var. Buraya kadar sorun yok. Şimdi yanlış yerde olan rakam ihtimalini de hesaba katmamız lazım.</p>
<p>4 basamaklı sayımızda iki rakamı çıkartırsak -çünkü bu iki rakamı doğru olarak işaretledik yukarıda- geriye 2 basamak kalıyor. 2 basamak içerisinden de 1 rakamımız doğru ancak yanlış yerde, bu durumdaki ihtimalleri de bulabilmek için 2’nin 1’li kombinasyonunu hesaplamamız yeterli.</p>
<h2>2! / (2-1)! * 1! = 2</h2>
<p>Yani yukarıdaki 2 basamağın doğru olması durumunda ortaya çıkan her bir 6 ihtimal için, 2 adet de 1 rakamın yanlış yerde olma ihtimali söz konusu. Dolayısıyla toplam seçim ihtimalimiz,</p>
<h2>6 * 2 = 12</h2>
<p>adet ihtimalimiz söz konusu. Bu seçim ihtimallerini de zaten yukarıda görüyorsunuz. Aynı sonuca tersten de ulaşmamız mümkün. Yani önce yanlış olan ihtimalleri sonra da doru olabilecek ihtimalleri hesaplayarak (yukarıdaki resimde olduğu gibi). Görelim :</p>
<p>4 basamaklı bir sayıda 1 basamağın yanlış olması durumunda oluşabilecek ihtimaller :</p>
<h2>4! / (4-1)! * 1! = 4</h2>
<p>4 basamaklı bir sayıdan yanlış olabileceğini düşündüğümüz 1 rakamı çıkardığımızda geriye 3 basamak kalıyor. 3 basamak içerisinden de doğru olabileceğini düşündüğümüz 2 adet rakamı seçmeliyiz. Seçelim :</p>
<h2>3! / (3-2)! * 2! = 3</h2>
<p>ve toplam seçim ihtimali yine aynı :</p>
<h2>4 * 3 = 12</h2>
<p>Peki seçim ihtimallerini bulduk. Ve biliyoruz ki bu ihtimallere uyan sayılardan birisi kullanıcının sayısı. Peki ama bu seçim ihtimallerine uyan sayıları nasıl bulacağız? Bunun için bize verilen bilgiler doğrultusunda sayı üreten bir yapı lazım. Büyük resmi yavaş yavaş görmeye başladık, yani uygulamamız şu yapıya uygun bir şekilde çalışmalı –ki emin olun bu şekilde çalışıyor-.</p>
<p style="text-align: center;"><strong><img class="aligncenter size-full wp-image-1037" title="How it works?" src="http://blog.ahmetbutun.net/wp-content/uploads/2010/09/howitworks.jpg" alt="" width="524" height="447" />Grafik 4. Uygulamanın çalışma prensibi (sayı : 1234; 2 Doğru, 1 Yanlış)</strong></p>
<p>Sayı üreticisine geçmeden önce şu konu üzerinde durmamız lazım. Yerleri doğru olan rakamlarla ilgili çok sıkıntımız yok, ufak bir kombinasyon hesabı ile işimizi hallettik. Ancak yerleri yanlış olan rakamlar için basit bir kombinasyon almak yetmiyor. Neden? Çünkü kombinasyon ile bu rakam ya da rakamların bulunabileceği yerleri buluyoruz kombinasyonla ancak bize bu rakamların bulunabilecekleri yerler değil, <strong>BULUNAMAYACAKLARI</strong> yerler gerekli. Çünkü bu rakamların yerleri bize yanlış olarak bildirilmiş zaten yani kombinasyon ile bulduğumuz yerlerde bulunamazlar! Yani bilgisayarın kendisine yanlış olarak bildirilen rakamların olası yanlış yerlerini hesaplayabiliyor olması lazım. Bunun için bulduğum yöntem şöyle, öncelikle rakamların bulunabilecekleri tüm yerleri hesaplıyorum, daha sonra da bu kümeden, rakamların bulunamayacakları ihtimalleri çıkartıyorum. Matematiksel olarak ifade edelim.</p>
<p>Yukarıda Excel tablosunda (Grafik 3) belirtilen ilk seçimi ele alalım, yani 1 rakamı yanlış yerde, 3 ve 4 rakamları doğru yerde olursa,</p>
<p>Öncelikle doğru olan rakamları hesaba katmamız gerekli!  İki rakam (3 ve 4) doğru yerde ise, geriye 2 basamak kalıyor.  Yanlış olan basamağın hangisi (ya da hangileri) olduğu ihtimalleri, 2’nin 1’li kombinasyonudur, yani :</p>
<h2><strong>2! / (2-1)! * 1! = 2</strong></h2>
<p>Yani yanlış olarak kabul edeceğimiz sayımız ya ilk basamakta ya da ikinci basamakta (3. ve 4. basamaktaki rakamları doğru yerde olarak işaretlemiştik) yer alabilir. Yani ya 1 rakamı yanlış yerdedir, ya da 2 rakamı. 1 rakamının yanlış olması durumunda oluşturulabileceğimiz sayıları,</p>
<h2>X134</h2>
<p>şeklinde ifade edebiliriz. Burada X olarak işaretlediğimiz basamağa ise 5,6,7,8,9 rakamları gelebilir Sayının basamakları birbirlerinden farklı olmak zorunda olduğu için X basamağına 1,2 ve 3 rakamlarını yerleştiremeyiz ve aynı zamanda bu basamak ilk basamak olduğu için buraya 0 rakamını da yerleştiremeyiz. Sonuçta elde edilen rakamlar,</p>
<h2>5134, 6134, 7134, 8134, 9134</h2>
<p>olacaktır. Benzer şekilde yanlış rakamın 2 olması durumunda da oluşturabileceğimiz rakamlar,</p>
<h2>2X34 = 2034, 2534, 2634, 2734, 2834, 2934</h2>
<p>sayıları olacaktır. Burada yukarıdakinden farklı olarak X basamağı ilk basamak olmadığı için buraya 0 rakamını da yerleştirebiliriz. Dolayısıyla üretilebilen sayılar bir öncekinden bir adet fazla yani 6 adettir.</p>
<p>Sonuç olarak bilgisayara doğru olarak bildirilen her bir rakam bir kombinasyon işlemi, yanlış olarak bildirilen her bir rakam ise bir kombinasyon ve her bir kombinasyon için bir permütasyon işlemi gerektirecektir. Bu bilgiler doğrultusunda uygulamamız, 4 basamaklı bir sayı için, 2 doğru ve 1 yanlışın olduğu tüm sayılar,</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1038" title="Mastermind1" src="http://blog.ahmetbutun.net/wp-content/uploads/2010/09/mastermind1_blog.jpg" alt="" width="525" height="379" /><strong>Grafik 5. Üretilen olası sayılar (Sayı : 9264; 2 doğru, 1 yanlış)</strong></p>
<p>Üretilen sayıların adedini veren bir formül olduğunu düşünmüyorum çünkü üretilen sayılar yapılan seçime göre değişiyorlar ayrıca ilk basmakta 0 rakamının bulunmaması gibi ayrı bir detay da söz konusu. Bunun bir formülü varsa da ben bulamadım henüz. Bu noktada sizin de paylaşımlarınız olursa bana bildirirseniz çok sevinirim gerçekten.</p>
<p>Şimdi de uygulamayı test edelim. Önce 4 basamaklı bir sayı tutalım ve bilgisayar sayımızı bulmaya çalışsın. Sayımız 3589 olsun.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1039" title="Mastermind2" src="http://blog.ahmetbutun.net/wp-content/uploads/2010/09/mastermind2_blog.jpg" alt="" width="525" height="380" /><strong> Grafik 6. 3589 sayısı için bilgisayarın tahminleri ve sonucu</strong></p>
<p>Toplam 4 tahminde sayımızı buldu. Ve dikkat ederseniz son verilen bilgi doğrultusunda bilgisayar ihtimaller arasında verilen bilgilere uyan yalnızca bir sayı olması gerektiğine karar vermiş. Ve doğru da vermiş kararını <img src='http://blog.ahmetbutun.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Son olarak 5 basamaklı bir sayı deneyelim. Sayımız 48207 olsun.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1040" title="Mastermind3" src="http://blog.ahmetbutun.net/wp-content/uploads/2010/09/mastermind3_blog.jpg" alt="" width="525" height="380" /><strong>Grafik 6. 48207 sayısı için bilgisayarın tahminleri ve sonucu</strong></p>
<p>Toplam 5 tahmin sonucunda sonuca ulaştı bilgisayar. Gördüğünüz üzere gayet akıllı bilgisayarımız J Ancak şunu da söylemem lazım basamak sayısı arttıkça ve rakamların tümü (0-9 arasında) kullanıldığında yavaş çalışmaya başlıyor. En azından ilk ihtimalleri hesaplarken çünkü çok fazla ihtimal var. 7 basamaklı bir sayı için 2 milyonun üzerinde rakamları birbirinden farklı sayımız söz konusu ve her bir permütasyon ve kombinasyon işleminde bu kadar fazla sayıda ihtimali göz önünde bulundurmak biraz zaman alıyor. Şu an için zaten 7, 8 ve 9 basamaklı sayıları kullanıma kapattım. Hızlı bir yöntem bulursam bu basamakları da kullanıma açacağım.</p>
<p>Bu yazımı da burada noktalamak istiyorum izninizle, saat 02:00’ye yaklaşıyor ve uykum geldi, yazmaktan yoruldum <img src='http://blog.ahmetbutun.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Buraya kadar eminim merak ettiğiniz bir nokta vardır uygulama ile ilgili! O da ihtimallere uyan sayıları nasıl ürettiğim? Bu da başka bir yazımın konusu olsun. Ama bir ipucu vereyim, sayaçlar…</p>
<p>“MasterMind with C#”</p>
<p>DOWNLOAD (üyelik gerektiriyor, forumuma üye olun lütfen)<br />
<a href="http://u2m.me/hh" target="_blank">http://u2m.me/hh</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ahmetbutun.net/index.php/2010/09/02/c-ile-mastermind-oyununu-bilgisayara-karsi-oynamak/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C# ile permütasyon hesaplama</title>
		<link>http://blog.ahmetbutun.net/index.php/2010/08/28/c-ile-permutasyon-hesaplama/</link>
		<comments>http://blog.ahmetbutun.net/index.php/2010/08/28/c-ile-permutasyon-hesaplama/#comments</comments>
		<pubDate>Sat, 28 Aug 2010 21:55:05 +0000</pubDate>
		<dc:creator>@bütün</dc:creator>
				<category><![CDATA[Visual C#.NET]]></category>
		<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[permütasyon]]></category>
		<category><![CDATA[permutation]]></category>

		<guid isPermaLink="false">http://blog.ahmetbutun.net/?p=1022</guid>
		<description><![CDATA[Title : Calculation permutation with C#&#8230; Bu yazımda C# ile nasıl kombinasyon hesabı yapılabileceğinden bahsetmiştim. C# ile permütasyon hesabı yapan benzer bir sınıfı da oluşturup sizinle paylaşmak istedim. Biliyorsunuz şu aralar C# ile MasterMinde oyunu üzerinde çalışıyorum. Klasik oyundan farklı olarak bilgisayara karşı da oynanabilecek bir versiyon üzerinde çalışıyorum ve hem kombinasyon hem de permütasyon [...]]]></description>
			<content:encoded><![CDATA[<p>Title : Calculation permutation with C#&#8230;</p>
<p><a href="http://u2m.me/gX">Bu yazımda</a> C# ile nasıl kombinasyon hesabı yapılabileceğinden bahsetmiştim. C# ile permütasyon hesabı yapan benzer bir sınıfı da oluşturup sizinle paylaşmak istedim. Biliyorsunuz şu aralar C# ile MasterMinde oyunu üzerinde çalışıyorum. Klasik oyundan farklı olarak bilgisayara karşı da oynanabilecek bir versiyon üzerinde çalışıyorum ve hem kombinasyon hem de permütasyon hesaplarına şiddetle ihtiyaç duyuyorum. Bütün bu yazılar da bu ihtiyacın bir sonucu olarak ortaya çıktı zaten. Yakında  uygulamayı da buradan paylaşacağım sizinle&#8230;</p>
<p>C# ile permütasyon hesabı yapabileceğiniz sınıfımız da aşağıda.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">    <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> Permutation
    <span style="color: #000000;">&#123;</span>
        List<span style="color: #008000;">&lt;</span><span style="color: #FF0000;">string</span><span style="color: #008000;">&gt;</span> innerArray_ <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> List<span style="color: #008000;">&lt;</span><span style="color: #FF0000;">string</span><span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> Permutation<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">DigitCount</span> <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Permutations</span> <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">UseRepeatation</span> <span style="color: #008000;">=</span> false<span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">bool</span> UseRepeatation <span style="color: #000000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">int</span> DigitCount <span style="color: #000000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">int</span> Permutations <span style="color: #000000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> List<span style="color: #008000;">&lt;</span><span style="color: #FF0000;">string</span><span style="color: #008000;">&gt;</span> GetPermutations<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">DigitCount</span> <span style="color: #008000;">&gt;</span> <span style="color: #FF0000;">0</span> <span style="color: #008000;">&amp;&amp;</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Permutations</span> <span style="color: #008000;">&gt;</span> <span style="color: #FF0000;">0</span><span style="color: #000000;">&#41;</span>
                GetPermutations<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF;">return</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">innerArray_</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> List<span style="color: #008000;">&lt;</span><span style="color: #FF0000;">string</span><span style="color: #008000;">&gt;</span> GetPermutations<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> digitcount, <span style="color: #FF0000;">int</span> permutations<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">DigitCount</span> <span style="color: #008000;">=</span> digitcount<span style="color: #008000;">;</span>
            <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Permutations</span> <span style="color: #008000;">=</span> permutations<span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF;">return</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">GetPermutations</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">private</span> <span style="color: #0600FF;">void</span> GetPermutations<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span> current<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>current.<span style="color: #0000FF;">Length</span> <span style="color: #008000;">&lt;</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Permutations</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> i <span style="color: #008000;">&lt;</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">DigitCount</span><span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
                <span style="color: #000000;">&#123;</span>
                    <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>current.<span style="color: #0000FF;">IndexOf</span><span style="color: #000000;">&#40;</span>i.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">&lt;</span> <span style="color: #FF0000;">0</span> <span style="color: #008000;">||</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">UseRepeatation</span><span style="color: #000000;">&#41;</span>
                        GetPermutations<span style="color: #000000;">&#40;</span>current <span style="color: #008000;">+</span> i.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #000000;">&#125;</span>
            <span style="color: #000000;">&#125;</span>
            <span style="color: #0600FF;">else</span> <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>current.<span style="color: #0000FF;">Length</span> <span style="color: #008000;">==</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Permutations</span><span style="color: #000000;">&#41;</span>
                <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">innerArray_</span>.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span>current<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
    <span style="color: #000000;">&#125;</span></pre></div></div>

<p>4 basamaklı bir sayının 2&#8242;li kombinasyonlarını (sayı tekrarı olmadan) bulmak için,</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">Permutation per <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Permutation<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
List<span style="color: #008000;">&lt;</span><span style="color: #FF0000;">string</span><span style="color: #008000;">&gt;</span> result <span style="color: #008000;">=</span> per.<span style="color: #0000FF;">GetPermutations</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">4</span>, <span style="color: #FF0000;">2</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

<p>4 basamaklı bir sayının 2&#8242;li kombinasyonlarını (sayı tekrarı ile) bulmak için,</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">Permutation per <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Permutation<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
per.<span style="color: #0000FF;">UseRepeatation</span> <span style="color: #008000;">=</span> true<span style="color: #008000;">;</span>
&nbsp;
List<span style="color: #008000;">&lt;</span><span style="color: #FF0000;">string</span><span style="color: #008000;">&gt;</span> result <span style="color: #008000;">=</span> per.<span style="color: #0000FF;">GetPermutations</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">4</span>, <span style="color: #FF0000;">2</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

<p>Burada da aynen kombinasyon da olduğu gibi dikkat etmeniz gereken nokta, List olarak geri dönen değerler kombinasyonların index değerleri (sayının index değerleri demek daha doğru olur).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ahmetbutun.net/index.php/2010/08/28/c-ile-permutasyon-hesaplama/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C# ile kombinasyon hesaplama &#8211; 1</title>
		<link>http://blog.ahmetbutun.net/index.php/2010/08/26/c-ile-kombinasyon-hesaplama-1/</link>
		<comments>http://blog.ahmetbutun.net/index.php/2010/08/26/c-ile-kombinasyon-hesaplama-1/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 17:17:09 +0000</pubDate>
		<dc:creator>@bütün</dc:creator>
				<category><![CDATA[Visual C#.NET]]></category>
		<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[combination]]></category>
		<category><![CDATA[kombinasyon]]></category>

		<guid isPermaLink="false">http://blog.ahmetbutun.net/?p=1017</guid>
		<description><![CDATA[Bu yazımda C# ile kombinasyon hesaplamak için küçük bir kod parçası paylaşmıştım ve bu metodun bir sınıf içerisinde gerçekleştirilebileceğini söylemiştim. Bu metodu bir sınıf içerisinde kullandım ve sizinle paylaşmak istedim, çok fazla bekleyemedim İşte C# ile kombinasyon hasabı yapabileceğimiz sınıfımız. public class Combination &#123; List&#60;string&#62; innerArray_ = new List&#60;string&#62;&#40;&#41;; &#160; public Combination&#40;&#41; &#123; this.DigitCount = [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://u2m.me/gW" target="_blank">Bu yazımda</a> C# ile kombinasyon hesaplamak için küçük bir kod parçası paylaşmıştım ve bu metodun bir sınıf içerisinde gerçekleştirilebileceğini söylemiştim. Bu metodu bir sınıf içerisinde kullandım ve sizinle paylaşmak istedim, çok fazla bekleyemedim <img src='http://blog.ahmetbutun.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>İşte C# ile kombinasyon hasabı yapabileceğimiz sınıfımız.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> Combination
<span style="color: #000000;">&#123;</span>
    List<span style="color: #008000;">&lt;</span><span style="color: #FF0000;">string</span><span style="color: #008000;">&gt;</span> innerArray_ <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> List<span style="color: #008000;">&lt;</span><span style="color: #FF0000;">string</span><span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #0600FF;">public</span> Combination<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">DigitCount</span> <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
        <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Combinations</span> <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
    <span style="color: #000000;">&#125;</span>
&nbsp;
    <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">int</span> DigitCount <span style="color: #000000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span>
&nbsp;
    <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">int</span> Combinations <span style="color: #000000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span>
&nbsp;
    <span style="color: #0600FF;">public</span> List<span style="color: #008000;">&lt;</span><span style="color: #FF0000;">string</span><span style="color: #008000;">&gt;</span> GetCombinations<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>DigitCount <span style="color: #008000;">&gt;</span> <span style="color: #FF0000;">0</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #008080; font-style: italic;">//for (int i = 0; i &lt; this.DigitCount; i++)</span>
            <span style="color: #008080; font-style: italic;">//    GetCombinations(i.ToString(), i);</span>
&nbsp;
            GetCombinations<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;&quot;</span>, <span style="color: #008000;">-</span><span style="color: #FF0000;">1</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">return</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">innerArray_</span><span style="color: #008000;">;</span>
    <span style="color: #000000;">&#125;</span>
&nbsp;
    <span style="color: #0600FF;">public</span> List<span style="color: #008000;">&lt;</span><span style="color: #FF0000;">string</span><span style="color: #008000;">&gt;</span> GetCombinations<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> digitcount, <span style="color: #FF0000;">int</span> combinations<span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">DigitCount</span> <span style="color: #008000;">=</span> digitcount<span style="color: #008000;">;</span>
        <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Combinations</span> <span style="color: #008000;">=</span> combinations<span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #0600FF;">return</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">GetCombinations</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #000000;">&#125;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">/// &lt;summary&gt;</span>
    <span style="color: #008080; font-style: italic;">/// Kombinasyon hesaplamasını yapar</span>
    <span style="color: #008080; font-style: italic;">/// &lt;/summary&gt;</span>
    <span style="color: #008080; font-style: italic;">/// &lt;param name=&quot;current&quot;&gt;Şu anki işlenen veri&lt;/param&gt;</span>
    <span style="color: #008080; font-style: italic;">/// &lt;param name=&quot;index&quot;&gt;İşlenen veri indexi&lt;/param&gt;</span>
    <span style="color: #0600FF;">private</span> <span style="color: #0600FF;">void</span> GetCombinations<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span> current, <span style="color: #FF0000;">int</span> index<span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        <span style="color: #FF0000;">string</span> tmpcurrent <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;&quot;</span><span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> index <span style="color: #008000;">+</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">;</span> i <span style="color: #008000;">&lt;</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">DigitCount</span><span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            tmpcurrent <span style="color: #008000;">=</span> current <span style="color: #008000;">+</span> i.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            GetCombinations<span style="color: #000000;">&#40;</span>tmpcurrent, i<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>current.<span style="color: #0000FF;">Length</span> <span style="color: #008000;">==</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Combinations</span><span style="color: #000000;">&#41;</span>
            <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">innerArray_</span>.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span>current<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Şimdi bu sınıfımızı, 5 basamaklı bir sayının 2&#8242;li kombinasyonunu hesaplamak üzere şu şekilde kullanabilirsiniz.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">&nbsp;
Combination com <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Combination<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
List<span style="color: #008000;">&lt;</span><span style="color: #FF0000;">string</span><span style="color: #008000;">&gt;</span> result <span style="color: #008000;">=</span> com.<span style="color: #0000FF;">GetCombinations</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">5</span>, <span style="color: #FF0000;">2</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

<p>Burada dikkat etmeniz gereken nokta, List<string> olarak geri dönen değerler kombinasyonların index değerleri. Örneğin 5&#8242;in 2&#8242;li kombinasyonlarını bulmak istiyorsunuz (sayımız da 12345 olsun mesela), geri dönen değerlerden birisi de &#8220;01&#8243;. Bu kombinasyonun değeri aslında &#8220;12&#8243;, diğer bir kombinasyon değerimiz &#8220;13&#8243; ise, asıl değerimiz &#8220;24&#8243; olmalı. Bu eşleştirmeyi kendiniz yapmanız gerekecek. Belki MasterMind oyununu bitirdiğimde, bütün kodları paylaşırım sizinle. Böylece Combination sınıfının eksiksiz bir kopyasını siz de kullanabilirsiniz -ben de henüz yazmadım:)-</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ahmetbutun.net/index.php/2010/08/26/c-ile-kombinasyon-hesaplama-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C# ile kombinasyon hesaplama</title>
		<link>http://blog.ahmetbutun.net/index.php/2010/08/26/c-ile-kombinasyon-hesaplama/</link>
		<comments>http://blog.ahmetbutun.net/index.php/2010/08/26/c-ile-kombinasyon-hesaplama/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 16:46:00 +0000</pubDate>
		<dc:creator>@bütün</dc:creator>
				<category><![CDATA[Visual C#.NET]]></category>
		<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[combination]]></category>
		<category><![CDATA[kombinasyon]]></category>
		<category><![CDATA[mastermind]]></category>

		<guid isPermaLink="false">http://blog.ahmetbutun.net/?p=1014</guid>
		<description><![CDATA[Title : Calculating Combination with C# Şu aralar MasterMind adlı bir oyunla uğraşıyorum. Oyunu bilgisayara karşı da oynayabilmenizi sağlayacak bir yapı üzerinde çalışıyorum. Bu yapının temelinde de olasılık, kombinasyon ve permütasyon hesaplamaları var. Aşağıdaki kod belirlenen basamak sayısına göre sayıların kombinasyonlarını hesaplar. /// &#60;summary&#62; /// Kombinasyon hesaplamasını yapar /// &#60;/summary&#62; /// &#60;param name=&#34;current&#34;&#62;Şu anki işlenen [...]]]></description>
			<content:encoded><![CDATA[<p>Title : Calculating Combination with C#</p>
<p>Şu aralar <a href="http://u2m.me/gV" target="_blank">MasterMind</a> adlı bir oyunla uğraşıyorum. Oyunu bilgisayara karşı da oynayabilmenizi sağlayacak bir yapı üzerinde çalışıyorum. Bu yapının temelinde de olasılık, kombinasyon ve permütasyon hesaplamaları var. Aşağıdaki kod belirlenen basamak sayısına göre sayıların kombinasyonlarını hesaplar.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #008080; font-style: italic;">/// &lt;summary&gt;</span>
<span style="color: #008080; font-style: italic;">/// Kombinasyon hesaplamasını yapar</span>
<span style="color: #008080; font-style: italic;">/// &lt;/summary&gt;</span>
<span style="color: #008080; font-style: italic;">/// &lt;param name=&quot;current&quot;&gt;Şu anki işlenen veri&lt;/param&gt;</span>
<span style="color: #008080; font-style: italic;">/// &lt;param name=&quot;digitcount&quot;&gt;Toplam basamak sayısı&lt;/param&gt;</span>
<span style="color: #008080; font-style: italic;">/// &lt;param name=&quot;combination&quot;&gt;Kombinasyon sayısı (4'ün 2'li kombinasyonu için 2)&lt;/param&gt;</span>
<span style="color: #008080; font-style: italic;">/// &lt;param name=&quot;index&quot;&gt;İşlenen veri indexi&lt;/param&gt;</span>
<span style="color: #0600FF;">private</span> <span style="color: #0600FF;">void</span> GetCombinations<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span> current, <span style="color: #FF0000;">int</span> digitcount, <span style="color: #FF0000;">int</span> combination, <span style="color: #FF0000;">int</span> index<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> index <span style="color: #008000;">+</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">;</span> i <span style="color: #008000;">&lt;</span> digitcount<span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        <span style="color: #FF0000;">string</span> newcurrent <span style="color: #008000;">=</span> current <span style="color: #008000;">+</span> i.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        GetCombinations<span style="color: #000000;">&#40;</span>newcurrent, digitcount, combination, i<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #000000;">&#125;</span>
&nbsp;
    <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>current.<span style="color: #0000FF;">Length</span> <span style="color: #008000;">==</span> combination<span style="color: #000000;">&#41;</span>
        Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span>current<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Sonuçları Console&#8217;a yazdırıyor method. Bu metoda çok fazla yoğunlaşamadım ama isterseniz siz bir sınıf oluşturup bu metodu bu sınıf içerisinde gerçekleyebilirsiniz. Combination adlı bir sınıf oluşturup, 4 basamaklı sayıların 2&#8242;li kombinasyonlarını hesaplamak için Combination.Calculate(4,2) gibi bir metotla işleminizi yapabilirsiniz (Böyle bir sınıf için lütfen bu <a href="http://u2m.me/gX">http://u2m.me/gX</a> bağlantıyı takip ediniz ). Ama şu anki haliyle, 5 basamaklı sayıların 2&#8242;li kombinasyonları için,</p>
<p>1. yol</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">  <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> i <span style="color: #008000;">&lt;</span> total<span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
       GetCombinations<span style="color: #000000;">&#40;</span>i.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>, <span style="color: #FF0000;">5</span>,<span style="color: #FF0000;">2</span>, i<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

<p>2. yol</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">GetCombinations<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;&quot;</span>, <span style="color: #FF0000;">5</span>, <span style="color: #FF0000;">2</span>, <span style="color: #008000;">-</span><span style="color: #FF0000;">1</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

<p>şeklinde metodu çağırabilirsiniz.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ahmetbutun.net/index.php/2010/08/26/c-ile-kombinasyon-hesaplama/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java vs Fortran vs C#</title>
		<link>http://blog.ahmetbutun.net/index.php/2010/08/26/java-vs-fortran-vs-c/</link>
		<comments>http://blog.ahmetbutun.net/index.php/2010/08/26/java-vs-fortran-vs-c/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 15:54:17 +0000</pubDate>
		<dc:creator>@bütün</dc:creator>
				<category><![CDATA[Ben, kendim]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Visual C#.NET]]></category>
		<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[asal]]></category>
		<category><![CDATA[asal sayı]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[fortran]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[mersenne]]></category>
		<category><![CDATA[number]]></category>
		<category><![CDATA[prime]]></category>

		<guid isPermaLink="false">http://blog.ahmetbutun.net/?p=1004</guid>
		<description><![CDATA[Bu yazımda bir P sayısı için 2^P sayısının hesaplanmasında Fortran ve C# dillerini hız açısından karşılaştırmıştım. Ve bu karşılaştırmaya Java dilini de ekleyeceğimi belirtmiştim. Dün bunu karşılaştırmayı yaptım, Java dilinde de Array ve ArrayList&#60;int&#62; yapılarını kullandım. İşte sonuçlar&#8230; Grafik 1. Java Uygulama Arayüzü Grafik 2. Sonuçlar (Normal) Grafik 3. Sonuçlar(Logaritmik) Grafik 4. P sayısı ve [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://u2m.me/gH" target="_self">Bu yazımda</a> bir P sayısı için 2^P sayısının hesaplanmasında Fortran ve C# dillerini hız açısından karşılaştırmıştım. Ve bu karşılaştırmaya Java dilini de ekleyeceğimi belirtmiştim. Dün bunu karşılaştırmayı yaptım, Java dilinde de Array ve ArrayList&lt;int&gt; yapılarını kullandım. İşte sonuçlar&#8230;</p>
<p style="text-align: center;"><img class="size-full wp-image-1005    title=" src="http://blog.ahmetbutun.net/wp-content/uploads/2010/08/masterjava.jpg" alt="" width="484" height="510" /><br />
Grafik 1. Java Uygulama Arayüzü</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1006" title="xlsoutput1" src="http://blog.ahmetbutun.net/wp-content/uploads/2010/08/xlsoutput1.jpg" alt="" width="525" height="387" />Grafik 2. Sonuçlar (Normal)</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1007" title="xlsoutput2" src="http://blog.ahmetbutun.net/wp-content/uploads/2010/08/xlsoutput2.jpg" alt="" width="525" height="369" />Grafik 3. Sonuçlar(Logaritmik)</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1008" title="basamak" src="http://blog.ahmetbutun.net/wp-content/uploads/2010/08/basamak.jpg" alt="" width="525" height="317" />Grafik 4. P sayısı ve basamak sayısı ilişkisi</p>
<p style="text-align: center;">
<p style="text-align: left;">Sonuçlar beklendiği gibi&#8230;Daha doğrusu beklediğim gibi&#8230;Java&#8217;da kullanılan Array, ArrayList&lt;int&gt; yapıları C#&#8217;taki benzerlerinden daha hızlı&#8230;</p>
<p style="text-align: left;">Ama&#8230;</p>
<p style="text-align: left;">Fortan&#8217;dan C# dili gibi Java&#8217;da çok yavaş <img src='http://blog.ahmetbutun.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="text-align: left;">Fortran bir tarafa, C# mı? (dolayısıyla .NET) Java mı? derseniz eğer&#8230;Benim gibi her ikisini de öğrenin derim. Aralarında çok fazla farklılık yok zaten. Ama ille de yok abicim ben birisini seçmek istiyorum derseniz&#8230;Tamamen ilgi alanlarınıza göre seçiminizi yapın bence.</p>
<p style="text-align: left;">Oyun programlama vs. ile uğraşacaksanız kesinlikle Java öğrenin derim&#8230;</p>
<p style="text-align: left;">Orta ölçekli masaüstü yazılımlar yazacağım diyorsanız her ikisi de olabilir, benim tavsiyem .NET</p>
<p style="text-align: left;">Büyük ölçekli yazılımlar (ERP vs.) yazacağım diyorsanız her iki ortamı da kullanabilirsiniz ama benim tavsiyem Java.</p>
<p style="text-align: left;">Web uygulamaları geliştireceksiniz tavsiyem .NET (ASP.NET)</p>
<p style="text-align: left;">Sizlerin de konuyla ilgili düşüncelerinizi öğrenmek isterim, yorumlarınızı bekliyorum.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ahmetbutun.net/index.php/2010/08/26/java-vs-fortran-vs-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dynamic nested loops in c#: Dinamik iç içe döngüler…</title>
		<link>http://blog.ahmetbutun.net/index.php/2010/08/21/dynamic-nested-loops-in-c-dinamik-icice-donguler/</link>
		<comments>http://blog.ahmetbutun.net/index.php/2010/08/21/dynamic-nested-loops-in-c-dinamik-icice-donguler/#comments</comments>
		<pubDate>Sat, 21 Aug 2010 17:32:32 +0000</pubDate>
		<dc:creator>@bütün</dc:creator>
				<category><![CDATA[Ben, kendim]]></category>
		<category><![CDATA[Projeler]]></category>
		<category><![CDATA[Visual C#.NET]]></category>
		<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[dinamik içiçe döngüler]]></category>
		<category><![CDATA[dynamic]]></category>
		<category><![CDATA[loop]]></category>
		<category><![CDATA[mastermind]]></category>
		<category><![CDATA[nested]]></category>

		<guid isPermaLink="false">http://blog.ahmetbutun.net/?p=983</guid>
		<description><![CDATA[English version will be available soon! for &#40;int i = 0; i &#60; 10; i++&#41; &#123; Console.WriteLine&#40;i&#41;; &#125; Yukarıda gördüğünüz C# ile yazılmış basit bir döngü yapısı. 0 ile 9 arasıdaki (0 ve 9 dahil) rakamları ekrana yazdırıyor. Yani tek basamaklı doğal sayıları. Peki 2 basamaklı doğal sayıları nasıl ekrana yazdıracağız? Şöyle, for &#40;int i [...]]]></description>
			<content:encoded><![CDATA[<p>English version will be available soon!</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> i <span style="color: #008000;">&lt;</span> <span style="color: #FF0000;">10</span><span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span>i<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Yukarıda gördüğünüz C# ile yazılmış basit bir döngü yapısı. 0 ile 9 arasıdaki (0 ve 9</p>
<p>dahil) rakamları ekrana yazdırıyor. Yani tek basamaklı doğal sayıları. Peki 2</p>
<p>basamaklı doğal sayıları nasıl ekrana yazdıracağız? Şöyle,</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">;</span> i <span style="color: #008000;">&lt;</span> <span style="color: #FF0000;">10</span><span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> j <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> j <span style="color: #008000;">&lt;</span> <span style="color: #FF0000;">10</span><span style="color: #008000;">;</span> j<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span>i.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">+</span> j.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Peki 3 basamaklı doğal sayıları? (i değişkeninin 1&#8242;den başladığına dikkat edin</p>
<p>lütfen)</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">;</span> i <span style="color: #008000;">&lt;</span> <span style="color: #FF0000;">10</span><span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> j <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> j <span style="color: #008000;">&lt;</span> <span style="color: #FF0000;">10</span><span style="color: #008000;">;</span> j<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> k <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> k <span style="color: #008000;">&lt;</span> <span style="color: #FF0000;">10</span><span style="color: #008000;">;</span> k<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span>i.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">+</span> j.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">+</span> k.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
    <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p style="text-align: center;"><img class="size-full wp-image-996  aligncenter" title="Output" src="http://blog.ahmetbutun.net/wp-content/uploads/2010/08/output1.jpg" alt="" width="456" height="456" /></p>
<p>Dikkat ederseniz her defasında bir döngü (her basamak için) en içteki döngünün</p>
<p>içerisine ekleniyor. Kısacası herbir basamak için bir döngü&#8230;N basamak için iç içe n</p>
<p>döngü&#8230;Peki işi biraz daha karışık hale getirirsek?</p>
<p>Yukarıdaki örneklerimizde sayının basamakları birbiri ile aynı olabilir. Peki 3</p>
<p>basamaklı ve basamakları birbirlerinden farklı olan sayıları nasıl bulabiliriz?</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">;</span> i <span style="color: #008000;">&lt;</span> <span style="color: #FF0000;">10</span><span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> j <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> j <span style="color: #008000;">&lt;</span> <span style="color: #FF0000;">10</span><span style="color: #008000;">;</span> j<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> k <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> k <span style="color: #008000;">&lt;</span> <span style="color: #FF0000;">10</span><span style="color: #008000;">;</span> k<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>i <span style="color: #008000;">!=</span> j <span style="color: #008000;">&amp;&amp;</span> i <span style="color: #008000;">!=</span> k <span style="color: #008000;">&amp;&amp;</span> j <span style="color: #008000;">!=</span> k<span style="color: #000000;">&#41;</span>
                Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span>i.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">+</span> j.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">+</span> k.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
    <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p style="text-align: center;"><img class="size-full wp-image-997  aligncenter" title="Output" src="http://blog.ahmetbutun.net/wp-content/uploads/2010/08/output2.jpg" alt="" width="456" height="456" /></p>
<p>En içteki döngüye bir koşul ifadesi eklememiz yeterli oldu. Buraya kadar herşey</p>
<p>kolay&#8230;</p>
<p>Şimdi olayın zor olan kısmına gelelim. Eğer 1 ile N basamaklı sayıların tamamını elde</p>
<p>etmek istersek ne yapacağız? Bu halde N adet iç içe döngü oluşturmamız</p>
<p>gerekir (dinamik bir döngü)&#8230;Ancak bunu bir programlama dili ile yapmak mümkün değildir (en azından</p>
<p>benim bildiklerim ile -ve emin olun çok fazla dil biliyorum-)</p>
<p>Böyle birşey ne işimize yarar peki? Çok işimize yarar&#8230;Oyunlarda kullanılabilir,</p>
<p>istatistik ve olasılık hesaplarında kullanılabilir vs. vs.</p>
<p>Neyse sonuca gelelim&#8230;</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">&nbsp;
<span style="color: #0600FF;">private</span> <span style="color: #0600FF;">void</span> DynamicNestedLoop<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> number, <span style="color: #FF0000;">int</span> index<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    <span style="color: #008080; font-style: italic;">// get the current digit</span>
    <span style="color: #008080; font-style: italic;">// sayıdan index ile belirtilmiş basamağı al</span>
    <span style="color: #FF0000;">int</span> currentdigit <span style="color: #008000;">=</span> GetDigitAtIndex<span style="color: #000000;">&#40;</span>number, index<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">// if the current digit is 9 than we have to reset the number</span>
    <span style="color: #008080; font-style: italic;">// eğer şu anki basamak 9 ise sayıyı sıfırlamamız gerekiyor</span>
    <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>currentdigit <span style="color: #008000;">&lt;</span> <span style="color: #FF0000;">9</span><span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        <span style="color: #008080; font-style: italic;">// get the new number. for instance if the current number 1000 </span>
        <span style="color: #008080; font-style: italic;">// and index = 3 than new number will be 1001</span>
        <span style="color: #008080; font-style: italic;">// yeni sayıyı al, örneğin şu anki sayımız 100 ise</span>
        <span style="color: #008080; font-style: italic;">// üretilecek yeni sayımız 1001 olacaktır</span>
        <span style="color: #FF0000;">int</span> newnumber <span style="color: #008000;">=</span> ChangeDigitAtIndex<span style="color: #000000;">&#40;</span>number, index, currentdigit <span style="color: #008000;">+</span> <span style="color: #FF0000;">1</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
        Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span>newnumber<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">// call the method again with the current index</span>
        <span style="color: #008080; font-style: italic;">// metodu mevcut index ile yeniden çağır</span>
        DynamicNestedLoop<span style="color: #000000;">&#40;</span>newnumber, index<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #000000;">&#125;</span>
    <span style="color: #0600FF;">else</span>
    <span style="color: #000000;">&#123;</span>
        <span style="color: #008080; font-style: italic;">// if the current index greater than 0 </span>
        <span style="color: #008080; font-style: italic;">// (it means if we are not dealing with the first digit)</span>
        <span style="color: #008080; font-style: italic;">// eğer şu anki indeximiz 0'dan büyükse</span>
        <span style="color: #008080; font-style: italic;">// yeni sayının ilk basamağı ile uğraşmıyorsak</span>
        <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>index <span style="color: #008000;">&gt;</span> <span style="color: #FF0000;">0</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #008080; font-style: italic;">// get the previous digit of the number</span>
            <span style="color: #008080; font-style: italic;">// because we will increase it</span>
            <span style="color: #008080; font-style: italic;">// sayının bir önceki basamağını al</span>
            <span style="color: #008080; font-style: italic;">// önceki basamağı arttıracağız çünkü</span>
            <span style="color: #FF0000;">int</span> prevdigit <span style="color: #008000;">=</span> GetDigitAtIndex<span style="color: #000000;">&#40;</span>number, index <span style="color: #008000;">-</span> <span style="color: #FF0000;">1</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #008080; font-style: italic;">// if the previous digit is less than 9</span>
            <span style="color: #008080; font-style: italic;">// eğer bir önceki basamağımız 9'dan küçükse</span>
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>prevdigit <span style="color: #008000;">&lt;</span> <span style="color: #FF0000;">9</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #008080; font-style: italic;">// increase the previous digit</span>
                <span style="color: #008080; font-style: italic;">// bir önceki basamağı arttır</span>
                <span style="color: #FF0000;">int</span> newnumber <span style="color: #008000;">=</span> ChangeDigitAtIndex<span style="color: #000000;">&#40;</span>number, index <span style="color: #008000;">-</span> <span style="color: #FF0000;">1</span>, prevdigit <span style="color: #008000;">+</span> <span style="color: #FF0000;">1</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                <span style="color: #FF0000;">int</span> numberlength <span style="color: #008000;">=</span> number.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">Length</span><span style="color: #008000;">;</span>
&nbsp;
                <span style="color: #008080; font-style: italic;">// reset the number to its minimum value</span>
                <span style="color: #008080; font-style: italic;">// set every digit to zero beginning from the previous index</span>
                <span style="color: #008080; font-style: italic;">// sayıyı bir önceki basamaktan başlayarak sıfırla</span>
                <span style="color: #008080; font-style: italic;">// diğer basamakları sıfırla</span>
                <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> numberlength <span style="color: #008000;">-</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">;</span> i <span style="color: #008000;">&gt;</span> index <span style="color: #008000;">-</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">;</span> i<span style="color: #008000;">--</span><span style="color: #000000;">&#41;</span>
                    newnumber <span style="color: #008000;">=</span> ChangeDigitAtIndex<span style="color: #000000;">&#40;</span>newnumber, i, <span style="color: #FF0000;">0</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span>newnumber<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                <span style="color: #008080; font-style: italic;">// call method again from the beginning</span>
                <span style="color: #008080; font-style: italic;">// metodu en başından yeniden çağır</span>
                DynamicNestedLoop<span style="color: #000000;">&#40;</span>newnumber, numberlength <span style="color: #008000;">-</span> <span style="color: #FF0000;">1</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
            <span style="color: #0600FF;">else</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #008080; font-style: italic;">// if previous digit is 9 than look for other digits</span>
                <span style="color: #008080; font-style: italic;">// eğer bir önceki basamak 9 ise diğer basamakları kontol et</span>
                DynamicNestedLoop<span style="color: #000000;">&#40;</span>number, index <span style="color: #008000;">-</span> <span style="color: #FF0000;">1</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span>
    <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Yukarıdaki kodu kullanarak dinamik iç içe döngüleri kullanarak elde edeceğiniz</p>
<p>sonuçları, recursive metot kullanarak elde edebilirsiniz. Mesela 3 basamaklı tüm sayıları bulmak için metodu,</p>
<p>DynamicNestedLoop(100, 2);</p>
<p>3 basamaklılar için</p>
<p>DynamicNestedLoop(1000, 3);</p>
<p>şeklinde çağırmanız yeterli olacaktır. Dikkat edin ilk parametre seçilen basamak sayısı kullanılarak oluşturulabilen en küçük sayı. İkinci parametre ise sayıyı bir string dizisi olarak düşünürseniz, bu dizinin son elemanına ait indexi. Bütün yorumları Türkçe ve İngilizce olarak ayrı ayrı yazdım. Yorumları dikkatlice okuyun lütfen&#8230;</p>
<p>Peki ya sayıları oluşturmak için kullanabileceğimiz rakamlar sınırlı olursa? Yani yalnızca 2,3,7,6,8,0 rakamlarını</p>
<p>kullanarak N basamaklı sayıları (N rakam havuzunun boyutundan küçük olmak kaydıyla) nasıl bulabiliriz?</p>
<p>Bu sorunun yanıtı da bir sonraki yazımda&#8230;Umarım&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ahmetbutun.net/index.php/2010/08/21/dynamic-nested-loops-in-c-dinamik-icice-donguler/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>TC Kimlik No Üretici</title>
		<link>http://blog.ahmetbutun.net/index.php/2010/08/09/tc-kimlik-no-uretici/</link>
		<comments>http://blog.ahmetbutun.net/index.php/2010/08/09/tc-kimlik-no-uretici/#comments</comments>
		<pubDate>Sun, 08 Aug 2010 23:33:59 +0000</pubDate>
		<dc:creator>@bütün</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Ben, kendim]]></category>
		<category><![CDATA[Projeler]]></category>
		<category><![CDATA[Visual C#.NET]]></category>
		<category><![CDATA[generator]]></category>
		<category><![CDATA[tc kimlik]]></category>
		<category><![CDATA[tc kimlik no]]></category>
		<category><![CDATA[tc kimlik numarası]]></category>
		<category><![CDATA[tckimlikno]]></category>
		<category><![CDATA[üretici]]></category>

		<guid isPermaLink="false">http://blog.ahmetbutun.net/?p=923</guid>
		<description><![CDATA[Sanırım şaşırmadınız&#8230; TC Kimlik Numaralarının algoritmasının çözüldüğünü bir çoğunuz şu veya bu şekilde duymuşsunuzdur. Bu programcık girdiğiniz geçerli bir TC Kimlik numarasını kullanarak binlerce geçerli TC Kimlik numarası üretebiliyor&#8230; Detaylar için, http://u2m.me/g6 DOWNLOAD (bilgisayarkorsani.com&#8217;a üye olmanız gerekiyor!) http://u2m.me/gd YASAL UYARI : TC Kimlik No Üretici deneysel amaçlar için hazırlanmıştır ve bu yazılımın kullanımından doğabilecek tüm [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://u2m.me/g6"><img class="aligncenter size-full wp-image-954" style="border: 1px solid black;" title="TC Kimlik No Üretici" src="http://blog.ahmetbutun.net/wp-content/uploads/2010/08/tckimlik_sansur.jpg" alt="" width="469" height="571" /><br />
</a></p>
<p style="text-align: left;">Sanırım şaşırmadınız&#8230;</p>
<p style="text-align: left;">TC Kimlik Numaralarının algoritmasının çözüldüğünü bir çoğunuz şu veya bu şekilde duymuşsunuzdur. Bu programcık girdiğiniz geçerli bir TC Kimlik numarasını kullanarak binlerce geçerli TC Kimlik numarası üretebiliyor&#8230;</p>
<p style="text-align: left;">
<p style="text-align: left;"><strong>Detaylar için,</strong></p>
<p style="text-align: left;"><a href="http://u2m.me/g6" target="_blank">http://u2m.me/g6</a></p>
<p style="text-align: left;">
<p style="text-align: left;"><strong>DOWNLOAD (bilgisayarkorsani.com&#8217;a üye olmanız gerekiyor!)<br />
</strong></p>
<p style="text-align: left;"><a href="http://u2m.me/gd" target="_blank">http://u2m.me/gd</a></p>
<p style="text-align: left;">
<p style="text-align: left;"><strong><span style="color: #ff0000;">YASAL UYARI : TC Kimlik No Üretici deneysel amaçlar için hazırlanmıştır ve bu yazılımın kullanımından doğabilecek tüm maddi ve manevi zararlardan yazılım üreticisi değil, yazılımı kullanan şahıslar sorumludur.<br />
</span></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ahmetbutun.net/index.php/2010/08/09/tc-kimlik-no-uretici/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DevExpress DXperience Universal 2010.1.5</title>
		<link>http://blog.ahmetbutun.net/index.php/2010/07/07/devexpress-dxperience-universal-2010-1-5/</link>
		<comments>http://blog.ahmetbutun.net/index.php/2010/07/07/devexpress-dxperience-universal-2010-1-5/#comments</comments>
		<pubDate>Wed, 07 Jul 2010 14:34:28 +0000</pubDate>
		<dc:creator>@bütün</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ADO.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Visual C#.NET]]></category>
		<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[2010.1.5]]></category>
		<category><![CDATA[devexpress]]></category>
		<category><![CDATA[DXperience]]></category>
		<category><![CDATA[Universal]]></category>

		<guid isPermaLink="false">http://blog.ahmetbutun.net/?p=879</guid>
		<description><![CDATA[DevExpress ile ilgili yazdığım yazılar blog sayfamda en fazla yorum yapılan, ziyaret edilen bölümler&#8230; http://u2m.me/b! Bu yazımda DevExpress v2009 Volume 1&#8242;i duyurmuşum ancak aradan nerden baksanız 1 yıl geçmiş. Eee linklerin de yenilenmesi lazım haliyle&#8230;İşte size DevExpress&#8217;in piyasadaki en son sürümü&#8230; DevExpress DXperience Universal 2010.1.5 SEÇENEK 1&#8230; Components/Bileşenler http://u2m.me/c7 Documentation/Dökümentasyon http://u2m.me/cc Localized Assemblies/Yerelleştirilmiş Assembly&#8217;ler http://u2m.me/cb [...]]]></description>
			<content:encoded><![CDATA[<p>DevExpress ile ilgili yazdığım yazılar blog sayfamda en fazla yorum yapılan, ziyaret edilen bölümler&#8230;</p>
<p><a href="http://u2m.me/b!">http://u2m.me/b!</a></p>
<p>Bu yazımda DevExpress v2009 Volume 1&#8242;i duyurmuşum ancak aradan nerden baksanız 1 yıl geçmiş. Eee linklerin de yenilenmesi lazım haliyle&#8230;İşte size DevExpress&#8217;in piyasadaki en son sürümü&#8230;</p>
<p>DevExpress DXperience Universal 2010.1.5</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-636" title="DevExpress" src="http://blog.ahmetbutun.net/wp-content/uploads/2009/08/devexpress.jpg" alt="" width="320" height="159" /></p>
<p>SEÇENEK 1&#8230;</p>
<p>Components/Bileşenler<br />
<a href="http://u2m.me/c7" target="_blank">http://u2m.me/c7</a></p>
<p>Documentation/Dökümentasyon<br />
<a href="http://u2m.me/cc" target="_blank">http://u2m.me/cc</a></p>
<p>Localized Assemblies/Yerelleştirilmiş Assembly&#8217;ler<br />
<a href="http://u2m.me/cb" target="_blank">http://u2m.me/cb</a></p>
<p>SEÇENEK 2</p>
<p>DexExpress&#8217;in resmi sitesinden DevExpress DXperience Universal 2010.1.5 paketini indirin<br />
<a href="http://u2m.me/ce" target="_blank">http://u2m.me/ce</a></p>
<p>Aşağıdaki linkten de crack&#8217;i indirin<br />
<a href="http://u2m.nu/cg" target="_blank">http://u2m.nu/cg</a></p>
<p>Crack&#8217;in uygulayın ve hepsi bu kadar <img src='http://blog.ahmetbutun.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ahmetbutun.net/index.php/2010/07/07/devexpress-dxperience-universal-2010-1-5/feed/</wfw:commentRss>
		<slash:comments>56</slash:comments>
		</item>
		<item>
		<title>The constructor to deserialize an object of &#8216;xxx&#8217; was not found</title>
		<link>http://blog.ahmetbutun.net/index.php/2009/06/20/the-constructor-to-deserialize-an-object-of-xxx-was-not-found/</link>
		<comments>http://blog.ahmetbutun.net/index.php/2009/06/20/the-constructor-to-deserialize-an-object-of-xxx-was-not-found/#comments</comments>
		<pubDate>Sat, 20 Jun 2009 17:59:06 +0000</pubDate>
		<dc:creator>@bütün</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Visual C#.NET]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[deserialize]]></category>
		<category><![CDATA[serialize]]></category>

		<guid isPermaLink="false">http://blog.ahmetbutun.net/?p=603</guid>
		<description><![CDATA[Eveeeet başka bir Maykrosoft .NET günlüğüne hoşgeldiniz&#8230;Bugünki sorun nedir??? Oturdunuz, çok heveslisiniz, .NET framework kullanarak şahane bir uygulama yazmaya karar verdiniz. Ama o da ne? ISerializable implement eden bir sınıftan türettiğiniz bir sınıfı Deserialize ederken aşağıdaki problemle karşılaştınız. &#8220;The constructor to deserialize an object of &#8216;xxx&#8217; was not found&#8221; Ama abi Serialize ederken sorun olmuyo, [...]]]></description>
			<content:encoded><![CDATA[<p>Eveeeet başka bir Maykrosoft .NET günlüğüne hoşgeldiniz&#8230;Bugünki sorun nedir???</p>
<p>Oturdunuz, çok heveslisiniz, .NET framework kullanarak şahane bir uygulama yazmaya karar verdiniz. Ama o da ne? ISerializable implement eden bir sınıftan türettiğiniz bir sınıfı Deserialize ederken aşağıdaki problemle karşılaştınız.</p>
<p>&#8220;<span style="color: #ff0000;">The constructor to deserialize an object of &#8216;xxx&#8217; was not found</span>&#8221;</p>
<p>Ama abi Serialize ederken sorun olmuyo, bu niye böyle yapıyo şimdi? dediğinizi duyar gibiyim <img src='http://blog.ahmetbutun.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> :) Bill amcaya yine selamlarınızı mı ilettiniz gizliden gizliden, ya da niye gizli olsun, bağıra bağıra <img src='http://blog.ahmetbutun.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> :)</p>
<p>Durun, rahat bir nefes alın, çözüm burda&#8230;</p>
<p>Ne geyik yaptım şaka maka <img src='http://blog.ahmetbutun.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Neyse şakayı bir kenara bırakalım arkadaşlar bir süre için. Yukarıda da kısaca bahsettiğim gibi, ISerializable arayüzünü implement eden bir sınıftan türettiğiniz bir sınıfı deserialize ederken yukarıdaki hatayı almanız muhtemel. Bu sorunun nedeni ise ISerializable arayüzünü gerçekleyen bir sınıftan türettiğiniz bir sınıf, ISerializable metotlarını da gerçeklemelidir (serialization ve deserialization işlemleri için ayrı ayrı). Siz büyük ihtimalle bu kısmı atladınız, es geçtiniz ya da bilmiyorsunuz.</p>
<p>Örnek verelim,</p>
<p><span style="color: #008000;"><strong><em>[Serializable]<br />
class Test: Hashtable<br />
{<br />
public </em></strong><strong><em>Test</em></strong><strong><em>()<br />
{<br />
}<br />
}</em></strong></span><br />
gibi bir sınıf oluşturdunuz<em><strong>. </strong></em>Görüldüğü<em><strong> </strong></em>üzere bu sınıf ISerializable arayüzünü gerçekleyen Hashtable sınıfından türetilmiş. İşte bu &#8220;Test&#8221; adlı sınıfımızı deserialize işlemine tabi tuttuğumuzda yukarıdaki hatayı alacağız. Bu hatayı engellemek için ise ISerializable arayüzüne ait,</p>
<p><span style="color: #008000;"><em><strong>protected </strong></em><strong><em>Test</em></strong><em><strong>(SerializationInfo info, StreamingContext context) : base(info, context) { }</strong></em></span></p>
<p>constructor ını da gerçeklemeniz gerekmektedir. Yukarıdaki sınıfa bu constructor da eklenirse yukarıdaki hatanın oluşması engellenmiş olur çünkü bu constructor, ilgili sınıfın deserialization işleminde kullanılır.</p>
<p><em><strong>Son bir not daha düşelim, eğer serialize etmek istediğiniz ek veriler varsa, ISerializable arayüzüne ait </strong><strong><span style="color: #008000;">GetObjectData() </span></strong></em><span style="color: #000000;">metodunu da gerçeklemeniz gerekiyor arkadaşlar. Benden söylemesi&#8230;</span><em><strong><span style="color: #008000;"><br />
</span></strong></em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ahmetbutun.net/index.php/2009/06/20/the-constructor-to-deserialize-an-object-of-xxx-was-not-found/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cross-thread operation not valid!</title>
		<link>http://blog.ahmetbutun.net/index.php/2009/04/07/cross-thread-operation-not-valid/</link>
		<comments>http://blog.ahmetbutun.net/index.php/2009/04/07/cross-thread-operation-not-valid/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 08:46:19 +0000</pubDate>
		<dc:creator>@bütün</dc:creator>
				<category><![CDATA[Visual C#.NET]]></category>
		<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[error]]></category>
		<category><![CDATA[threads]]></category>

		<guid isPermaLink="false">http://blog.ahmetbutun.net/?p=553</guid>
		<description><![CDATA[.NET kullanan yazılımcı arkadaşlar uygulama geliştirirken zaman zaman aşağıdakine benzer bir hata alabilirsiniz; Cross-thread operation not valid: Control &#8216;xxxxx&#8217; accessed from a thread other than the thread it was created on. Bu istisnai durum herhangi bir kontrole ya da kontrolün özelliklerine, kontrolün oluşturulduğu Thread dışında farklı bir Thread üzerinden erişmeye çalışıldığında ortaya çıkıyor. Dolayısıyla bu [...]]]></description>
			<content:encoded><![CDATA[<p>.NET kullanan yazılımcı arkadaşlar uygulama geliştirirken zaman zaman aşağıdakine benzer bir hata alabilirsiniz;</p>
<p><span style="color: #ff0000;">Cross-thread operation not valid: Control &#8216;xxxxx&#8217; accessed from a thread other than the thread it was created on.</span></p>
<p>Bu istisnai durum herhangi bir kontrole ya da kontrolün özelliklerine, kontrolün oluşturulduğu Thread dışında farklı bir Thread üzerinden erişmeye çalışıldığında ortaya çıkıyor. Dolayısıyla bu durum daha çok Multi-Threading gerektiren uygulamalarda karşımıza çıkıyor. Peki bu sorunu nasıl çözeceğiz? İşte bu noktada .NET&#8217;in güçlü yapılarından Delegate (Temsilci) lere başvuracağız. Bu sorunu ortadan kaldırmak Delegate&#8217;ler ile inanılmaz kolay. Nasıl mı? Şöyle, bir örnekle açıklayalım;</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">&nbsp;
<span style="color: #FF0000;">delegate</span> <span style="color: #0600FF;">void</span> updateLabelTextDelegate<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span> newText<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">private</span> <span style="color: #0600FF;">void</span> updateLabelText<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span> newText<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
<span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>label1.<span style="color: #0000FF;">InvokeRequired</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
<span style="color: #008080; font-style: italic;">// worker thread</span>
updateLabelTextDelegate del <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> updateLabelTextDelegate<span style="color: #000000;">&#40;</span>updateLabelText<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
label1.<span style="color: #0000FF;">Invoke</span><span style="color: #000000;">&#40;</span>del, <span style="color: #008000;">new</span> <span style="color: #FF0000;">object</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> <span style="color: #000000;">&#123;</span> newText <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span>
<span style="color: #0600FF;">else</span>
<span style="color: #000000;">&#123;</span>
<span style="color: #008080; font-style: italic;">// UI thread</span>
label1.<span style="color: #0000FF;">Text</span> <span style="color: #008000;">=</span> newText<span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>burada yapmak istediğimiz şey, uygulamamızın içerisinde bulunan Label1 adlı Label kontrolünün<br />
Text özelliğine farklı Thread&#8217; ler üzerinde de erişebilmek. Öncelikle ilgili kontrolün Text özelliğini değiştiren bir metodu temsil edene bir temsilci tanımlamak (ve tabii ki metodu da). İşte bu amaçla updateLabelTextDelegate adlı, uygulama içerisinde updateLabelText() metodunu temsil edebilecek bir temsilci tanımlıyoruz. Metodumuzun içerisinde ise, ilgili kontrolün eğer faklı bir Thread üzerinden erişilmişse ayrı bir invocation gerektirip gerektirmediğini kontrol ediyoruz. Artık updateLabelText() metodunu gönül rahatlığı ile uygumamızın herhangi bir yerinde, herhangi bir Thread içerisinde çağırabiliriz. Hepsi bu kadar kolay <img src='http://blog.ahmetbutun.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Hepsi bu kadar <img src='http://blog.ahmetbutun.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ahmetbutun.net/index.php/2009/04/07/cross-thread-operation-not-valid/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>
