<?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>Bilgisayar Kavramları &#187; Kod Örnekleri</title>
	<atom:link href="http://www.bilgisayarkavramlari.com/category/kodlar/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bilgisayarkavramlari.com</link>
	<description>www.bilgisayarkavramlari.com</description>
	<lastBuildDate>Sun, 29 Jan 2012 21:38:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Swing Kütüphanesi</title>
		<link>http://www.bilgisayarkavramlari.com/2011/06/01/swing-kutuphanesi/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/06/01/swing-kutuphanesi/#comments</comments>
		<pubDate>Wed, 01 Jun 2011 09:23:09 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[JAVA]]></category>
		<category><![CDATA[Kod Örnekleri]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2011/06/01/swing-kutuphanesi/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bu yazının amacı, JAVA dilinde bulunan ve grafiksel kullanıcı ara yüzü geliştirmekte kullanılan SWING kütüphanesine hızlı bir başlangıç yapmaktır. Öncelikle Swing kütüphanesinin gelişiminden hızlıca bahsedelim. Swing kütüphanesi JAVA diline JDK 1.1 sürümünden sonra eklenmiştir. Daha önce AWT (Active Window Toolkit) ismi verilen bir kütüphane kullanmaktaydık ancak çok daha fazla ve [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-family:Times New Roman; font-size:12pt">Yazan : Şadi Evren ŞEKER<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Bu yazının amacı, JAVA dilinde bulunan ve grafiksel kullanıcı ara yüzü geliştirmekte kullanılan SWING kütüphanesine hızlı bir başlangıç yapmaktır.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Öncelikle Swing kütüphanesinin gelişiminden hızlıca bahsedelim. Swing kütüphanesi JAVA diline JDK 1.1 sürümünden sonra eklenmiştir. Daha önce AWT (Active Window Toolkit) ismi verilen bir kütüphane kullanmaktaydık ancak çok daha fazla ve gelişmiş özelliklerle gelen swing kütüphanesi neredeyse tamamen AWT yerine geçti denilebilir. AWT halen kullanılmakta, bunun en büyük sebebi JAVA&#8217;nın Visual Studio gibi geliştirme ortamlarından farklı olarak geçmişle uyumlu olmasıdır (back compatibility). Yani, örneğin 1997 yılında yazdığım bir kodu hala derleyip çalıştırabiliyorum.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">AWT&#8217;nin bulunmasındaki diğer önemli bir faktör ise, Swing kütüphanesinin AWT üzerinde geliştirilmiş olmasıdır. AWT&#8217;den bu kadar bahsettikten sonra son olarak aynı projede hem AWT hem de Swing kullanmamanız gerektiğini, aksi halde ağır ve hafif bileşenlerin ekranda hatalı görüleceğini (heavy weighted, light weighted) söyleyerek Swing kütüphanesini anlatmaya başlayalım.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Swing kütüphanesi, javax altında bulunmaktadır ve bütün swing sınıfları (classes) javax.swing paketi ile başlar.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Örneğin, ekrana basit bir düğme koyarak uygulama geliştirmeye başlayalım.<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/sbres_1306920273_0__.jpg" alt=""/><span style="font-family:Times New Roman; font-size:12pt"><br />
		</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Yukarıdaki kodun çıktısı, aşağıdaki şekilde bir pencereye yerleştirilmiş bir düğmeden (button) ibarettir:<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/sbres_1306920273_1__.jpg" alt=""/><span style="font-family:Times New Roman; font-size:12pt"><br />
		</span></p>
<p>Kodumuzda kullandığımız iki swing bileşeni olan JFrame ve JButton import edildikten sonra sınıfın bir JFrame olacağını, extedns JFrame yazıp JFrame sınıfını <a href="http://www.bilgisayarkavramlari.com/2007/04/14/inheritance-nesneler-arasi-miras-iliskisi/">kalıtımla (inheritance)</a> alarak belirtiyoruz.
</p>
<p><span style="font-family:Times New Roman; font-size:12pt">Kodumuzda bulunan iki metottan ilki bir <a href="http://www.bilgisayarkavramlari.com/2008/11/24/yapici-constructor/">inşa fonksiyonu olup (constructor)</a>, this.add fonksiyon çağrılması ile JFrame içinde tanımlı olan add fonksiyonuna bir adet JButton parametre verilmiştir.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Klasik olarak swing kütüphanesinde, bir bileşenin diğer bileşenleri içinde barındırma özelliği bulunuyorsa (container) bu durumda add fonksiyonu, parametre olarak aldığı bileşeni, barındırıcı bileşene eklemektedir.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Kodun 5. satırında yapılan bu ekleme işleminde dikkat edilecek bir husus da, JButton bileşenini oluşturan ve new ile çağrılan yapıcı fonksiyonun (constructor) parametre olarak bir <a href="http://www.bilgisayarkavramlari.com/2008/08/02/dizgi-string/">dizgi (string)</a> almış olmasıdır. Bu dizgi, düğmenin üzerinde görülecek olan yazıdır.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Son olarak main fonksiyonunda, yeni tanımladığımız bu sınıftan bir nesne (object) oluşturarak bu objenin referansına sb ismini veriyoruz. Kodun 9. ve 10. satırlarında ise sırasıyla sb isimli bu nesneyi (ki artık JFrame özelliği taşıyan ve içerisinde bir buton olan nesnedir) paketliyoruz ve göstertiyoruz. Paketleme işlemini basitçe, bir pencerenin içerisindeki bileşenlerin sığacağı en ufak hali alması olarak düşünebilirsiniz. Gösterme işlemi ise bir bileşenin görünürlülüğünü (visibility) doğru yapmaktan ibarettir (true). Tersi şekilde görünürlülüğü yanlış (false) yapılarak bir bileşen gizlenebilir. Yine daha önceki sürümlerde bu işlem için sırasıyla show() ve hide() fonksiyonları da kullanılmaktaydı ancak JDK 1.3 sonrasında bu fonksiyonlar kaldırıldı.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Şimdi gelelim bu düğmenin tıklanması halinde eylemi algılamaya.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Yukarıdaki kodu yazıp denediyseniz tıklama eyleminin herhangi bir sonuç doğurmadığını görmüşsünüzdür. Bunun sebebi JAVA dilinde tanımlı olan herhangi bir eylemin sınıf içerisinde yer alamamasıdır.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">JAVA dilinde eylemi üreten ve yakalayan nesneler farklı olabilir. Örneğin yukarıdaki örnekte düğmeyi tanımladığımız swingbuton isimli sınıf düğmeye tıklandığında devreye girebileceği gibi tamamen başka bir sınıf da devreye sokulabilir. Biz basit olsun diye ilk örneğimizde yine aynı sınıfta eylemi yakalayacağız. Bunun için öncelikle sınıfa bu özelliğin kazandırılması gerekir. JAVA dilinde bir sınıfın herhangi bir bileşen ile ilgili bir eylem yakalayabilmesi için ActionListener olması gerekir.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">public class swingbuton extends JFrame implements ActionListener<br />
</span></p>
<p> <br />
 </p>
<p><span style="font-family:Times New Roman; font-size:12pt">şeklinde sınıfın tanımını değiştirerek bu sorunu çözebiliriz. Ancak, <a href="http://www.bilgisayarkavramlari.com/2008/11/22/arayuz-interface/">arayüzlerden (interface)</a> hatırlanacağı üzere bir <a href="http://www.bilgisayarkavramlari.com/2008/11/22/arayuz-interface/">arayüzü (interface)</a> sınıfa kazandırmanın (implements), bağlayıcı bir sonucu olmaktadır.<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/sbres_1306920273_2__.jpg" alt=""/><span style="font-family:Times New Roman; font-size:12pt"><br />
		</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Kodumuzda yeni olan en büyük fark, sınıfta artık ActionListener arayüzünün implement edilmesidir. Bu arayüzün sınıfa uygulanması ile birlikte, sınıfta &#8221; actionPerformed&#8221; isimli fonksiyonu bulundurma zorunluluğu ortaya çıkar. Nitekim yukarıdaki kodun 10-12. satırları arasında bu fonksiyon kodlanmış ve herhangi bir eylem olması halinde çalışacak olan bu fonksiyonun içerisinde ekrana &#8220;butona basıldı&#8221; mesajının yazılması sağlanmıştır.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Diğer bir ilave ise artık düğmenin bir eylem dinleyicisi olmasına olan ihtiyaçtır. Düğmemize basıldığında hangi sınıfın bu eylemi yakalacağını kodda belirtmemiz gerekir ki bu durum da 8. satırda kodlanmıştır.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Yukarıdaki kodun ekran çıktısı aşağıdaki şekildedir:<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/sbres_1306920273_3__.jpg" alt=""/><span style="font-family:Times New Roman; font-size:12pt"><br />
		</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Birden fazla düğme bulunması halinde düğmeleri ayırt etmek için eylemin özel olarak koşullandırılması gerekir.<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/sbres_1306920273_4__.jpg" alt=""/><span style="font-family:Times New Roman; font-size:12pt"><br />
		</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Kodun yeni halinde, düğmelerin tanımlandığı satırı sınıf geçerlilik alanına alarak actionPerformed fonksiyonu içerisinde hangi düğmeye tıklandığını kontrol edebiliyoruz. Bunun için parametre olarak gelen ActionEvent tipindeki e nesnesinin kaynağını okutan .getSource metodunu çağırıyor ve hangi nesneye eşit olduğunu sorguluyoruz.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Ayrıca kodda yapılan yeni bir ilave, birden fazla bileşeni aynı anda ekranda gösterebilmek için bir yayılım (Layout) eklenmesidir. Yukarıdaki kodda, 10. satırda bulunan komut, this ile ifade edilen JFrame nesnesinin yayılımının FlowLayout tipinde olacağını belirtmektedir. Bunun anlamı eklenen her bileşen, bir öncekinin sağına ilave edilecek, nihayet ekranda daha fazla sağa eklenecek yer kalmayınca aşağıya geçileceğidir.<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/sbres_1306920273_5__.jpg" alt=""/><span style="font-family:Times New Roman; font-size:12pt"><br />
		</span></p>
<p>Swing kütüphanesi kullanılarak mevcut bileşenler, yukarıda gösterildiği şekilde ekrana eklenip kullanılabileceği gibi, bileşenler üzerinde değişiklik yapılması da mümkündür. Örneğin bir swing bileşeni olan Jpanel üzerinde çizim yapmaya çalışalım:
</p>
<p> <br />
 </p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/sbres_1306920273_6__.jpg" alt=""/><span style="font-family:Times New Roman; font-size:12pt"><br />
		</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Yukarıdaki kodda bulunan sınıf, Jpanel bileşenini miras almış ve bu bileşenin &#8220;paintComponent&#8221; isimli metodunun <a href="http://www.bilgisayarkavramlari.com/2008/11/22/cignemek-overriding/">üzerine ezmiştir (override)</a>. Neticede Jpanel jf isimli Jframe&#8217;e eklenmiş ancak yeni çizim özellikleri ile görüntülenmiştir. Kodun ekran çıktısı aşağıdaki şekildedir:<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/sbres_1306920273_7__.jpg" alt=""/><span style="font-family:Times New Roman; font-size:12pt"><br />
		</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">paintComponet fonksiyonu yukarıda gösterildiği şekilde <a href="http://www.bilgisayarkavramlari.com/2008/11/22/cignemek-overriding/">ezilerek (override)</a> Graphics kütüphanesinden istenilen bir nesne, yukarıda gösterildiği şekilde ekrana eklenebilir.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Ayrıca JAVA&#8217;nın kuvvetli kütüphanelerinde birisi de Graphics2D kütüphanesidir. 2 boyutlu şekillerin bulunduğu kütüphane olarak tanımlayabileceğimiz bu kütüphane ile görsel pek çok işlem yapılabilir. Bu kütüphaneyi kullanmak için örnek kod aşağıda verilmiştir:<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/sbres_1306920273_8__.jpg" alt=""/><span style="font-family:Times New Roman; font-size:12pt"><br />
		</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Yukarıdaki yeni kodda, paintComponent fonksiyonu altında, Graphics2D sınıfından türetilmiş bir nesne olan g2d nesnesine, şimdiye kadar kullandığımız ve klasik Graphics kütüphanesinin bir nesnesi olan g nesnesini tip inkılabı ile (type casting) atıyoruz. Bu sayede g2d nesnesinin fonksiyonlarını kullanabiliyoruz.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Kodda, dikdörtgen ve daire şeklinde iki nesne ekrana eklenerek gösterilmiştir. Kodun çıktısı aşağıda verilmiştir:<br />
</span></p>
<p> <br />
 </p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/sbres_1306920273_9__.jpg" alt=""/><span style="font-family:Times New Roman; font-size:12pt"><br />
		</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Aynı ekranda hem çizim hem de bileşen (component) kullanan kod (Ahmet beyin sorusu üzerine ekliyorum):<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Sorunumuz, aynı ekranda hem çizim yapabilmek, yani Graphics kütüphanesini kullanmak, hem de java&#8217;nın bileşenlerinin (örneğin düğme (buton) veya yazı alanı (text areat) gibi ) kullanabilmek.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Bunu yapan örnek bir kodu aşağıdaki şekilde kodlayabiliriz:<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/060111_1223_SwingKtphan1.png" alt=""/><span style="font-family:Times New Roman; font-size:12pt"><br />
		</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Kodda, öncelikle bir JPanel sınıfı oluşturuyoruz. Basitçe JPanel miras alan bir sınıfımız var, ismi cizim ve bu sınıf içerisinde, yukarıda da anlatılan paintComponent metodunun üzerine ezere (method overriding) Graphics kütüphanesini kullanıyoruz (örnek olarak bir çizgi çizdirilmiştir).<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Ardından main fonksiyonumuzu içeren bir sınıf kodlanmıştır. Bu sınıf içerisinde x nesne atıfı (object referrer) ile gösterilen bir JFrame oluşturulmuş ve bileşen yayılımı (layout) GridLayout olarak ayarlanmıştır. Kabaca ekran 2&#215;2 boyutlarında dört parçaya bölünmüştür. Javada bu yayılıma ekleme yapıldığında sol üst köşeden başlanarak bileşenler eklenir ve ilk satır bitince aşağıya geçilir.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Buna göre sırasıyla eklediğimiz bileşenler, c ismindeki ve cizim sınıfından türetilmiş bir JPanel, satır içinde (inline) olarak türetilmiş bir cizim nesnesi, üzerinde &#8220;deneme&#8221; yazan bir düğme (buton) ve içinde &#8220;www.bilgisayarkavramlari.com&#8221; yazılı bir yazı alanı (JTextArea).<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Ekranın çıktısı aşağıdaki şekildedir:<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/060111_1223_SwingKtphan2.png" alt=""/><span style="font-family:Times New Roman; font-size:12pt"><br />
		</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Görüldüğü üzere, ekranda çizim içerikli iki panel ve iki adet swing kütüphanesinden bileşen eklenmiştir.<br />
</span></p>
<p>   </p>

<p class="sayac_bilgi">570 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/06/01/swing-kutuphanesi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>İstanbul Ünv. Nesne Yönelik Programlama Vize Çözümleri</title>
		<link>http://www.bilgisayarkavramlari.com/2011/04/29/istanbul-unv-nesne-yonelik-programlama-vize-cozumleri/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/04/29/istanbul-unv-nesne-yonelik-programlama-vize-cozumleri/#comments</comments>
		<pubDate>Fri, 29 Apr 2011 01:01:45 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[JAVA]]></category>
		<category><![CDATA[Kod Örnekleri]]></category>
		<category><![CDATA[Sınavlar]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2011/04/29/istanbul-unv-nesne-yonelik-programlama-vize-cozumleri/</guid>
		<description><![CDATA[Yrd. Doç. Dr. Şadi Evren ŞEKER Bir masa lambasının 4 farklı durumu bulunabilmektedir. Kapalı, az ışık, orta ışık ve çok ışık seviyelerinde yanabilen bu lambayı nesne yönelimli olarak programlayınız. Herhangi bir insanın bu lambanın durumunu değiştirebilmesi ve lambanın mevcut durumunu görebilmesini sağlayınız. (JAVA dilinde sadece gerekli sınıfları yazınız) (10 puan) Masa lambasında durumu tutan bir [...]]]></description>
			<content:encoded><![CDATA[<p>Yrd. Doç. Dr. Şadi Evren ŞEKER
</p>
<ol>
<li>
<div>Bir masa lambasının 4 farklı durumu bulunabilmektedir. Kapalı, az ışık, orta ışık ve çok ışık seviyelerinde yanabilen bu lambayı nesne yönelimli olarak programlayınız. Herhangi bir insanın bu lambanın durumunu değiştirebilmesi ve lambanın mevcut durumunu görebilmesini sağlayınız. (JAVA dilinde sadece gerekli sınıfları yazınız) (10 puan)
</div>
<p><span style="color:red">Masa lambasında durumu tutan bir değişkene ve bu durumu değiştiren bir metoda ihtiyaç duyulmaktadır. 4 farklı durum olduğu için en uygun değişken int tipidir.<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/042911_0101_stanbulnvN13.png" alt=""/>
			</p>
<p><span style="color:red">Yukarıdaki kod doğru olmakla birlikte, insan sınıfında yapıcı fonksiyon içerisinde masa lambası tanımlanmaması kabul edilebilir (insanın masa lambası olabilir ama her insanın masa lambası olmak zorunda değildir). Veya durumu döndüren fonksiyon (durumuBildir) değer döndürmek yerine ekrana durumu basabilir, veya String tipinde kapalı, az, orta ışık, çok ışık şeklinde değerler döndürebilir. Benzer şekilde yeniDurum fonksiyonu paramatre olarak int yerine String tipinde değer alabilir. Bu açıklamada olduğu üzere makul kabul edilebilecek değişken tipinde ve fonksiyon yapısında değişiklik olabilir.<br />
</span></p>
<p>
 </p>
</li>
<li>
<div>Bir bankanın ATM cihazına gelen müşteriler, giriş (şifre yazarak), para yatırma, para çekme ve bakiye sorgulama işlemlerini yapabilmektedir. Bu sistemi nesne yönelimli olarak modelleyiniz, ihtiyaç duyuluyorsa ilave sınıfları da tanımlayınız. Her sınıfın metotlarını ve özelliklerini belirtiniz ve modelinizi JAVA dilinde kodlayınız. (30 puan)
</div>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/042911_0101_stanbulnvN22.png" alt=""/>
			</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/042911_0101_stanbulnvN32.png" alt=""/>    
</p>
</li>
<li>
<div>Aşağıda verilen sınıfların özellik ve metotlarının isimlerini yazınız. Bu sınıflardan hangilerinin arasında ilişki olduğunu ve bu ilişkinin çeşidini yazınız.
</div>
<p>{çember, daire, nokta, şekil, doğru, kare, yamuk, piramit, küp, silindir }
</p>
<p>Yukarıdaki tanımınız ışığında, bir şekil vektörünü parametre olarak alıp bu vektördeki elemanların alanlarını hesaplayan fonksiyonu JAVA dilinde kodlayınız. (Bu sorudaki vektör kelimesi, java.util.Vector sınıfını ifade etmektedir, sorudaki hesaplama fonksiyonu dışında kod yazmanız gerekmemektedir ancak isterseniz sınıfların metotlarını ve özelliklerini kod yazarak da gösterebilirsiniz. Sınıflar arasındaki ilişkilerin isimlerini her durumda yazınız.)  (50 puan)
</p>
<p>
 </p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/042911_0101_stanbulnvN42.png" alt=""/>
			</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/042911_0101_stanbulnvN51.png" alt=""/>
			</p>
<p>
 </p>
<ol>
<li>
<div>Aşağıdaki kod parçasının ekran çıktısını yazınız (10 Puan):
</div>
<p>        int x = 6; // 110
</p>
<p>        int y = 3; // 011
</p>
<p>                 //  101 = ^
</p>
<p>                //   010  = 2
</p>
<p>                      //    111  = |
</p>
<p>        System.out.println(x^y|2);
</p>
<p>        if(++y == 3&amp;&amp; x&lt;6 )
</p>
<p>            System.out.println(y);
</p>
<p>        System.out.println(y);
</p>
<p>Not: Bu sorunun cevabı hem &#8220;Thinking in JAVA&#8221; kitabında hem de &#8220;JAVA Tutorial&#8221; içeriğinde bulunmaktadır.
</p>
<p><span style="color:red">7<br />
</span></p>
<p><span style="color:red">3<br />
</span></p>
<p><span style="color:red">Yukarıdaki ilk işlem x^y işlemidir ve ikilik tabanda XOR işlemi olarak çalışır. Bu durumad 6 = (110)<sub>2</sub> ve 3 = (011)<sub>2</sub> olarak çevrildikten sonra aralarında özel veya (xor) operatörü çalıştırıldığında, 101 sonucu bulunur. Ardından gelen tek boru (pipe) işlemi ise ikilik tabanda veya (or) işlemidir ve (101)<sub>2</sub> | (010)<sub>2</sub> şeklinde düşünülmelidir. Bu işlemin sağ tarafı 2 sayısının ikilik tabandaki karşılığıdır. Bu işlemin sonucu da (111)<sub>2</sub> olarak bulunur ki bu değer onluk tabanda 7 yapar.<br />
</span></p>
<p><span style="color:red">Ardından  gelen if satırında önce x değerinin 6&#8242;dan küçük olup olmadığı kontrol edilir. Bu kontrol doğru değildir (false) dolayısıyla if satırındaki ikinci kısım çalışmaz. Yani y++ == 3 satırı çalışmaz. Bunun sebebi JAVA dilindeki kısa devre (short circuit) uygulamasıdır. Ve işlemi ile birbirine bağlı olan if kontrollerinde sol tarafın false dönmesi halinde sonuç flase olacağı için sağ tarafa bakılmaz. Ayrıca bu if satırının altında olan if bloğu da sonuç false olduğu için çalışmaz ve ikinci println fonksiyonu ekrana basılmaz.<br />
</span></p>
<p><span style="color:red">Son satırdaki println fonksiyonu ise y&#8217;nin orijinal değeri olan 3&#8242;ü ekrana basar.<br />
</span></p>
<p>
 </p>
</li>
</ol>
<p><em>&#8220;Bilgisayarların, bilgisayar bilimindeki yeri, teleskopların, astronomi bilimindeki yerinden fazla değildir.&#8221; &#8212; Dijkstra<br />
</em></p>
</li>
</ol>

<p class="sayac_bilgi">974 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/04/29/istanbul-unv-nesne-yonelik-programlama-vize-cozumleri/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Dosyayı Tersten Basan Kod</title>
		<link>http://www.bilgisayarkavramlari.com/2011/04/26/dosyayi-tersten-basan-kod/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/04/26/dosyayi-tersten-basan-kod/#comments</comments>
		<pubDate>Tue, 26 Apr 2011 09:14:56 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Kod Örnekleri]]></category>
		<category><![CDATA[veri yapıları]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2011/04/26/dosyayi-tersten-basan-kod/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Gelen bir soru üzerine, C dilinde bir dosyanın içeriğini tersten ekrana basan kodu yazıp sitede yayınlıyorum. Öncelikle algoritmamızı inşa edelim. Ters almak gibi işlemler yapı olarak özyineli (recursive) fonksiyonlara çok uygundur. Genelde stack (yığın) yapısının kullanıldığı özyineli fonksiyonlar bilgiyi tutma ve ters çevirme (son giren ilk çıkar (LIFO) algoritması) için [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER
</p>
<p>Gelen bir soru üzerine, C dilinde bir dosyanın içeriğini tersten ekrana basan kodu yazıp sitede yayınlıyorum.
</p>
<p>Öncelikle algoritmamızı inşa edelim.
</p>
<p>Ters almak gibi işlemler yapı olarak <a href="http://www.bilgisayarkavramlari.com/2008/08/05/ozyineli-fonksiyonlar-recursive-functions/">özyineli (recursive) fonksiyonlara</a> çok uygundur. Genelde <a href="http://www.bilgisayarkavramlari.com/2007/05/04/stack-yigin/">stack (yığın)</a> yapısının kullanıldığı <a href="http://www.bilgisayarkavramlari.com/2008/08/05/ozyineli-fonksiyonlar-recursive-functions/">özyineli fonksiyonlar</a> bilgiyi tutma ve ters çevirme (son giren ilk çıkar (LIFO) algoritması) için elverişli olurlar. Bu yüzden biz de bir <a href="http://www.bilgisayarkavramlari.com/2008/08/05/ozyineli-fonksiyonlar-recursive-functions/">özyineli fonksiyon</a> kullanarak dosyamızdan karakter karakter değerleri okuyacak sonra da bunları ekrana basacağız.
</p>
<p>Kodu aşağıda veriyorum:
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/042611_0914_DosyayTerst11.png" alt=""/>
	</p>
<p>Kodumuzdaki main fonksiyonu sadece dosyayı açmakta ve sonra ters fonksiyonunu çağırmaktadır. Dosya ters fonksiyonunda işlendikten sonra (ki bu işleme dosyayı tersten basmak olacak) dosya kapatılmakta ve program sonlandırılmaktadır.
</p>
<p>Gelelim ters fonksiyonuna. Bu fonksiyon, dosya göstericisini (file pointer) parametre olarak alıp, dosya sonu olup olmadığını kontrol ediyor. Feof fonksiyonu, şayet dosyanın sonuna ulaştıysa, return; satırını çalıştıracak ve dolayısıyla fonksiyondan çıkılacak. Aslında bu durum bizim dosyamızın sonu ve dolayısıyla fonksiyonumuzun sonu ve dolayısıyla <a href="http://www.bilgisayarkavramlari.com/2007/05/04/stack-yigin/">özyineleme yığınımızın (recursion stack)</a> sonu olmaktadır.
</p>
<p>Fonksiyonun geri kalanında işlem gayet basit bir şekilde fscanf ile dosyadan okumak ve ardından tekrar ters fonksiyonunu çağırmak ve sonra da okunan karakteri ekrana basmak şekline ilerler.
</p>
<p>Buradaki kritik nokta, ters fonksiyonunu, ekrana karakter basmadan çağırmaktır. Şayet kodun 11. ve 12. satırları yer değiştirecek olsaydı, yani önce ekrana basıp sonra ters fonksiyonunu çağıracak olsaydık, bu durumda dosyanın içeriği olduğu gibi ekrana basılacaktır. Biz bunun yerine o andaki okunan karakteri bekletiyoruz ve sonraki karakteri basması ve ters çevirmesi için yeniden fonksiyona veriyoruz. Bu işlem dosya sonuna kadar gidiyor. Nihayet dosya sonuna erişilince <a href="http://www.bilgisayarkavramlari.com/2007/05/04/stack-yigin/">özyineli yığınımız (recursion stack)</a> toparlanmaya başlıyor ve bu toparlanma sırasında ekrana karakterleri basarak ilerliyor.
</p>
<p>Yukarıdaki kod, Dev-CPP ile test edilmiş ve çalışmaktadır. Örneğin girdi.txt dosyası olarak aşağıdaki içerikte bir dosyayı verirsek:
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/042611_0914_DosyayTerst21.png" alt=""/>
	</p>
<p>Programın çıktısı aşağıdaki şekilde olur:
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/042611_0914_DosyayTerst31.png" alt=""/>
	</p>
<p>
 </p>

<p class="sayac_bilgi">533 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/04/26/dosyayi-tersten-basan-kod/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Nesne Yönelimli Programlama Dersi Quiz Çözümü</title>
		<link>http://www.bilgisayarkavramlari.com/2010/12/07/nesne-yonelimli-programlama-dersi-quiz-cozumu/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/12/07/nesne-yonelimli-programlama-dersi-quiz-cozumu/#comments</comments>
		<pubDate>Tue, 07 Dec 2010 09:31:45 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Kod Örnekleri]]></category>
		<category><![CDATA[Nesne Yönelimli Programlama]]></category>
		<category><![CDATA[Sınavlar]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/12/07/nesne-yonelimli-programlama-dersi-quiz-cozumu/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Quiz soruları ve çözümleri aşağıdaki şekildedir: Bir oylama için program yazmanız isteniyor. Oylamaya katılan 5 aday bulunuyor ve bu adayların numarası (1&#8242;den 5&#8242;e kadar bir sayı) oy pusulasına yazılarak oy kullanılıyor. Programınızda 10 adet oyu okuyup ekrana adayların aldıkları oy miktarını basan bir program yazınız. Kullanılan oyun 1-5 arasında olmaması [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Quiz soruları ve çözümleri aşağıdaki şekildedir:</p>
<ol>
<li>Bir oylama için program yazmanız isteniyor. Oylamaya katılan 5 aday bulunuyor ve bu adayların numarası (1&#8242;den 5&#8242;e kadar bir sayı) oy pusulasına yazılarak oy kullanılıyor. Programınızda 10 adet oyu okuyup ekrana adayların aldıkları oy miktarını basan bir program yazınız. Kullanılan oyun 1-5 arasında olmaması halinde problemi istisna yakalama ile çözünüz.</li>
</ol>
<p><strong>Çözüm<br />
</strong></p>
<p>Oylama programında basitçe her oyun tutulduğu bir oy pusulası ve bir de oy verilen adaylar olacağını düşünebiliriz. Bu durumda oy pusulası ve aday isimli iki adet sınıf tanımlayıp bu sınıfların kodlamasını aşağıdaki şekilde yapabiliriz.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120710_0931_NesneYnelim1.png" alt="" /></p>
<p>Yukarıdaki kodda, aday bilgisi tutuluyor. Programımızda olması gereken bilgi, adayın numarası ve oy sayısıdır. Biz de bu bilgileri tutan iki adet değişken tanımlıyor ve bu değişkenlerin getter/Setter fonksiyonlarını kodluyoruz. Ayrıca sınıfın <a href="http://www.bilgisayarkavramlari.com/2008/11/24/yapici-constructor/">inşa fonksiyonunda (constructor),</a> başlangıç olarak oy sayısını 0 yapıyoruz. Son olarak adayların oy sayısını arttıran bir metot yukarıdaki kodun sonunda yer almaktadır. Basit bir arttırma işlemidir.</p>
<p>Oy pusulasını tutan kod ise aşağıdaki şekilde kodlanmıştır:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120710_0931_NesneYnelim2.png" alt="" /></p>
<p>Yukarıdaki kodda, görüldüğü üzere, oy pusulasında sadece kime oy verildiği bilgisi tutulmuştur. Bu bilgiyi <a href="http://www.bilgisayarkavramlari.com/2010/10/25/c-dili-ile-kapsulleme-encapsulation/">kapsülleme gereği getter ve setter fonksiyonları</a> ile erişilebilir halde sınıfta kodluyoruz.</p>
<p>Son olarak kodumuzu test etmek için bir main fonksiyonu yazalım:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120710_0931_NesneYnelim3.png" alt="" /></p>
<p>Oy okuma işlemi için &#8220;oyoku&#8221; isimli fonksiyon yazılmıştır. Bu fonksiyonun özelliği, oyları okurken yanlış bir oy girilmesi durumunda, (oyların 1 ile 5 arasında olacağını hatırlayınız) bir istisna fırlatmasıdır. Bu istisna, try bloğu içerisinden çağrıldığı yerde yakalanır ve kodun 27nci satırında bulunan catch bloğu ile ekrana bir hata mesajı basılır. Şayet oy başarılı bir şekilde okunabilirse, bu durumda ilgili oy pusulasına (ki toplam 10 adet pusula bulunuyor) oy değeri kaydedilir. Şayet bir istisna burada oluşmamışsa kodun 25. Satırına geçebiliriz. İstisna oluşması durumunda kodun 25. Satırı hiç çalışmadan catch bloğuna gidilir.</p>
<p>Kodumuzun 25. satırında, adayların tutulduğu nesne dizisinin (object array) ilgili elemanının (hangi elemana oy verildiyse) oy miktarını 1 arttıran oysayisiniArttir() fonksiyonu çağrılır.</p>
<p>Son olarak kodun 31-33 satırları arasında, adayların oy durumları ekrana basılır.</p>
<p>Yukarıdaki kodda bulunan ve kendi istisnamız olan hatalioy sınıfını aşağıdaki şekilde kodlayabiliriz:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120710_0931_NesneYnelim4.png" alt="" /></p>
<ol>
<li>
<div>Bir banka yazılımı için aşağıdaki özelliklerle program yazmanız isteniyor.  Sistemde tutulacak veriler:</div>
<ol>
<li>Hesap sahibinin ismi</li>
<li>Hesap numarası</li>
<li>Bakiye</li>
<li>Hesap tipi (vadeli / vadesiz)</li>
</ol>
</li>
</ol>
<p>Yukarıdaki hesap bilgileri için aşağıdaki işlemleri yapmanız isteniyor:</p>
<ol style="margin-left: 72pt;">
<li>Hesapların ilk değer olarak bakiyesinin 0 atanması gerekir.</li>
<li>Hesaba para yatırılabilir</li>
<li>Hesaptan para çekilebilir</li>
<li>Hesap bilgisi görüntülenebilir (sahibinin ismi, numarası, tipi ve bakiyesi)</li>
</ol>
<ol>
<li>2. Sorudaki programınızı, 10 müşteriye hizmet verebilecek şekilde genişletin.</li>
<li>2. Sorudaki programınızı, hesap hareketleri görüntülenecek şekilde genişletin. Buna göre bir hesap hareketinin, tarihi, saati, miktarı ve hesap numarası bulunur.</li>
</ol>
<p><strong>Çözüm:<br />
</strong></p>
<p>Yukarıdaki sorunun çözümü için basitçe bir hesap nesnesi oluşturmamız yeterli olacaktır. Yukarıdaki 4. soru için hesap hareketlerini tutan ilave bir sınıfa daha ihtiyacımız olacak. Öncelikle, hesapların tutulduğu bir hesap sınıfını programlayarak başlayalım.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120710_0931_NesneYnelim5.png" alt="" /></p>
<p>Soruda tanımlandığı üzere, her hesap için hesapno, bakiye , hesap tipi ve hesap sahibi bilgilerini tutuyoruz. Ayrıca hesap hareketlerinden oluşan ilave bir dizi, her hareketi ayrıca kayıt altına alıyor.</p>
<p>Hesap sınıfımızın constructor fonksiyonunda, hesap bakiyesini 0 olarak atıyoruz.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120710_0931_NesneYnelim6.png" alt="" /></p>
<p>Ayrıca sınıfımızdaki hesap hareketlerini tutan dizinin kaçıncı elemanında olduğumuz bilgisi, hhsayisi isimli değişkende durmaktadır. Bu değişken de henüz hesap hareketi olmadığı için 0 olarak atanıyor.</p>
<p>Sırasıyla hesap sınıfındaki metotların kodlamasını inceleyelim:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120710_0931_NesneYnelim7.png" alt="" /></p>
<p>Yukarıda, hesap detaylarını ekrana basan fonksiyon verilmiştir. Fonksiyondaki 21nci satırda bulunan cout komutu ile ekrana hesabın temel 3 bilgisi bastırılmıştır. Ardında hesabın tipi yazıya çevrilerek bastırılmıştır. Hesap tipini tutmak için kullanılan int tipi, kullanıcı açısından anlamsız olabilir o yüzden yazıya çevirme işlemi yapılır.</p>
<p>Son olarak 27-30 satırları arasında, hesap hareketlerini bastırmak için, mevcut hesap hareketi sayısını tutan değişken kadar dönen döngü içerisinde her hesap hareketinin miktarı basılmaktadır.</p>
<p>Bu çıktının örneği aşağıda verilmiştir.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120710_0931_NesneYnelim8.png" alt="" /></p>
<p>Yukarıdaki ekran görüntüsünde, örnek olarak bir hesabın detayları basılmış ve bu hesapta yapılan hesap hareketleri altında gösterilmiştir.</p>
<p>Hesap hareketi olarak kabul edilebilecek iki temel işlem para çekmek ve para yatırmak işlemleridir. Bunların kodlamasını aşağıda anlatalım:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120710_0931_NesneYnelim9.png" alt="" /></p>
<p>Para çekme işlemi, belirtilen miktar kadar bakiyeyi azaltmamaktadır. Bu işlem sırasında öncelikle miktarın yeterli olup olmadığı kontrol edilir. Şayet miktar yeterli bulunursa bakiye azaltılır, şayet yeterli bulunmazsa bu durumda bir istisna (exception) fırlatılır. Burada fırlatılan istisna, proje kapsamında bizim tanımladığımız yetersizBakiye istisnasıdır.</p>
<p>Yetersi bakiye istisnası, basit bir şekilde bakiye bilgisini de içinde saklayan bir sınıf (class) olarak tasarlanabilir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120710_0931_NesneYnelim10.png" alt="" /></p>
<p>Hesap hareketlerinin içerisine, ayrıca miktar konulurken -1 değeri ile çarpılmaktadır. Bunun anlamı, hesap hareketinin eksi değer olarak tutulmasıdır.</p>
<p>Benzer kodlama, para yatırma fonksiyonunda da kullanılmaktadır. Yatırılan miktar, hesap hareketlerine işlendikten sonra, bakiye değeri parametre olarak verilen miktar kadar arttırılmaktadır.</p>
<p>Hesap hareketlerinin detayı için sınıf kodlamasını aşağıdaki şekilde yazabiliriz:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120710_0931_NesneYnelim11.png" alt="" /></p>
<p>Bu sınıf, basit bir şekilde hesapta yapılan işlemleri tutmak için tasarlanmıştır. İlgili üyelerin getter / setter fonksiyonlarının yazılması yeterlidir.</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/quizcozum.rar">Quiz sorularının kodlarını indirmek için tıklayınız.</a></p>

<p class="sayac_bilgi">437 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/12/07/nesne-yonelimli-programlama-dersi-quiz-cozumu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dosya ve Bağlı Liste Uygulaması</title>
		<link>http://www.bilgisayarkavramlari.com/2010/12/06/dosya-ve-bagli-liste-uygulamasi/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/12/06/dosya-ve-bagli-liste-uygulamasi/#comments</comments>
		<pubDate>Mon, 06 Dec 2010 20:59:06 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Kod Örnekleri]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/12/06/dosya-ve-bagli-liste-uygulamasi/</guid>
		<description><![CDATA[Yazan: Şadi Evren ŞEKER Gelen bir soru üzerine (Ayşenur Doğan sormuş), iki farklı dosya okuyup, okunan dosyalardaki verileri iki farklı bağlı listeye koyan kodu yazmaya çalışalım. Öncelikle bağlı listemizin düğüm yapısını tanımlayalım. Tek yönlü bir bağlı liste işimizi çözecektir. Dolayısıyla sadece next isimli bir gösterici (pointer) koyarak her düğümün (node) bir sonraki düğüme bağlanmasını sağlıyoruz. [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan: Şadi Evren ŞEKER</p>
<p>Gelen bir soru üzerine (Ayşenur Doğan sormuş), iki farklı <a href="http://www.bilgisayarkavramlari.com/2008/10/22/c-ile-dosya-islemleri/">dosya okuyup</a>, okunan dosyalardaki verileri iki farklı <a href="http://www.bilgisayarkavramlari.com/2007/05/03/linked-list-linkli-liste-veya-bagli-liste/">bağlı listeye</a> koyan kodu yazmaya çalışalım.</p>
<p>Öncelikle bağlı listemizin düğüm yapısını tanımlayalım. Tek yönlü bir bağlı liste işimizi çözecektir. Dolayısıyla sadece next isimli bir <a href="http://www.bilgisayarkavramlari.com/2007/05/03/pointer-gosterici/">gösterici (pointer)</a> koyarak her düğümün (node) bir sonraki düğüme bağlanmasını sağlıyoruz.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120610_2059_DosyaveBal1.png" alt="" /></p>
<p>Ayrıca her düğümde en fazla 100 karakter uzunluğunda bir <a href="http://www.bilgisayarkavramlari.com/2008/08/02/dizgi-string/">dizgi (string)</a> tutuyoruz. Dosyadaki her kelime bu dizginin içerisine yerleştirilecek.</p>
<p>Ardından klasik olarak dosya aşma işlemini yapıyoruz:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120610_2059_DosyaveBal2.png" alt="" /></p>
<p>Yukarıdaki kodda görüldüğü üzere, <a href="http://www.bilgisayarkavramlari.com/2008/10/22/c-ile-dosya-islemleri/">iki dosya göstericisi (file pointer)</a> tanımlanmıştır. Ayrıca dosyaların isimlerinin kullanıcıdan okunması için dosya1 ve dosya2 isimli iki <a href="http://www.bilgisayarkavramlari.com/2008/08/02/dizgi-string/">dizgi (string)</a> tanımlanarak kullanıcıdan dosya isimleri okunmuştur.</p>
<p>Okunan dosyaların açılamaması halinde hata mesajı verilerek çıkılmıştır.</p>
<p>Sıra <a href="http://www.bilgisayarkavramlari.com/2007/05/03/linked-list-linkli-liste-veya-bagli-liste/">bağlı listelerin (linked list)</a> tanımlanmasında:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120610_2059_DosyaveBal3.png" alt="" /></p>
<p>Yukarıdaki kodda, iki adet bağlı liste, daha önceden tanımladığımız dugum <a href="http://www.bilgisayarkavramlari.com/2007/11/08/olusum-composition-ve-struct-yapilar/">yapısı(struct)</a> uygun olarak birer düğümü gösterecek şekilde hafızaya yerleştiriliyor. Ayrıca bağlı listemiz <a href="http://www.bilgisayarkavramlari.com/2007/05/03/linked-list-linkli-liste-veya-bagli-liste/">tek yönlü olduğu için (singular)</a> listenin ilk elemanını kaybedemeyiz. Bu yüzden listenin üzerinde hareket edecek olan bir iter değişkeni tanımlıyoruz (literatürde iterator olarak geçer). Yani listenin son elemanını sürekli olarak iter, ilk elemanını ise liste ile başlayan değişkenler tutuyor. Şimdilik hafızadaki bağlı liste görüntüsü aşağıdaki şekildedir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120610_2059_DosyaveBal4.png" alt="" /></p>
<p>Yukarıdaki şekilde görüldüğü üzere, hafızada (RAM) iki adet liste, bu iki listenin içinde de birer adet boş düğüm (node) ve her düğümü gösteren ilave birer iter değişkeni bulunmaktadır.</p>
<p>Gelelim dosyadan okuyup listenin içerisine değerleri atan koda:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120610_2059_DosyaveBal5.png" alt="" /></p>
<p>Kodumuz basitçe, dosyanın sonuna gelinip gelinmediğini kontrol eden bir while döngüsü içerisinde çalışıyor. Yani kodun 31 ve 41 numaralı satırlarında yapılan kontrol, ilgili dosya göstericisinin, <a href="http://www.bilgisayarkavramlari.com/2008/10/22/c-ile-dosya-islemleri/">dosya sonuna ulaşıp ulaşmadığını kontrol etmekte</a> ve ulaşmadığı sürece döngü devam etmektedir.</p>
<p>Her iki döngü için de geçerli olmak üzere, bir geçici isimli <a href="http://www.bilgisayarkavramlari.com/2008/08/02/dizgi-string/">dizgi (string)</a> tanımlanarak dosyadan geçici olarak bu dizgiye okuma işlemi yapılmıştır. Ardından <a href="http://www.bilgisayarkavramlari.com/2008/12/01/strcpy-string-copy-dizgi-kopyalama/">strcpy isimli string.h kütüphanesinde bulunan fonksiyon ile</a>, okunan bu dizgi, o anda iter tarafından gösterilen düğüme konulur. İter göstericisinin sonraki düğümünde yer açılır ve iter bu yeni boş düğümü gösterir.</p>
<p>Örneğin dosyadan okunan ilk kelime &#8220;bilgisayar&#8221; olsun. Bu durumda bağlı liste yapısı aşağıdaki şekilde olacaktır:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120610_2059_DosyaveBal6.png" alt="" /></p>
<p>Görüldüğü üzere, iter göstericisi tarafından gösterilen kutuya bir değer eklenip, yeni boş bir kutu, next ile gösterilen boş alanda açılmakta ardından iter bu boş kutuyu göstermektedir. Örneğin anlaşılması açısından bir de &#8220;kavramları&#8221; kelimesini okuduğumuzu düşünelim:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120610_2059_DosyaveBal7.png" alt="" /></p>
<p>Yukarıda görüldüğü üzere her seferinde, iter tarafından gösterilen düğüme, okunan <a href="http://www.bilgisayarkavramlari.com/2008/08/02/dizgi-string/">dizgi (string)</a> yerleştirilmekte ve yeni iter tarafından gösterilen düğümün sonrasına (next) boş bir düğüm konulmakta ve iter bu yeni düğümü gösterilecek şekilde ilerletilmektedir.</p>
<p>Her şey bittikten sonra, bağlı listelere okunan değerleri ekrana bastırıyoruz:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120610_2059_DosyaveBal8.png" alt="" /></p>
<p>Listelerin başını tutan liste1 ve liste2 isimli değişkenleri <a href="http://www.bilgisayarkavramlari.com/2007/05/03/pointer-gosterici/">gösterecek</a> şekilde iter değişkenlerini başa çekiyoruz. Buradaki amaç yine listenin ilk elemanını kaybetmeden bastırma işlemini yaptırmaktır. İter değişkenleri, listenin ilk elemanlarını gösterdikten sonra, gösterdikleri düğümlerin değerlerini ekrana basıp sonraki düğüme (next node) ilerletilmektedir.</p>
<p>Kodun ekran çıktısı aşağıdaki şekildedir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120610_2059_DosyaveBal9.png" alt="" /></p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/dosya_ll.rar">Kodun tamamı ve yukarıdaki örnek çıktıda kullanılan iki dosyayı indirmek için taıklayınız.</a></p>

<p class="sayac_bilgi">1,000 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/12/06/dosya-ve-bagli-liste-uygulamasi/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>2 Boyutlu Dizi İçerisine Sarmal Seri Girişi</title>
		<link>http://www.bilgisayarkavramlari.com/2010/12/04/2-boyutlu-dizi-icerisine-sarmal-seri-girisi/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/12/04/2-boyutlu-dizi-icerisine-sarmal-seri-girisi/#comments</comments>
		<pubDate>Sat, 04 Dec 2010 16:11:56 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Kod Örnekleri]]></category>
		<category><![CDATA[Sınavlar]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/12/04/2-boyutlu-dizi-icerisine-sarmal-seri-girisi/</guid>
		<description><![CDATA[Yazan: Şadi Evren ŞEKER Bu yazının amacı, bir C sorusunun çözümünü açıklamaktır. Sorumuz basitçe n x n boyutlarındaki bir matrisin (soruyu basitleştirmek için n sayısını tek sayı olarak kabul edeceğiz) içerisine aşağıdakine benzer şekilde ardışık sayıları sarmal olarak yerleştirmek. Örnek 3&#215;3 boyutlarındaki matris: 1 2 3 8 9 4 7 6 5 5&#215;5 boyutlarındaki örnek [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan: Şadi Evren ŞEKER
</p>
<p>Bu yazının amacı, bir C sorusunun çözümünü açıklamaktır. Sorumuz basitçe n x n boyutlarındaki bir matrisin (soruyu basitleştirmek için n sayısını tek sayı olarak kabul edeceğiz) içerisine aşağıdakine benzer şekilde ardışık sayıları sarmal olarak yerleştirmek.
</p>
<p>Örnek 3&#215;3 boyutlarındaki matris:
</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width:37px"/>
<col style="width:38px"/>
<col style="width:38px"/></colgroup>
<tbody valign="top">
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>1</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>2</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>3</p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>8</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>9</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>4</p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>7</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>6</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>5</p>
</td>
</tr>
</tbody>
</table>
</div>
<p>5&#215;5 boyutlarındaki örnek matris:
</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width:29px"/>
<col style="width:29px"/>
<col style="width:29px"/>
<col style="width:29px"/>
<col style="width:26px"/></colgroup>
<tbody valign="top">
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>1</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>2</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>3</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>4</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>5</p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>16</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>17</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>18</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>19</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>6</p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>15</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>24</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>25</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>20</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>7</p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>14</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>23</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>22</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>21</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>8</p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>13</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>12</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>11</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>10</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>9</p>
</td>
</tr>
</tbody>
</table>
</div>
<p>7&#215;7 boyutlarındaki örnek matris:
</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width:29px"/>
<col style="width:29px"/>
<col style="width:29px"/>
<col style="width:29px"/>
<col style="width:29px"/>
<col style="width:29px"/>
<col style="width:29px"/></colgroup>
<tbody valign="top">
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>1</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>2</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>3</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>4</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>5</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>6</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>7</p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>24</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>25</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>26</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>27</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>28</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>29</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>8</p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>23</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>40</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>41</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>42</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>43</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>30</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>9</p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>22</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>39</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>48</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>49</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>44</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>31</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>10</p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>21</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>38</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>47</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>46</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>45</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>32</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>11</p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>20</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>37</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>36</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>35</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>34</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>33</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>12</p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>19</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>18</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>17</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>16</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>15</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>14</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>13</p>
</td>
</tr>
</tbody>
</table>
</div>
<p>Yukarıdaki matrislere bakıldığında, sayısal olarak bazı özellikler bulunabilir. Bizim amacımız yukarıdaki problemi, 2 boyutlu problemden tek boyutlu probleme indirgemektir. Bunun sebebi diziler üzerinde işleme yapan en önemli enstrümanımız olan döngülerin tek boyutlu olarak çalışmasıdır. Burada iç içe yazılan iki döngünün iki boyutlu çalıştığı iddia edilebilir ancak bu durumda bile aslında yapılan iş, tek boyutlu bir taramanın, ikinci döngü ile (dıştaki döngü ile) tekrarlanmasıdır. Yani döngüler, yetenek olarak tek boyutlu, doğrusal hareket sağlar.
</p>
<p>Bu tespitten sonra yukarıdaki problemi çözmek için sayısal özellikler bulmaya ve problemi tek boyutlu problem haline getirmeye çalışıyoruz.
</p>
<p>İlk tespitimiz, 2 boyutlu bir matris içerisine ardışık sayıları yerleştirmek dolayısıyla matrisin ortasındaki sayının, matris boyutunun karesi olacağını biliyoruz. Örneğin 7&#215;7 boyutlarındaki matris için ortada 49 , veya 5&#215;5 boyutlarındaki matris için ortadaki değerin 25 olması gibi.
</p>
<p>Ayrıca ortaya kadar olan köşegenleri bulursak tek boyutlu seriler oluşturmuş oluruz.
</p>
<p>Örneğin aşağıdaki renklendirilmiş değerlerden başlayan ve sağa doğru giden tek boyutlu seriler, 1&#8242;er 1&#8242;er artan değerlerdir:
</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width:29px"/>
<col style="width:29px"/>
<col style="width:29px"/>
<col style="width:29px"/>
<col style="width:29px"/>
<col style="width:29px"/>
<col style="width:29px"/></colgroup>
<tbody valign="top">
<tr>
<td style="background: red; padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>1</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>2</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>3</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>4</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>5</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>6</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>7</p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>24</p>
</td>
<td style="background: red; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>25</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>26</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>27</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>28</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>29</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>8</p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>23</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>40</p>
</td>
<td style="background: red; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>41</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>42</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>43</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>30</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>9</p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>22</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>39</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>48</p>
</td>
<td style="background: red; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>49</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>44</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>31</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>10</p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>21</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>38</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>47</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>46</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>45</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>32</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>11</p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>20</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>37</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>36</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>35</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>34</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>33</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>12</p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>19</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>18</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>17</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>16</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>15</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>14</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>13</p>
</td>
</tr>
</tbody>
</table>
</div>
<p>Bu değerlerden başlayarak sağa doğru giden seri aşağıdaki şekilde işaretlenebilir:
</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width:29px"/>
<col style="width:29px"/>
<col style="width:29px"/>
<col style="width:29px"/>
<col style="width:29px"/>
<col style="width:29px"/>
<col style="width:29px"/></colgroup>
<tbody valign="top">
<tr>
<td style="background: red; padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>1</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>2</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>3</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>4</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>5</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>6</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>7</p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>24</p>
</td>
<td style="background: red; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>25</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>26</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>27</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>28</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>29</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>8</p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>23</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>40</p>
</td>
<td style="background: red; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>41</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>42</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>43</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>30</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>9</p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>22</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>39</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>48</p>
</td>
<td style="background: red; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>49</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>44</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>31</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>10</p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>21</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>38</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>47</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>46</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>45</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>32</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>11</p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>20</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>37</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>36</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>35</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>34</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>33</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>12</p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>19</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>18</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>17</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>16</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>15</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>14</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>13</p>
</td>
</tr>
</tbody>
</table>
</div>
<p>Amacımız, bu seriyi veren ve yukarıdaki şekilde, kırmızı renkle işaretlenmiş seri başlarını veren formülü bulmak.
</p>
<p>Serimizde bulunan sayılar:
</p>
<p>1, 25, 41, 49
</p>
<p>Bu sayıların arasında bir bağlantı bulmamız gerekiyor. Sayıları tersten yazar ve aralarındaki farkları bulursak:
</p>
<p>49, 41, 25, 1 ve aralarındaki farklar : 8 , 16, 24 şeklinde giden seridir. Bu serinin özelliği 8&#8242;in katları olmasıdır.
</p>
<p>Benzer durum diğer boyutlardaki matrisler için de geçerlidir. Örneğin matris 9&#215;9 boyutlarında olsaydı:
</p>
<p>81, 73, 57, 33, 1 ve aralarındaki farklar: 8, 16, 24, 32 şeklinde olacaktı.
</p>
<p>Benzer şekilde diğer köşegen değerlerini de bulalım:
</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width:29px"/>
<col style="width:29px"/>
<col style="width:29px"/>
<col style="width:29px"/>
<col style="width:29px"/>
<col style="width:29px"/>
<col style="width:29px"/></colgroup>
<tbody valign="top">
<tr>
<td style="background: red; padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>1</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>2</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>3</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>4</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>5</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>6</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>7</p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>24</p>
</td>
<td style="background: red; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>25</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>26</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>27</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>28</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>29</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>8</p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>23</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>40</p>
</td>
<td style="background: red; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>41</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>42</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>43</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>30</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>9</p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>22</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>39</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>48</p>
</td>
<td style="background: #0070c0; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>49</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>44</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>31</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>10</p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>21</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>38</p>
</td>
<td style="background: #0070c0; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>47</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>46</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>45</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>32</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>11</p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>20</p>
</td>
<td style="background: #0070c0; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>37</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>36</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>35</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>34</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>33</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>12</p>
</td>
</tr>
<tr>
<td style="background: #0070c0; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>19</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>18</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>17</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>16</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>15</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>14</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>13</p>
</td>
</tr>
</tbody>
</table>
</div>
<p>
 </p>
<p>Mavi renkle işaretli köşegen değerlerini veren formülü inceleyelim :
</p>
<p>19, 37, 47, 49 , bu sayıları ters sıralarsak : 49, 47, 37, 19 ve aralarındaki farklar: 2, 10, 18 şeklinde ilerlemektedir. Bu sayılar arasındaki fark da dikkat edilirse 8 &#8216;dir.
</p>
<p>Benzer şekilde matris boyutu 9&#215;9 olsaydı, 81, 79, 69, 51, 25, ve aralarındaki farklar: 2, 10, 18, 26 şeklinde olacaktı. Bu sayılardan başlayarak ilerleyen tek boyutlu dizilerimiz aşağıdaki şekilde olacaktı:
</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width:29px"/>
<col style="width:29px"/>
<col style="width:29px"/>
<col style="width:29px"/>
<col style="width:29px"/>
<col style="width:29px"/>
<col style="width:29px"/></colgroup>
<tbody valign="top">
<tr>
<td style="background: red; padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>1</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>2</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>3</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>4</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>5</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>6</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>7</p>
</td>
</tr>
<tr>
<td style="background: #8db3e2; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>24</p>
</td>
<td style="background: red; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>25</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>26</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>27</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>28</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>29</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>8</p>
</td>
</tr>
<tr>
<td style="background: #8db3e2; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>23</p>
</td>
<td style="background: #8db3e2; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>40</p>
</td>
<td style="background: red; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>41</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>42</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>43</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>30</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>9</p>
</td>
</tr>
<tr>
<td style="background: #8db3e2; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>22</p>
</td>
<td style="background: #8db3e2; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>39</p>
</td>
<td style="background: #8db3e2; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>48</p>
</td>
<td style="background: #0070c0; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>49</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>44</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>31</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>10</p>
</td>
</tr>
<tr>
<td style="background: #8db3e2; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>21</p>
</td>
<td style="background: #8db3e2; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>38</p>
</td>
<td style="background: #0070c0; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>47</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>46</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>45</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>32</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>11</p>
</td>
</tr>
<tr>
<td style="background: #8db3e2; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>20</p>
</td>
<td style="background: #0070c0; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>37</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>36</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>35</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>34</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>33</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>12</p>
</td>
</tr>
<tr>
<td style="background: #0070c0; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>19</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>18</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>17</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>16</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>15</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>14</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>13</p>
</td>
</tr>
</tbody>
</table>
</div>
<p>Son serimiz aşağıda işaretlenen seridir:
</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width:29px"/>
<col style="width:29px"/>
<col style="width:29px"/>
<col style="width:29px"/>
<col style="width:29px"/>
<col style="width:29px"/>
<col style="width:29px"/></colgroup>
<tbody valign="top">
<tr>
<td style="background: red; padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>1</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>2</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>3</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>4</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>5</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>6</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>7</p>
</td>
</tr>
<tr>
<td style="background: #8db3e2; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>24</p>
</td>
<td style="background: red; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>25</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>26</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>27</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>28</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>29</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>8</p>
</td>
</tr>
<tr>
<td style="background: #8db3e2; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>23</p>
</td>
<td style="background: #8db3e2; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>40</p>
</td>
<td style="background: red; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>41</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>42</p>
</td>
<td style="background: yellow; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>43</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>30</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>9</p>
</td>
</tr>
<tr>
<td style="background: #8db3e2; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>22</p>
</td>
<td style="background: #8db3e2; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>39</p>
</td>
<td style="background: #8db3e2; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>48</p>
</td>
<td style="background: #4f6228; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>49</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>44</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>31</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>10</p>
</td>
</tr>
<tr>
<td style="background: #8db3e2; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>21</p>
</td>
<td style="background: #8db3e2; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>38</p>
</td>
<td style="background: #0070c0; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>47</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>46</p>
</td>
<td style="background: #4f6228; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>45</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>32</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>11</p>
</td>
</tr>
<tr>
<td style="background: #8db3e2; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>20</p>
</td>
<td style="background: #0070c0; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>37</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>36</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>35</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>34</p>
</td>
<td style="background: #4f6228; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>33</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>12</p>
</td>
</tr>
<tr>
<td style="background: #0070c0; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>19</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>18</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>17</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>16</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>15</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>14</p>
</td>
<td style="background: #4f6228; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>13</p>
</td>
</tr>
</tbody>
</table>
</div>
<p>Serimiz: 49, 45, 33, 13 şeklinde ilerlemektedir ve farklar: 4, 12, 20 şeklinde ilerlemektedir.
</p>
<p>Şimdi, yukarıda incelediğimiz bu 4 durum için döngüleri yazmaya başlayalım. İlk durum için kodumuz aşağıdaki şekilde olur:
</p>
<p><span style="font-family:Consolas; font-size:9pt">    <span style="color:blue">int</span> kat = 0;<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    <span style="color:blue">int</span> fark = 0;<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    <span style="color:blue">for</span>(<span style="color:blue">int</span> i = n/2 ;i&gt;=0;i&#8211;){<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        a[i][i] = n*n-fark;<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        kat++;<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        fark = fark + kat*8;<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">            <span style="color:blue">for</span>(<span style="color:blue">int</span> j = i+1;j&lt;n-i;j++){<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">                a[i][j]=a[i][j-1]+1;<br />
</span></p>
<p>
 </p>
<p><span style="font-family:Consolas; font-size:9pt">            }<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    }<br />
</span></p>
<p>
 </p>
<p>Yukarıdaki kodda, dikkat edilirse, bir fark değişkeni, sürekli olarak n*n değerinden çıkarılıyor. Buradaki değer a dizisinin [i][i] adresine yerleştiriliyor. Bu değer normalde, dizinin köşegen değeridir. Bu döngüdeki i değişkeni n/2 değerine kadar ilerlemektedir, dolayısıyla köşegenin yarısına kadar ilerleyen döngü, tam olarak 2 boyutlu dizinin ortasında bitmektedir.
</p>
<p>Hesaplanan köşegen değerlerinden başlanarak, satırları dolduran döngü ise içerde yer almaktadır. Burada basitçe, hesaplanan her köşegen değerinden başlayarak satır değerlerini dolduran döngü yazılmıştır.
</p>
<p>İkinci döngümüz aşağıdadır:
</p>
<p><span style="font-family:Consolas; font-size:9pt"><br />
			<span style="color:blue">for</span>(<span style="color:blue">int</span> i = n/2 ;i&gt;0;i&#8211;){<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">            <span style="color:blue">for</span>(<span style="color:blue">int</span> j = i;j&lt;n-i+1;j++){<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">                a[j][n-i]=a[j-1][n-i]+1;<br />
</span></p>
<p>
 </p>
<p><span style="font-family:Consolas; font-size:9pt">            }<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    }<br />
</span></p>
<p>
 </p>
<p>Bu döngü, bir öncekine göre oldukça basittir çünkü önceki döngüde hesaplanan köşegen değerlerini devam ettirmektedir. Kısacası yeniden köşegen değeri hesaplanmadığı için, mevcut değerler üzerinden işlem yapılmakta ve tek boyutlu hareket tekrarlanmaktadır.
</p>
<p>Üçüncü olarak alt satırları yazan döngümüzü kodlayalım:
</p>
<p><span style="font-family:Consolas; font-size:9pt">    kat = 2;<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    fark = 0;<br />
</span></p>
<p>
 </p>
<p><span style="font-family:Consolas; font-size:9pt">    <span style="color:blue">for</span>(<span style="color:blue">int</span> i = n/2 ;i&gt;0;i&#8211;){<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        fark = fark +kat;<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        a[n-i][i-1] = n*n-fark;<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        <br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        <br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        kat = kat+8;<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        <br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">            <span style="color:blue">for</span>(<span style="color:blue">int</span> j = i;j&lt;n-i+1;j++){<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">                a[n-i][j]=a[n-i][j-1]-1;<br />
</span></p>
<p>
 </p>
<p><span style="font-family:Consolas; font-size:9pt">            }<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    }<br />
</span></p>
<p>
 </p>
<p>Hatırlanacağı üzer bu döngü, 2 den başlayarak 8&#8242;er 8&#8242;er artan döngüydü. Dolayısıyla kat değişkenini bu sefer 2 den başlatıp, ters köşegeni dönen döngüyü yazıyoruz. İçerideki döngümüz, sütun değerlerini yukarıdan aşağıya doğru dolduruyor<a href="http://www.bilgisayarkavramlari.com/2009/11/11/c-dilinde-dongu-ornekleri/">. Burada ters köşegen için i+j=n formülünü hatırlayalım</a>. Dolayısıyla a[j-i][j] değeri ters köşegeni vermektedir.
</p>
<p>Son olarak ortanın solundaki kolonları dolduran döngülerimizi yazıyoruz:
</p>
<p>
 </p>
<p><span style="font-family:Consolas; font-size:9pt">    <span style="color:blue">for</span>(<span style="color:blue">int</span> i = 0 ;i&lt;n/2;i++){<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">            <span style="color:blue">for</span>(<span style="color:blue">int</span> j = i+2;j&lt;n-i;j++){<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">                a[n-j ][i]=a[n-j+1][i]+1;<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">            }<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    }<br />
</span></p>
<p>
 </p>
<p>Bu son döngü yapısında, dış döngümüz, köşegen yarısına kadar ilerlerken, içerideki döngümüz sütunları doldurmaktadır. Bu döngüyü yukarıda yazılan ikinci döngünün (ortanın sağındaki değerleri dolduran döngünün) tersi olarak düşünmek mümkündür. Bu dördüncü döngü için de başlangıç değerleri zaten hesaplanmıştır.
</p>
<p>Kodun örnek çıktıları aşağıda verilmiştir:
</p>
<p>7&#215;7 boyutları için :
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120410_1612_2BoyutluDiz11.png" alt=""/>
	</p>
<p>9&#215;9 boyutları için:
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120410_1612_2BoyutluDiz21.png" alt=""/>
	</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/sarmal.rar">Kodun tamamını indirmek için tıklayınız</a></p>

<p class="sayac_bilgi">230 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/12/04/2-boyutlu-dizi-icerisine-sarmal-seri-girisi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nesne Yönelimli olarak Tic Tac Toe Oyunu</title>
		<link>http://www.bilgisayarkavramlari.com/2010/11/30/nesne-yonelimli-olarak-tic-tac-toe-oyunu/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/11/30/nesne-yonelimli-olarak-tic-tac-toe-oyunu/#comments</comments>
		<pubDate>Tue, 30 Nov 2010 04:49:42 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Kod Örnekleri]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/11/30/nesne-yonelimli-olarak-tic-tac-toe-oyunu/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bu yazının amacı, tictactoe oyununu nesne yönelimli olarak kodlamak ve bu sırada, aşağıdaki konuları açıklamaktır. Nesnelerden oluşan bir dizi kullanımı (Object Array) Kapsülleme (Encapsulation) İstisna yakalama (Exception Handling) Kodumuz basitçe, oynanan her hamleyi 3&#215;3 boyutlarında, iki boyutlu bir dizide tutacaktır. Ayrıca oyunun kazanılması durumunda bir istisna oluşturulacak ve bu istisnanın [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER
</p>
<p>Bu yazının amacı, tictactoe oyununu nesne yönelimli olarak kodlamak ve bu sırada, aşağıdaki konuları açıklamaktır.
</p>
<ol>
<li>Nesnelerden oluşan bir dizi kullanımı (Object Array)
</li>
<li><a href="http://www.bilgisayarkavramlari.com/2010/10/25/c-dili-ile-kapsulleme-encapsulation/">Kapsülleme (Encapsulation</a>)
</li>
<li><a href="http://www.bilgisayarkavramlari.com/2008/11/22/istisna-yakalama-kabz-i-istisna-exception-handling/">İstisna yakalama (Exception Handling)</a>
		</li>
</ol>
<p>Kodumuz basitçe, oynanan her hamleyi 3&#215;3 boyutlarında, iki boyutlu bir dizide tutacaktır. Ayrıca oyunun kazanılması durumunda bir istisna oluşturulacak ve bu istisnanın yakalanması ile, oyun sona erecektir.
</p>
<p>Bu problemin çözümü için, aşağıdaki şekilde bir nesne dizisi tasarlıyoruz:
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/113010_0449_NesneYnelim1.png" alt=""/>
	</p>
<p>Yukarıdaki şekilde, 3&#215;3 boyutlarında görülen tablo üzerindeki hamleler ayrı birer nesnede tutulmak istenmiştir. Dolayısıyla her hamleyi tutan bir nesne ve bu hamlelerin tanımlandığı bir sınıfa ihtiyacımız bulunuyor.
</p>
<p>Bu sınıfı aşağıdaki şekilde kodlayabiliriz.
</p>
<p><strong>Hamle.h dosyası<br />
</strong></p>
<p><span style="font-family:Consolas; font-size:9pt"><span style="color:blue">class</span> hamle{<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt"><span style="color:blue">private</span>:<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    <span style="color:blue">int</span> sembol; <span style="color:green">// x:1 veya o:2 değeri</span><br />
		</span></p>
<p><span style="font-family:Consolas; font-size:9pt"><span style="color:blue">public</span>:<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    <span style="color:blue">int</span> getSembol();<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    <span style="color:blue">void</span> setSembol(<span style="color:blue">int</span>);<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    hamle(<span style="color:blue">int</span>);<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    hamle();<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">};<br />
</span></p>
<p>Kodda bulunan sembol değişkeni, basitçe hamlenin X veya O olmasını belirliyor. Şayet oynanan hamle X ise, değer olarak 1, O ise değer olarak 2 veya boş hamle ise, yani henüz tablonun bu alanına oynanmamış ise 0 değerini tutuyor.
</p>
<p>Kapsülleme işlemi için bu değişkeni private tanımlıyor ve getter/setter metotlarını oluşturuyoruz. Ayrıca sınıfımızı kullanacak kişiler için bir adet int parametresi alan <a href="http://www.bilgisayarkavramlari.com/2008/11/24/yapici-constructor/">yapıcımız (constructor)</a> bulunuyor.
</p>
<p>Son olarak boş yapıcı (default constructor) tanımlıyoruz ki, tablo içerisine hamleleri boş olarak yerleştirdiğimizde, boş hamleleri belirten 0 değerini sembol değişkenine atayabilelim.
</p>
<p>Bu sınıfın metotları aşağıdaki şekilde kodlanabilir:
</p>
<p><strong>Hamle.cpp dosyası:<br />
</strong></p>
<p><span style="font-family:Consolas; font-size:9pt"><span style="color:blue">#include</span><br />
			<span style="color:#a31515">&#8220;hamle.h&#8221;</span><br />
		</span></p>
<p>
 </p>
<p><span style="font-family:Consolas; font-size:9pt"><span style="color:blue">int</span> hamle::getSembol(){<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    <span style="color:blue">return</span> sembol;<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">}<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt"><span style="color:blue">void</span> hamle::setSembol(<span style="color:blue">int</span> sembol){<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    <span style="color:blue">this</span>-&gt;sembol =sembol;<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">}<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">hamle::hamle(<span style="color:blue">int</span> sembol){<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    <span style="color:blue">this</span>-&gt;sembol= sembol;<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">}<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">hamle::hamle(){<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    sembol = 0;<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">}<br />
</span></p>
<p>
 </p>
<p>Her hamleyi tutmaya yarayan yukarıdaki koda ilave olarak bu hamlelerin oynandığı konumları tutan bir tahta sınıfı kodlamamız gerekiyor.
</p>
<p><span style="font-family:Consolas; font-size:9pt"><span style="color:blue">class</span> Tahta{<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt"><span style="color:blue">private</span>:<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    hamle  tahta[3][3];<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    <span style="color:blue">int</span> sira;<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt"><span style="color:blue">public</span>:<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    Tahta();<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    <span style="color:blue">void</span> oyna(<span style="color:blue">int</span> x,<span style="color:blue">int</span> y, <span style="color:blue">int</span> sira);<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    <span style="color:blue">void</span> oyna(<span style="color:blue">int</span> x,<span style="color:blue">int</span> y);<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    <span style="color:blue">void</span> bas(<span style="color:blue">void</span>);<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    <span style="color:blue">int</span> kazandi();<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">};<br />
</span></p>
<p>.Yukarıdaki kodda görüldüğü üzere, 3&#215;3 boyutlarında bir tahta, her elemanı hamle sınıfından değerler tutacak şekilde tanımlanmış. Bu tahta dizisine (array) erişmek için oyna metodu bulunuyor. Basitçe, tahta üzerinde bir adrese herhangi bir hamle konulabilmesi için oyna fonksiyonundaki x ve y değerlerinin verilmesi gerekiyor.
</p>
<p>Ayrıca oyna metodu <a href="http://www.bilgisayarkavramlari.com/2008/11/22/uzerineyukleme-overloading/">üzerine yükleme (overloading)</a> ile iki farklı <a href="http://www.bilgisayarkavramlari.com/2010/10/08/c-uzerinde-cok-sekillilik/">şekilde tanımlanmış (polymorphism).</a> Bu sayede, kodumuzu kullanan diğer programcılar, isterlerse o andaki sırayı belirleyerek oynayabilecekler (örneğin istedikleri bir adrese, özel olarak X veya Y değeri koyabilecekler) veya sıradaki hamleyi (örneğin sıra X&#8217;te ise doğrudan X değeri) verilen adrese konulabilecek.
</p>
<p>Yukarıda, tanımı verilen sınıfın kodlaması aşağıdaki şekildedir:
</p>
<p><span style="font-family:Consolas; font-size:9pt">Tahta::Tahta(){<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    sira = 1;<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">}<br />
</span></p>
<p>
 </p>
<p><a href="http://www.bilgisayarkavramlari.com/2008/11/24/yapici-constructor/">İnşa metodunun (constructor method)</a> içerisinde, ilk sıranın kimde olduğunu belirtmek için sira değişkenine 1 değeri konulmuştur. Bunun anlamı, şayet programcı özel olarak bir sıra belirtmezse, ilk hamlenin X tarafından yapılacağıdır.
</p>
<p><span style="font-family:Consolas; font-size:9pt"><span style="color:blue">void</span> Tahta::oyna(<span style="color:blue">int</span> x,<span style="color:blue">int</span> y,<span style="color:blue">int</span> sira){<br />
</span></p>
<p>    <br />
 </p>
<p><span style="font-family:Consolas; font-size:9pt">        <span style="color:blue">if</span>(tahta[x][y].getSembol()==0){<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">            tahta[x][y] = hamle(sira);<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">            <br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        }<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        <span style="color:blue">else</span><br />
		</span></p>
<p><span style="font-family:Consolas; font-size:9pt">            cout &lt;&lt; <span style="color:#a31515">&#8220;bu koordinata sembol yerlestirilmistir&#8221;</span>&lt;&lt;endl;<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">}<br />
</span></p>
<p>Tahta üzerinde yapılan hamlelerin koordinatları oyna fonksiyonuna verilmektedir. Yukarıdaki oyna fonksiyonu, aldığı x ve y değerlerine, verilen sıradaki sembolü yerleştirir. Buna göre yeni bir nesne oluşturulup verilen x,y koordinatlarındaki dizi içerisine yerleştirilmektedir.
</p>
<p>Aynı fonksiyonu aşağıdaki şekilde üzerine yüklenmesi mümkündür.
</p>
<p><span style="font-family:Consolas; font-size:9pt"><span style="color:blue">void</span> Tahta::oyna(<span style="color:blue">int</span> x, <span style="color:blue">int</span> y){<br />
</span></p>
<p>
 </p>
<p><span style="font-family:Consolas; font-size:9pt">        <span style="color:blue">if</span>(tahta[x][y].getSembol()==0){<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">            tahta[x][y] = hamle(sira);<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">            sira %=2;<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">            sira++;    <br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">            <span style="color:blue">if</span>(kazandi()==1)<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">                <span style="color:blue">throw</span> kazanma(1);<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">            <span style="color:blue">else</span><br />
			<span style="color:blue">if</span>(kazandi()==2)<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">                <span style="color:blue">throw</span> kazanma(2);<br />
</span></p>
<p>
 </p>
<p><span style="font-family:Consolas; font-size:9pt">        }<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        <span style="color:blue">else</span><br />
		</span></p>
<p><span style="font-family:Consolas; font-size:9pt">            cout &lt;&lt; <span style="color:#a31515">&#8220;bu koordinata sembol yerlestirilmistir&#8221;</span>&lt;&lt;endl;<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">}<br />
</span></p>
<p>
 </p>
<p>Yukarıdaki ikinci haliyle oyna fonksiyonu, sadece x ve y değerleri almaktadır. Bu sayede, sınıf içerisinde bulunan sıraya göre hamle yapılmaktadır. Elbette her hamleden sonra sıranın değiştirilmesi gerekiyor. Bunun için sıra değişkeninin 2ye bölümünden kalan alınıp değeri bir arttırılıyor (sıra değerinin 0 olamayacağını, 0 değerinin oynanmamış alanları temsil ettiğini hatırlayınız).
</p>
<p>Yukarıdaki kodda bulunan özel bir durum ise, kazanma koşulunu kontrol etmektedir. Şayet X kazandıysa 1 veya O kazandıysa 2 kontrolü yapılıp ilgili istisna (exception) fırlatılmaktadır.
</p>
<p>Bu işlem sırasında kendi yazdığımız istisna sınıfını (exception class) kullanıyoruz. Yani yukarıdaki kodda bulunan kazanma sınıfı bizim kodladığımız bir sınıf. Bu sınıfın kodu aşağıda verilecek.
</p>
<p>Son olarak Tahta sınıfında, kazandi kontrolü yapılması için aşağıdakine benzer bir kod yazılabilir:
</p>
<p><span style="font-family:Consolas; font-size:9pt"><span style="color:blue">int</span> Tahta::kazandi(){<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    <span style="color:blue">if</span>((tahta[0][0].getSembol()==1 &amp;&amp;tahta[0][1].getSembol()==1 &amp;&amp;tahta[0][2].getSembol()==1 )<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        ||(tahta[1][0].getSembol()==1 &amp;&amp;tahta[1][1].getSembol()==1 &amp;&amp;tahta[1][2].getSembol()==1 )<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        ||(tahta[2][0].getSembol()==1 &amp;&amp;tahta[2][1].getSembol()==1 &amp;&amp;tahta[2][2].getSembol()==1 )<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        ||(tahta[0][0].getSembol()==1 &amp;&amp;tahta[1][0].getSembol()==1 &amp;&amp;tahta[2][0].getSembol()==1 )<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        ||(tahta[0][0].getSembol()==1 &amp;&amp;tahta[1][0].getSembol()==1 &amp;&amp;tahta[2][0].getSembol()==1 )<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        ||(tahta[0][1].getSembol()==1 &amp;&amp;tahta[1][1].getSembol()==1 &amp;&amp;tahta[2][1].getSembol()==1 )<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        ||(tahta[0][2].getSembol()==1 &amp;&amp;tahta[1][2].getSembol()==1 &amp;&amp;tahta[2][2].getSembol()==1 )<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        ||(tahta[0][0].getSembol()==1 &amp;&amp;tahta[1][1].getSembol()==1 &amp;&amp;tahta[2][2].getSembol()==1 )<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        ||(tahta[0][2].getSembol()==1 &amp;&amp;tahta[1][1].getSembol()==1 &amp;&amp;tahta[2][0].getSembol()==1 ))<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        <span style="color:blue">return</span> 1;<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    <span style="color:blue">else</span><br />
			<span style="color:blue">if</span>((tahta[0][0].getSembol()==2 &amp;&amp;tahta[0][1].getSembol()==2 &amp;&amp;tahta[0][2].getSembol()==2 )<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        ||(tahta[1][0].getSembol()==2 &amp;&amp;tahta[1][1].getSembol()==2 &amp;&amp;tahta[1][2].getSembol()==2 )<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        ||(tahta[2][0].getSembol()==2 &amp;&amp;tahta[2][1].getSembol()==2 &amp;&amp;tahta[2][2].getSembol()==2 )<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        ||(tahta[0][0].getSembol()==2 &amp;&amp;tahta[1][0].getSembol()==2 &amp;&amp;tahta[2][0].getSembol()==2 )<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        ||(tahta[0][0].getSembol()==2 &amp;&amp;tahta[1][0].getSembol()==2 &amp;&amp;tahta[2][0].getSembol()==2 )<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        ||(tahta[0][1].getSembol()==2 &amp;&amp;tahta[1][1].getSembol()==2 &amp;&amp;tahta[2][1].getSembol()==2 )<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        ||(tahta[0][2].getSembol()==2 &amp;&amp;tahta[1][2].getSembol()==2 &amp;&amp;tahta[2][2].getSembol()==2 )<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        ||(tahta[0][0].getSembol()==2 &amp;&amp;tahta[1][1].getSembol()==2 &amp;&amp;tahta[2][2].getSembol()==2 )<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        ||(tahta[0][2].getSembol()==2 &amp;&amp;tahta[1][1].getSembol()==2 &amp;&amp;tahta[2][0].getSembol()==2 ))<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        <span style="color:blue">return</span> 2;<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    <span style="color:blue">else</span><br />
		</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        <span style="color:blue">return</span> 0;<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    <br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">}<br />
</span></p>
<p>
 </p>
<p>Yukarıdaki bu kod, 16 ayrı kazanma koşulunu kontrol etmektedir. Kazanan kişinin 1 veya 2 olmasına göre de sonucu döndürmektedir.
</p>
<p>Yukarıdaki ikinci oyna metodunda bulunan istisna sınıfı ise aşağıdaki şekilde kodlanabilir:
</p>
<p><span style="font-family:Consolas; font-size:9pt"><span style="color:blue">class</span> kazanma{<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt"><span style="color:blue">private</span>:<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    <span style="color:blue">int</span> kim;<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt"><span style="color:blue">public</span>:<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    kazanma(<span style="color:blue">int</span> x){<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        kim = x;<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    }<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    <span style="color:blue">int</span> getKim(){<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        <span style="color:blue">return</span> kim;<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    }<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">};<br />
</span></p>
<p>
 </p>
<p>Son olarak, yukarıdaki kodlarımızı çalıştıracak olan main fonksiyonunu aşağıdaki şekilde kodlayalım:
</p>
<p><span style="font-family:Consolas; font-size:9pt"><span style="color:blue">#include</span><br />
			<span style="color:#a31515">&#8220;hamle.h&#8221;</span><br />
		</span></p>
<p><span style="font-family:Consolas; font-size:9pt"><span style="color:blue">#include</span><br />
			<span style="color:#a31515">&#8220;tahta.h&#8221;</span><br />
		</span></p>
<p><span style="font-family:Consolas; font-size:9pt"><span style="color:blue">#include</span><br />
			<span style="color:#a31515">&lt;iostream&gt;</span><br />
		</span></p>
<p><span style="font-family:Consolas; font-size:9pt"><span style="color:blue">#include</span><br />
			<span style="color:#a31515">&lt;conio.h&gt;</span><br />
		</span></p>
<p>
 </p>
<p><span style="font-family:Consolas; font-size:9pt"><span style="color:blue">using</span><br />
			<span style="color:blue">namespace</span> std;<br />
</span></p>
<p>
 </p>
<p><span style="font-family:Consolas; font-size:9pt"><span style="color:blue">int</span> main(){<br />
</span></p>
<p>
 </p>
<p><span style="font-family:Consolas; font-size:9pt">    Tahta t = Tahta();<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    <span style="color:blue">try</span>{<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        <span style="color:blue">for</span>(<span style="color:blue">int</span> i =0;i&lt;9;i++){<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">            <span style="color:blue">int</span> x,y;<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">            cin&gt;&gt;x;<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">            cin&gt;&gt;y;<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">            t.oyna(x,y);<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">            t.bas();<br />
</span></p>
<p>
 </p>
<p><span style="font-family:Consolas; font-size:9pt">        }<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    }<span style="color:blue">catch</span>(kazanma k){<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        t.bas();<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        <span style="color:blue">if</span>(k.getKim()==1)<br />
</span></p>
<p>
 </p>
<p><span style="font-family:Consolas; font-size:9pt">            cout &lt;&lt; <span style="color:#a31515">&#8220;kazanan: X&#8221;</span> &lt;&lt; endl;<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">        <span style="color:blue">else</span><br />
		</span></p>
<p><span style="font-family:Consolas; font-size:9pt">            cout &lt;&lt; <span style="color:#a31515">&#8220;kazanan: O&#8221;</span> &lt;&lt; endl;<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    }<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">    getch();<br />
</span></p>
<p><span style="font-family:Consolas; font-size:9pt">}<br />
</span></p>
<p>
 </p>
<p>Yukarıdaki kodda, 9 hamlenin yapıldığı bir for döngüsü bulunuyor. Bu döngü içerisinde, kullanıcıdan x ve y değerleri okunuluyor ve ardından bu okunan değerlere Tahta sınıfından tanımlanan t değişkeni ile oynanıyor. Burada kullanılan oyna fonksiyonu, sırayı almamaktadır. Dolayısıyla Tahta sınıfındaki tanımlı olan sırayı kullanmakta ve bu sıra otomatik olarak her hamleden sonra değiştirilmektedir.
</p>
<p>Ayrıca bu döngü içerisindeki oynama işlemi sırasında herhangi bir taraf kazanacak olursa, kazanan kişi için bir istisna fırlatılacak ve bu fırlatılan istisna, yukarıdaki kodda bulunan catch bloğu ile yakalanacaktır. Burada yakalanan istisna, bizim tanımladığımız kazanma sınıfından olduğu için, sınıfın içerisinde tutulan kimin kazandığı bilgisini alıp buna göre uygun kazanma mesajını ekrana basabiliyoruz.
</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/tictactoe.rar">Kodun tamamına buradaki bağlantıyı tıklayarak erişebilirsiniz.</a>
	</p>

<p class="sayac_bilgi">274 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/11/30/nesne-yonelimli-olarak-tic-tac-toe-oyunu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visual Basic ile Gösterici (Pointer) Kullanımı</title>
		<link>http://www.bilgisayarkavramlari.com/2010/02/23/visual-basic-ile-gosterici-pointer-kullanimi/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/02/23/visual-basic-ile-gosterici-pointer-kullanimi/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 09:43:12 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Kod Örnekleri]]></category>
		<category><![CDATA[veri yapıları]]></category>
		<category><![CDATA[pointer]]></category>
		<category><![CDATA[visual basic]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/02/23/visual-basic-ile-gosterici-pointer-kullanimi/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Sitede gelen bir soru üzerine bu yazıyı yazmaya karar verdim. Bilgisayar dilleri (makine işlemeli diller, machine processing languages) tasnif edilirken, visual basic gibi görsel tasarıma dayalı diller üst seviye dil (high level langauge) olarak kabul edilirler. Hatta hiç kod yazmadan program üretilmesine izin verdiği için visual basic&#8217;i bir dilden çok [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Sitede gelen bir soru üzerine bu yazıyı yazmaya karar verdim. Bilgisayar dilleri (makine işlemeli diller, machine processing languages) tasnif edilirken, visual basic gibi görsel tasarıma dayalı diller üst seviye dil (high level langauge) olarak kabul edilirler. Hatta hiç kod yazmadan program üretilmesine izin verdiği için visual basic&#8217;i bir dilden çok görsel geliştirme ortamı olarak kabul eden (basic&#8217;i dil ancak visual basic&#8217;i bir geliştirme ortamı) tasnifler söz konusudur.</p>
<p><a href="http://www.bilgisayarkavramlari.com/2007/10/16/pointer-gosterici-2/">Göstericiler (pointers)</a> ise tam tersine düşük seviyeli dillerde daha çok ihtiyaç duyulan ve programın geliştirildiği bilgisayarın hafızasına (ram) doğrudan erişim yapan yapılardır. Dolayısıyla tanım itibariyle visual basic ve <a href="http://www.bilgisayarkavramlari.com/2007/10/16/pointer-gosterici-2/">gösterici (pointer)</a> kavramları birbiri ile uyuşmazlar. Ancak .Net teknoloji ile birlikte nesne yönelimli programlama (object oriented programming) yapısı kazanan adeta kabuk değiştiren visual basic ile gösterici kullanımı ihtiyacı artmıştır.</p>
<p>Nesne yönelimli dillerin çoğunda (örn. JAVA) doğrudan gösterici kullanımı bulunmaz. Bunun yerine <a href="http://www.bilgisayarkavramlari.com/2007/05/03/pointer-gosterici/">nesne atfı ismi verilen (object referrer)</a> yapılar kullanılır ve bu yapılar aslında birere göstericidir.</p>
<p>Visual basic de nesne yönelimli programlama ile birlikte bu nesne atıflarını içermiş ve artık gösterici yapısını nesne yönelimli olarak içermiştir ancak biz bu yazı kapsamında, nesne yönelimli programlanın bize sunduğu bu imkanı bir kenara bırakarak, saf visual basic dilinde göstericileri nasıl kullanabileceğimizi irdeleyeceğiz.</p>
<p>Konuyu aşağıdaki örnek üzerinden anlamaya çalışalım.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/022310_0943_VisualBasic1.png" alt="" width="621" height="291" /></p>
<p>Yukarıda, C dilinde yazılmış basit bir gösterici kodu bulunmaktadır. Kodumuzun 7. Satırında p isimli bir tam sayı göstericisi (integer pointer) tanımlanmış, 8 . satırda bu göstericinin gösterdiği yerde 1 tam sayı konulacak bir yer hafızada ayrılmış (memory allocation) ve 9. Satıda bu göstericinin gösterdiği adrese 10 değeri konulmuştur.</p>
<p>Kodun 10. Satırında göstericinin adresi (hafızada nereyi gösterdiği ) ve gösterdiği yerdeki değerler ekrana basılmış ve 11. Satırda gösterici için ayrılan hafıza bölmesi serbest bırakılmıştır (free).</p>
<p>Yukarıdaki bu kodun çalışan hali aşağıda verilmiştir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/022310_0943_VisualBasic2.png" alt="" /></p>
<p>Şimdi yukarıdaki bu basit C dili ile yazılmış gösterici kodunu Visual Basic dili ile kodlamaya çalışalım.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/022310_0943_VisualBasic3.png" alt="" width="550" height="325" /></p>
<p>Yukarıdaki kodu inceleyecek olursak, yapı olarak bir form yükleme fonksiyonuna yazılmış kodumuz, p ve hHeap isimli iki adet Long tipinde değişken tanımlayarak başlıyor. Buradaki p değişkenini  bir gösterici olarak kullanacağız. Dikkat edilmesi gereken husus, p değişkeninde gösterici mantığında olduğu üzere bir hafıza bölmesinin adresinin tutulmasıdır. Yani C dilinde olan p göstericisinde nasıl hafızanın bir adresi tutuluyorsa, visual basic örneğinde de hafıza adresini tutmaya çalışacağız.</p>
<p>Öncelikle çalışan programımızın yani <a href="http://www.bilgisayarkavramlari.com/2007/11/18/islem-process/">işlemin (process)</a> çalıştığı alanı tutan hHeap isimli değişkenimizden HeapAlloc fonksiyonu ile (C dilindeki malloc benzeri) hafızada bir alan ayırması yapılıyor.</p>
<p>Bu ayırma sırasında 0&#8242;dan başlanarak 2 boyutunda ayırma işlemi yapılmıştır. 2 sayısı, visual basic dilindeki bir tamsayının (integer) hafızada kapladığı alan boyutudur.</p>
<p>Sonuçta kodun 22. Satırı itibariyle, p isminde bir değişken ve bu değişkenin içinde, hafızada bize ayrılmış 2 byte uzunluğunda bir alanın adresi bulunmaktadır.</p>
<p>Ardından 23. Satırda böyle bir adres ayrımı başarılı olduysa, artık bu adres alanına bir integer değer koymayı deneyebiliriz.</p>
<p>24. satırda i isimli bir tam sayı değişkeni tanımlanıyor, 25. Satırda bu değişkene sayısal olarak 10 değeri konuluyor ve sonunda 26. Satırda, p göstericimizin gösterdiği adrese, i değişkenin içindeki değer konuluyor. Bu sırada CopyMemoryWrite fonksiyonu kullanılmıştır. Bu fonksiyon kernel32 dinamik kütüphanesi içinde bulunan <span style="color: #a31515; font-family: Courier New; font-size: 10pt;">RtlMoveMemory</span> fonksiyonudur. Dolayısıyla bu fonksiyonu kullanmak için aşağıdakine benzer bir şekilde kodun başında tanım yapılmalıdır:</p>
<p><span style="font-family: Courier New; font-size: 10pt;"><span style="color: blue;">Private </span><span style="color: blue;">Declare</span> <span style="color: blue;">Sub</span> CopyMemoryWrite <span style="color: blue;">Lib</span> <span style="color: #a31515;">&#8220;kernel32&#8243;</span> <span style="color: blue;">Alias</span> _<br />
<span style="color: #a31515;">&#8220;RtlMoveMemory&#8221;</span> (<span style="color: blue;">ByVal</span> Destination <span style="color: blue;">As </span><span style="color: blue;">Long</span>, _<br />
</span></p>
<p><span style="font-family: Courier New; font-size: 10pt;"><span style="color: blue;">ByVal</span> Source <span style="color: blue;">As</span> <span style="color: blue;">Long</span>, <span style="color: blue;">ByVal</span> Length <span style="color: blue;">As</span> <span style="color: blue;">Long</span>)</span></p>
<p>Ardından j isimli bir değişken tanımlanarak, p göstericimizin gösterdiği hafıza alanına daha önceden (kodun 26. Satırında) yazdığımız değeri okumaya çalışıyoruz. Bunun içinde yine kernel32.dll kütüphanesinden tanımladığımız fonksiyonumuzu kullanıyoruz.</p>
<p>Sonuç bir mesaj kutusu içerisinde gösteriliyor ve nihayetinde 31. Satırda bu ayrılan hafıza alanı serbest bırakılmaktadır.</p>
<p>Visual basic ile yazılan bu kodun tamamını <a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/WindowsApplication5.rar">bu bağlantıdan</a> indirerek deneyebilirsiniz.</p>

<p class="sayac_bilgi">421 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/02/23/visual-basic-ile-gosterici-pointer-kullanimi/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Sierpinski Üçgeni (Sierpinski Triangle)</title>
		<link>http://www.bilgisayarkavramlari.com/2010/01/29/sierpinski-ucgeni-sierpinski-triangle/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/01/29/sierpinski-ucgeni-sierpinski-triangle/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 14:05:30 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Grafiği (Computer Graphics)]]></category>
		<category><![CDATA[Scheme (Lisp)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/01/29/sierpinski-ucgeni-sierpinski-triangle/</guid>
		<description><![CDATA[Orijinal ismi Sierpiński olan Polonyalı matematikçi tarafından 1915 yılında tanımlanan bu üçgen, yapı olarak özyineli (recursive) iç üçgenlerden oluşur. Kısaca üçgenin her parçası, üç adet alt üçgen oluşturacak şekilde bölünür. Örneğin aşağıdaki eşkenar üçgeni ele alalım: Bu üçgenin üç köşesinde üç ayrı üçgen oluşturarak işlemimize başlayabiliriz. Yukarıdaki şekilde görüldüğü üzere 3 adet siyah eşkenar üçgen [...]]]></description>
			<content:encoded><![CDATA[<p>Orijinal ismi Sierpiński olan Polonyalı matematikçi tarafından 1915 yılında tanımlanan bu üçgen, yapı olarak <a href="http://www.bilgisayarkavramlari.com/2008/08/05/ozyineli-fonksiyonlar-recursive-functions/">özyineli (recursive)</a> iç üçgenlerden oluşur.</p>
<p>Kısaca üçgenin her parçası, üç adet alt üçgen oluşturacak şekilde bölünür.</p>
<p>Örneğin aşağıdaki eşkenar üçgeni ele alalım:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/012910_1405_Sierpinskig1.png" alt="" /></p>
<p>Bu üçgenin üç köşesinde üç ayrı üçgen oluşturarak işlemimize başlayabiliriz.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/012910_1405_Sierpinskig3.png" alt="" /></p>
<p>Yukarıdaki şekilde görüldüğü üzere 3 adet siyah eşkenar üçgen oluştu. Bu üçgenlerin her birisini ilk başta ele aldığımız üçgen gibi bir adım daha ilerleyerek üç parçaya bölmeye çalışalım:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/012910_1405_Sierpinskig5.png" alt="" /></p>
<p>Görüldüğü üzere bölme işlemi sonucunda her alt üçgeninin üç köşesinde, ilk adımda yapılan işleme benzer şekilde 3 ayrı üçgen oluşturulmuştur.</p>
<p>Bu işlem sonsuza kadar devam ettirilebilir. Ancak bilindiği üzere bilgisayar bilimlerinde sonsuz yoktur. Dolayısıyla bu işlem için bir limit belirlenir ve belirlenen limite kadar işlem devam ettirilir.</p>
<p>Sierpinski üçgeninin kodlanması</p>
<p>Yukarıda anlatılan üçgeni, Scheme dilinde programlamaya çalışalım. Bu kodlama sırasında PLT Scheme kullanılacaktır.</p>
<p>Öncelikle gerekli olan bazı bilgilerimizi hatırlayalım. Çizim için draw.ss teachpackinin yüklü olması gerekiyor.</p>
<p>Bunun için Language menüsünden Add Teachpack seçeneğini seçip draw.ss paketini yüklüyoruz.</p>
<p>Ardından basit bir üçgenin scheme ile nasıl çizileceğine bakalım.</p>
<p>Ne yazık ki üçgen çizen hazır bir fonksiyonumuz bulunmuyor. Bunun için üçgeni oluşturan üç ayrı doğruyu ayrı ayrı çizdiren bir fonksiyonu bizim yazmamız gerekiyor.</p>
<p>(define (draw-triangle a b c)( and (draw-solid-line a b)(draw-solid-line b c)(draw-solid-line c a)))</p>
<p>Yukarıdaki draw-triangle fonksiyonu üç ayrı nokta almaktadır. Bu noktaları birleştiren üç ayrı doğruda fonksiyon içerisinde çizilmektedir. Bilindiği üzere draw-solid-line fonksiyonu verilen iki nokta arasında bir doğru çizer. Bu noktalar make-posn yapısında olmalıdır. Örneğin çizim ekranında (ki ekranın sol üst köşesi 0,0 olarak kabul edilir) 100, 150 koordinatlarından 200, 250 koordinatlarına bir doğru çizmek istiyorsak aşağıdaki şekilde komut vermemiz gerekir:</p>
<p>(draw-solid-line (make-posn 100 150) (make-posn 200 250))</p>
<p>Üçgen çizen fonksiyonumuz olduğuna göre artık sirepinski üçgenini kodlamaya geçebiliriz.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/012910_1405_Sierpinskig7.png" alt="" width="514" height="464" /></p>
<p>Kodumuzu yukarıdaki şekilde yazabiliriz. Kodda dikkat edilirse üçgen çizimi sırasında orta nokta bulma yöntemi kullanılmıştır. Buradaki amaç, üçgenin köşelerinde 3 ayrı üçgen elde etme işlemi sırasında üçgenin kenarlarının orta noktalarının birleştirilmesi ile bir ters üçgen oluşturulması olarak düşünülebilir.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/012910_1405_Sierpinskig8.png" alt="" /></p>
<p>Yukarıdaki şekilde de gösterildiği üzere alsında kenarların orta noktalarını birleştiren bir üçgen çizilmektedir.</p>
<p>İşte üçgeni meydana getiren 3 nokta ve bu noktaların oluşturduğu 3 doğru için orta noktalar bulunmakta ve bulunan bu orta noktaları birleştiren yeni bir üçgen çizilmektedir. Bu noktaları bulan kodumuz, yukarıda verilen mid-point fonksiyonudur. Bu mid-point fonksiyonu da, aritmetik ortalama kullanarak, nokta koordinatlarını toplayıp ikiye bölmekte ve bu işlem için yine yukarıdaki kodda verilen mid fonksiyonunu kullanmaktadır.</p>
<p>Ardından üçgenin 3 alt üçgeni yeniden sierpinski üçgeni çizen fonksiyonumuzu yeni noktalar ile verilmektedir.</p>
<p>Sierpinski üçgeninde dikkat edilirse, üçgeni oluştran 3 nokta (a b ve c) dışında ilave olarak bir n parametresi kullanıyoruz. Bu parametrenin amacı, fonksiyonun belirli bir yerde durmasıdır. Bu sayede kullanıcı, işlemimizin kaç adım gidilebileceğini parametre olarak girebilmekte ve belirtilen adım dolduğunda işlem durmaktadır.</p>
<p>Yukarıdaki kodun çalıştırılması aşağıdaki şekilde olabilir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/012910_1405_Sierpinskig10.png" alt="" /></p>
<p>Görüldüğü üzere, üçgenin içerisine çizileceği üç nokta belirlenmiştir. Burada noktaları belirlerken, üçgenin eşkenar üçgen olması için ufak bir hesaplama yapılmıştır. Çizim tuvalimiz, 400 400 olarak verilmiş yani bize ekranda 400e 400 pixellik (imgecik) bir alan açılmaktadır. Bu alanı nispeten ortalayan bir üçgende A B ve C noktalarının birleştirilmesi ile teşekkül etmiş olur.</p>
<p>Son olarak sierpinski üçgenini çizen <a href="http://www.bilgisayarkavramlari.com/2008/08/05/ozyineli-fonksiyonlar-recursive-functions/">özyineli (recursive) fonksiyonumuzu</a> bu üç noktanın koordinatları ve 10 adım gidileceğini belirten 10 sabit sayısı ile çağırıyoruz.</p>
<p>Sonuç olarak ekrana çizilen görüntü aşağıdaki şekildedir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/012910_1405_Sierpinskig11.png" alt="" /></p>
<p>Yukarıdaki şekilde, 10 adım ilerlenmiş ve 10 adım sonunda detaylı bir görüntü oluşmuştur. Örneğin aynı üçgeni 3 parametresi ile, yani 3 adım ilerleyecek şekilde çağırsaydık:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/012910_1405_Sierpinskig12.png" alt="" /></p>
<p>Yukarıda verilen biraz daha ilkel halini görecektik.</p>

<p class="sayac_bilgi">657 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/01/29/sierpinski-ucgeni-sierpinski-triangle/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>C ile Programlamaya Giriş Quiz Soruları ve Çözümleri</title>
		<link>http://www.bilgisayarkavramlari.com/2010/01/13/c-ile-programlamaya-giris-quiz-sorulari-ve-cozumleri/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/01/13/c-ile-programlamaya-giris-quiz-sorulari-ve-cozumleri/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 13:03:58 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Kod Örnekleri]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>
		<category><![CDATA[Sınavlar]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/01/13/c-ile-programlamaya-giris-quiz-sorulari-ve-cozumleri/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Soru 1) Bir dosyaya isminizi yazdırınız. Çözüm 1) dosyaya ismimizi yazdıran kodu aşağıdaki şekilde yazabiliriz: Yukarıdaki kodda dikkat edilecek bir husus, dosyanın &#8220;r&#8221; değil &#8220;w&#8221; şekliyle açılması ve dosyanın mutlaka kapatılmasıdır. Bilindiği üzere kapatılmayan dosyalara yazıldığından kesin olarak emin olamayız ve dosya kapatılmadıysa içerisine bilgi yazılmamış olabilir. Yukarıdaki kod çalıştırıldıktan [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Soru 1) Bir dosyaya isminizi yazdırınız.</p>
<p>Çözüm 1) dosyaya ismimizi yazdıran kodu aşağıdaki şekilde yazabiliriz:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/011310_1303_CileProgram1.png" alt="" /></p>
<p>Yukarıdaki kodda dikkat edilecek bir husus, dosyanın &#8220;r&#8221; değil &#8220;w&#8221; şekliyle açılması ve dosyanın mutlaka kapatılmasıdır. Bilindiği üzere kapatılmayan dosyalara yazıldığından kesin olarak emin olamayız ve dosya kapatılmadıysa içerisine bilgi yazılmamış olabilir.</p>
<p>Yukarıdaki kod çalıştırıldıktan sonra aynı dizin içerisinde &#8220;dosya.txt&#8221; isimli bir dosya oluşturulur ve bu dosyanın wordpad benzeri bir programla açılması durumunda içinde ismimizin yazdığını görebiliriz.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/011310_1303_CileProgram2.png" alt="" /></p>
<p>Soru 2) Klavyeden okunan bir sayının asal çarpanlarını ekrana basan kodu yazınız.</p>
<p>Çözüm 2)</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/011310_1303_CileProgram3.png" alt="" /></p>
<p>Yukarıdaki kodda görüldüğü üzere önce bir sayı okunmuş (kodun 7. Satırı) ardından bir döngü içerisinde, 2&#8242;den başlayarak bütün sayılara bu girilen sayıyı bölme denenmiştir. For döngüsünün (8. Satır) koşulu, sayının 1&#8242;den büyük olmasıdır. Dolayısıyla sayı 1 olunca yani bütün asal sayılara bölümü tamamlanınca çalışma duracaktır.</p>
<p>Yukarıdaki kodda bulunan iç döngü (9. Satırdaki while döngüsü) ise bir asal sayının birden fazla kere bölme ihtimaline karşı yazılmıştır. Örneğin 60 girdisi için 2 asal sayısı, 2 kere bölebilir. Bu durumda bir sonraki asal sayı ile deneme yapılmadan önce, şu anda bölmeyi denediğimiz asal sayı ile bölünmeyinceye kadar deneme yapıyoruz.</p>
<p>Kodun 11. Satırında ise, denediğimiz sayının, girilen sayıyı tam bölmesi durumunda bölerek sayıyı küçültüyor ve başarılı olarak bölebildiğimiz bu sayıyı bir çarpan olarak ekrana yazıyoruz.</p>
<p>Kodun örnek çalışması aşağıdaki şekildedir.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/011310_1303_CileProgram4.png" alt="" /></p>
<p>Soru 3) Bir dizgideki kelime sayısını ekrana bastıran kod yazınız.</p>
<p>Çözüm 3)</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/011310_1303_CileProgram5.png" alt="" /></p>
<p>Soruda, girilen bir <a href="http://www.bilgisayarkavramlari.com/2008/08/02/dizgi-string/">dizgideki (String)</a> kelime sayısının saydırılması istendiği için, dizginin scanf ile okunması mümkün değildir. Bilindiği üzere scanf tek bir kelime okur ve bu durumda işe yaramaz. Birden fazla kelimenin boşlukları ile okunması istenen durumda gets fonksiyonu kullanılabilir. Yukarıdaki kodun 6. Satırında da bu şekilde dizgi okunmuştur. Ardından dizgide bulunan boşluklar dizgi sonuna kadar saydırılmıştır. Dizgi sonu kontrolü 8. Satırda bulunan for döngüsünde yapılırken, dizgi içerisinde o anda bakılan karakterin boşluk karakteri olup olmadığı 9. Satırdaki if kontrolü ile yapılmıştır. Şayet boşluk karakteri ise, kelimesayısı değişkeni 1 arttırılmıştır.</p>
<p>Basitçe hesaplanacağı üzere, bir dizgideki boşluk sayısı, kelime sayısından 1 eksik olur. Bu problemin çözümü için kelimesayısı değişkeni 0 yerine 1&#8242;den başlatılmıştır.</p>
<p>Kodun çalışan hali aşağıda verilmiştir.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/011310_1303_CileProgram6.png" alt="" /></p>
<p>Soru 4) Bir dizgideki en uzun kelimeyi bularak ekrana bastıran kodu yazınız</p>
<p>Çözüm 4)</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/011310_1303_CileProgram7.png" alt="" /></p>
<p>Yukarıdaki kod, 3. Sorudaki koda benzer şekilde, dizgi sonuna kadar bütün karakterleri kontrol etmekte ve boşluk karakterlerinde kodun 15. Satırında bulunan if kontrolüne girmektedir. Bu kodda farklı olan bir özellik, iki adet <a href="http://www.bilgisayarkavramlari.com/2007/05/03/pointer-gosterici/">karakter göstericisi (character pointer) </a>ile dizgi üzerinde işaretleme yapılmasıdır.</p>
<p>Bu göstericilerden kelimebasi isimli gösterici, o ana kadar bulunan en uzun kelimeyi göstermekte, yenikelime göstericisi ise, üzerinden geçilen son kelimeyi göstermektedir.</p>
<p>Kodun çalışmasını aşağıdaki şekilde anlayabiliriz:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/011310_1303_CileProgram8.png" alt="" /></p>
<p>Yukarıda gösterildiği üzere, ilk başta iki gösterici de dizginin ilk karakterini göstermektedir. Ayrıca kelimeboyu ve yeniboy değişkenlerinin değeri 0&#8242;dır.</p>
<p>Ardından kodumuz döngü içerisinde karakter karakter ilerlemekte ve ilk boşluğu gördüğü anda aşağıdaki şekilde yeni kelim değişkeni hareket ettirilmektedir.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/011310_1303_CileProgram10.png" alt="" /></p>
<p>İlk boşluğa gösterici hareket ettirildikten sonra boşluğa kadar olan harf sayısı sayılmakta ve yeniboy 3 olmaktadır.</p>
<p>Tekrar bir boşluk karakterine kadar göstericimiz hareket eder:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/011310_1303_CileProgram12.png" alt="" /></p>
<p>Bulduğumuz yeni kelimenin boyu 4 olduğu ve şimdiye kadar bulduğumuz en uzun kelimeden daha uzun olduğu için kelimebasi göstericisini ilerletiyor ve yukarıdaki şekilde bulunan yeni kelimenin ilk karakterine atıyoruz, ayrıca yenikelime göstericisi, mevcut konuma ilerletiliyor ve bir sonraki kelimenin aranmasında kullanılıyor.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/011310_1303_CileProgram14.png" alt="" /></p>
<p>Yeni bulunan kelime boyu, o ana kadar bulunan kelime boyundan daha küçük olduğu için kelimebasi değişkenimiz hala o ana kadar bulunmuş en uzun kelimeyi göstermeye devam ediyor.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/011310_1303_CileProgram16.png" alt="" /></p>
<p>Bir önceki örnekte olduğu gibi, bulunan yeni kelimenin boyutu, ilk kelimeden büyük olmadığı için değişkenimiz ilerlemiyor.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/011310_1303_CileProgram18.png" alt="" /></p>
<p>Son olarak bulduğumuz yeni kelimenin boyu, şimdiye kadar bulunan kelimelerden uzun olduğu için, göstericiyi ilerletiyor ve kelimebasi olara bu kelimenin ilk harfini gösteriyoruz. Sonuçta dizgi sonuna kadar giderken, anlık olarak bir kelimenin boyutu değişkende tutuluyor, bir kelimenin boyutunun bu değişkende tutulan boyuttan daha uzun olması durumunda bu kelimeyi gösteren bir gösterici işaretleniyor ayrıca bu yeni kelimenin boyutu, elimizde o ana kadar bulunan en uzun kelime boyutu olarak tutuluyor.</p>
<p>Kodun çıktısı aşağıdaki şekildedir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/011310_1303_CileProgram20.png" alt="" /></p>
<p>Soru 5) Kullanıcıdan bir sayı okuyarak, okunan bu sayı boyutlarında bir kare matrisi, her hücresine, en yakın kenara olan uzaklığı ile doldurunuz.</p>
<p>Çözüm 5)</p>
<p>Soruda her hücreye, en yakın kenara olan uzaklık yazılması istenmiş, bu durumda örneğin 5&#215;5 boyutunda bir matris için aşağıdaki şekilde veri girilmesi gerekir:</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width: 22px;"></col>
<col style="width: 22px;"></col>
<col style="width: 25px;"></col>
<col style="width: 22px;"></col>
<col style="width: 25px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
</tr>
</tbody>
</table>
</div>
<p>Görüldüğü üzere kenar değerlerine 1 , bir içerdeki hücrelere 2 ve en ortadaki hücreye 3 yerleştirilmesi istenmiş.</p>
<p>Bu dorunun çözümünde sadece döngüler kullanılarak bir döngünün kenara olan uzaklığı hesaplanıp ekrana yazdırılabilir. Bu yöntemin çözümü aşağıdaki şekildedir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/011310_1303_CileProgram21.png" alt="" /></p>
<p>Yukarıdaki kodda görüldüğü üzere, her hücre için, hücrenin kenara olan 4 farklı uzaklığı hesaplanmıştır. Bu değerlerden iki tanesi, koordinatları olan i ve j değerleridir ki bu değerler, sol kenara ve üst kenara olan uzaklık olarak düşünülebilir.</p>
<p>Ayrıca sağ kenar ve alt kenara olan uzaklıkların hesaplanması kodun 20. Ve 21. Satırlarında bulunan a ve b değişkenleri ile yapılmıştır. Matrisin boyutundan koordinat çıkarılmış ve 1 ilave edilmiştir.</p>
<p>Sonuçta elimizde 4 farklı kenara olan 4 farklı uzaklık bulunmaktadır. Bizden istenen bu uzaklıklardan en küçüğünü ekrana basmamız. Bu durumda kodun 4-13 satırları arasında bulunan ve verilen 4 sayıdan en küçüğünü döndüren fonksiyonu çağırarak bu 4 uzaklıktan en küçüğünü bulabiliriz.</p>
<p>Kodun çalışan hali aşağıdaki şekildedir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/011310_1303_CileProgram22.png" alt="" /></p>

<p class="sayac_bilgi">2,800 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/01/13/c-ile-programlamaya-giris-quiz-sorulari-ve-cozumleri/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>

