<?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; Derleyiciler</title>
	<atom:link href="http://www.bilgisayarkavramlari.com/category/derleyiciler/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>Lisan-ı Kaime (Dillerde Dik Açı, Orthogonal Languages)</title>
		<link>http://www.bilgisayarkavramlari.com/2011/09/14/lisan-i-kaime-dillerde-dik-aci-orthogonal-languages/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/09/14/lisan-i-kaime-dillerde-dik-aci-orthogonal-languages/#comments</comments>
		<pubDate>Wed, 14 Sep 2011 19:02:18 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Derleyiciler]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2011/09/14/lisan-i-kaime-dillerde-dik-aci-orthogonal-languages/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Özellikle bilgisayar programlama dillerinde kullanılan bir terimdir. Buna göre dillerde bulunan özelliklerin birbirine dik olması, yani birbirinden bağımsız olması kast edilir. Kelime olarak, yöneylerin (vectors) dikliğinden esinlenilmiştir. Vektörlerin birbirine dik olması, aralarında ilişki bulunmaması (birbirine iz düşümünün sıfır olması) anlamına gelmektedir. Şayet bir dilde bulunan özellikler arasında da ilişki bulunmuyorsa, [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Özellikle bilgisayar programlama dillerinde kullanılan bir terimdir. Buna göre dillerde bulunan özelliklerin birbirine dik olması, yani birbirinden bağımsız olması kast edilir. Kelime olarak, yöneylerin (vectors) dikliğinden esinlenilmiştir. Vektörlerin birbirine dik olması, aralarında ilişki bulunmaması (birbirine iz düşümünün sıfır olması) anlamına gelmektedir. Şayet bir dilde bulunan özellikler arasında da ilişki bulunmuyorsa, dilin özelliklerinin genişlemiş olduğu düşünülebilir.</p>
<p>Örneğin değişken tipleri olarak tamsayı (integer) ve küsurlu sayının (float) bulunduğu bir dil ve <a href="http://www.bilgisayarkavramlari.com/2008/10/12/c-dilinde-operatorler/">işlem(operator)</a> olarak <a href="http://www.bilgisayarkavramlari.com/2007/10/16/pointer-gosterici-2/">dizi (array) ve işaretçi (pointer)</a> bulunduğu bir dili ele alalım. Bu dildeki 2 değişken tipi ve iki işlem şekli, şayet kaime arz ediyorsa, bu durumda bir işaretçi, tamsayı veya küsurlu sayıyı gösterebilmektedir. Benzer şekilde dizinin elemanları işaretçi olabilmekte ve işaretçi de diziye işaret edebilmektedir.</p>
<p>Şayet dilde, kaime bulunmasaydı, örneğin dizi işlemi, sadece küsurlu sayılar üzerinde çalışıyor olsaydı, bu durumda dildeki esneklik büyük ölçüde kaybedilmiş olacak ve örneğin tam sayı dizisi bulunmayacağı gibi, tam sayı dizisine işaret eden bir işaretçi veya her elemanı işaretçi olan bir tamsayı dizisi de kullanılamayacaktı.</p>
<p>C dilinde toplama işlemi (+) bulunmakta ve lisan-ı kaime gereği mümkün olduğunca değişken yapısından bağımsız tutulmaktadır.</p>
<p>Örneğin,</p>
<p>a+b şeklindeki bir işlemde, C dili, a ve b değişken değerlerini alıp <a href="http://www.bilgisayarkavramlari.com/2008/11/07/rastgele-erisilebilir-bellek-random-access-memory-ram/">hafızaya yükledikten</a> sonra toplama işlemini yine hafızada tutmaktadır.</p>
<p>Yukarıdaki bu örnekte, a ve b değerleri, herhangi bir değişken tipinde olabilir. Örneğin tam sayı (int) veya karakter (char) yapısında olmasının bir mahsuru yoktur.</p>
<p>Ayrıca yukarıdaki a ve b değerleri birer <a href="http://www.bilgisayarkavramlari.com/2007/05/03/pointer-gosterici/">işaretçi (pointer)</a> da olabilir.</p>
<p>Örneğin;</p>
<pre>
int *a ;
int x[10];
a = x;
int b = 4;
a = a + b;</pre>
<p>şeklindeki kodun anlamı, a işaretçisinin gösterdiği mevcut yerin 4 sonraki adresini göstermesidir. Buna göre, x dizisinin 4. elemanına işaret etmektedir. Yukarıdaki bu özellik, C dilinde bulunan ve işaretçi ile dizi ve değişken tipleri arasında bulunan diklik özelliğine istinat edilebilir.</p>
<p>Bir dilde diklik özelliğinin fazla olması, dildeki kodlamayı kolaylaştırır ve dilin öğrenilmesini basit hale getirir. Örneğin işaretçi kullanmayı öğrenen birisi yukarıdaki bu işlemleri ilave bir kural öğrenmeksizin kodlayabilir. Şayet diklik özelliği az olsaydı, bu durumda dili öğrenen veya kodlayan kişilerin istisna kurallarını da öğrenmesi gerekecekti. Örneğin ingilizce öğrenen birisi, fiillerin sonuna –ed eki getirerek geçmiş zaman yapılacağını öğrenir, ancak bunun istisnası olan kelimeleri de öğrenmek zorundadır. Şayet istisnası hiç olmasaydı, dili öğrenmek ve kullanmak çok daha kolay olacaktı.</p>
<p>Bir dildeki diklik özelliğinin çok fazla olması da sakıncalıdır. Aşırı derecede diklik içerilmesi halinde, dili çalıştıracak bir <a href="http://www.bilgisayarkavramlari.com/2008/01/03/derleyici-compiler/">derleyicinin (compiler)</a> geliştirilmesi imkansızlaştığı gibi kodu kullanan kişilerinde hata yapma ihtimali artar.</p>
<p>Örneğin C dilinde iki tip veri birliktelik ilişkisi bulunmaktadır (data associativity). Bunlar <a href="http://www.bilgisayarkavramlari.com/2007/10/16/pointer-gosterici-2/">diziler (array)</a> ve kayıtlardır (records, C dilinde özel olarak <a href="http://www.bilgisayarkavramlari.com/2007/11/08/olusum-composition-ve-struct-yapilar/">yapı (struct)</a> ismi ile geçer). C dilinde bulunan fonksiyonlar, iki tipte de parametre alırken, sadece kayıt tipinde veri döndürebilmektedir. Dizi tipinde döndürmesi mümkün değildir. Bu durum dilin diklik özelliğine uymadığı gibi, dilde bulunan bu özelliklere de diklik eklenmesi halinde, hafıza yönetimi (Dizi boyutunun kestirilmesi) ve hafızanın ihalili gibi pek çok problemi, kodu yazan kişinin kontrol etmesi gerekecekti. Çözüm olarak, C dilinin tasarımı sırasında, bu özelliklere diklik getirilmemiştir.</p>

<p class="sayac_bilgi">211 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/09/14/lisan-i-kaime-dillerde-dik-aci-orthogonal-languages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kod Kelimesi</title>
		<link>http://www.bilgisayarkavramlari.com/2011/04/19/kod-kelimesi/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/04/19/kod-kelimesi/#comments</comments>
		<pubDate>Tue, 19 Apr 2011 10:50:56 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Derleyiciler]]></category>
		<category><![CDATA[Network(Ağ)]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>
		<category><![CDATA[Veri Güvenliği(Cryptography)]]></category>
		<category><![CDATA[Veri Sıkıştırma (Data Compression)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2011/04/19/kod-kelimesi/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Haberleşmede kullanılan bir terimdir. Bir kod kelimesi (code word), belirli bir teşrifatın (protocol, protokol) anlamlı en küçük parçasıdır. Her kod kendi başına tek bir anlam ifade eder ve bu anlam yeganedir (unique). Aynı yaklaşım programlama dilleri için de geçerlidir. Her programlama dilinde bulunan her kelime tek bir anlam ifade eder. [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER
</p>
<p>Haberleşmede kullanılan bir terimdir. Bir kod kelimesi (code word), belirli bir <a href="http://www.bilgisayarkavramlari.com/2009/08/22/3317/">teşrifatın (protocol, protokol)</a> anlamlı en küçük parçasıdır. Her kod kendi başına tek bir anlam ifade eder ve bu anlam yeganedir (unique).
</p>
<p>Aynı yaklaşım programlama dilleri için de geçerlidir. Her programlama dilinde bulunan her kelime tek bir anlam ifade eder.
</p>
<p>Örneğin bir programlama dilindeki &#8220;if&#8221; kelimesi, bu dildeki <a href="http://www.bilgisayarkavramlari.com/2008/01/03/derleyici-compiler/">kaynak kodda bulunan (source code)</a> kod kelimesidir (code word).
</p>
<p>Benzer durum herhangi bir haberleşme teşrifatında da olabilir.
</p>
<p>Kod kelimeleri kullanıldıkları yere göre kanal kelimeleri (channel code words) veya kaynak kelimeleri (source code words) olarak isimlendirilebilir. İlki haberleşme ikincisi ise programlama tabiridir.
</p>
<p>Ancak kavramsal olarak kaynak kelimelerinin veri sıkıştırma (data compression) veya veri güvenliği (cryptography) gibi alanlarda kullanılması da mümkündür. Örneğin uzun bir kelimeyi, daha kısa bir kelime ile ifade etmenin anlamı, bu kelimenin yerine geçen bir kaynak kod kullanılmasıdır.
</p>
<p>Benzer şekilde kanal kodları, gürültülü ortamlarda veri iletişimini güvenli hale getirmek için gereksiz ilave bilgiler içerebilir. Yani kod kelimeleri, yerine kullanıldıkları anlamdan uzun veya kısa olabilmektedirler.
</p>
<p>Veri güvenliği açısından da bir kod kelimesi, yerine kullanıldığı kelimeye dönüşü sadece belirli kişiler tarafından yapılabilen şifreli metindir. </p>

<p class="sayac_bilgi">197 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/04/19/kod-kelimesi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mealy ve Moore Makineleri (Mealy and Moore Machines)</title>
		<link>http://www.bilgisayarkavramlari.com/2011/01/26/mealy-ve-moore-makineleri-mealy-and-moore-machines/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/01/26/mealy-ve-moore-makineleri-mealy-and-moore-machines/#comments</comments>
		<pubDate>Wed, 26 Jan 2011 11:02:02 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Automata (otomatlar, özdevinirler)]]></category>
		<category><![CDATA[Bilgisayar Kavramları]]></category>
		<category><![CDATA[Derleyiciler]]></category>
		<category><![CDATA[Donanım ( Hardware )]]></category>
		<category><![CDATA[graf teorisi (graph theory, çizge kuramı)]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>
		<category><![CDATA[veri yapıları]]></category>
		<category><![CDATA[yapay zeka (artificial intelligence)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2011/01/26/mealy-ve-moore-makineleri-mealy-and-moore-machines/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde sıkça kullanılan sonlu durum makinelerinin (finite state machine, FSM veya Finite State Automaton , FSA) gösteriminde kullanılan iki farklı yöntemdir. Genelde literatürde bir FSM&#8217;in gösteriminde en çok moore makinesi kullanılır. Bu iki yöntem (mealy ve moore makinaları) sonuçta bir gösterim farkı olduğu için bütün mealy gösterimlerinin moore ve [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar bilimlerinde sıkça kullanılan sonlu durum makinelerinin <a href="http://www.bilgisayarkavramlari.com/2007/12/25/sonlu-durum-makinasi-finite-state-machine-finite-state-automaton/">(finite state machine, FSM</a> veya <a href="http://www.bilgisayarkavramlari.com/2008/08/02/sonlu-ototmatlar-finite-automaton/">Finite State Automaton , FSA</a>) gösteriminde kullanılan iki farklı yöntemdir. Genelde literatürde bir FSM&#8217;in gösteriminde en çok moore makinesi kullanılır. Bu iki yöntem (mealy ve moore makinaları) sonuçta bir gösterim farkı olduğu için bütün mealy gösterimlerinin moore ve bütün moore gösterimlerinin mealy gösterimine çevrilmesi mümkündür.</p>
<p>Klasik bir FSM&#8217;de bir giriş bir de çıkış bulunur (input / output). Bu değerlerin nereye yazılacağı aslında iki makine arasındaki farkı belirler.</p>
<p>Moore makinelerinde çıkış değerleri <a href="http://www.bilgisayarkavramlari.com/2008/08/01/dugum-node/">düğümlere (node</a>) yazılırken, giriş değerleri kenarlar (edges) üzerinde gösterilir.</p>
<p>Mealy makinelerinde ise giriş ve çıkış değerleri kenarlar (edges) üzerinde aralarına bir taksim işareti (slash) konularak gösterilir. Örneğin 1/0 gösterimi, girişin 1 ve çıktının 0 olduğunu ifade eder.</p>
<p>Basit bir örnek olarak <a href="http://www.bilgisayarkavramlari.com/2008/03/13/ozel-veya-exclusive-or-farklilik-operatoru/">özel veya (exclusive or, <span style="font-family: Symbol;">Ä</span>)</a> işlemini ele alalım ve her iki makine gösterimi ile de çizmeye çalışalım.</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 66px;"></col>
<col style="width: 57px;"></col>
<col style="width: 47px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: solid 0.5pt;">Girdi 1</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;">Girdi 2</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;">Çıktı</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;">0</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;">0</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;">0</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;">0</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;">1</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;">1</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;">1</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;">0</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;">1</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;">1</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;">1</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;">0</td>
</tr>
</tbody>
</table>
</div>
<p>Klasik bir XOR kapısı, yukarıdaki <a href="http://bilgisayarkavramlari.com/2007/12/08/dogruluk-cizelgesi-truth-table/">doğruluk çizelgesinde (truth table)</a> gösterildiği üzere iki giriş ve bir çıkıştan oluşur. Bizim makinemiz de ilk girdiden sonra ikinci girdiyi aldığında beklenen çıktıyı vermeli. Ayrıca makine sürekli olarak çalışmaya devam edecek. Örneğin 101011 şeklinde bir veri akışı sağlanması durumunda, sonuç olarak 1<span style="font-family: Symbol;">Ä</span>0<span style="font-family: Symbol;">Ä</span>1<span style="font-family: Symbol;">Ä</span>0<span style="font-family: Symbol;">Ä</span>1<span style="font-family: Symbol;">Ä</span>1 değerini hesaplamasını isteriz.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/012611_1102_MealyveMoor1.png" alt="" /></p>
<p>Yukarıdaki gösterim bir mealy makinesidir. Makinede görüldüğü üzere 3 farklı durum arasındaki geçişler üzerine iki adet değer yazılmıştır. Bu değerlerden ilki giriş ikincisi ise çıkış değeridir.</p>
<p>Makineyi beraber okumaya çalışalım.</p>
<p>Makinenin boşluktan bir ok ile başlayan durumu, yani örneğimizdeki S0 durumu, başlangıç durumudur. Bu durumdan başlanarak gelen değerlere göre ilgili duruma geçilir.</p>
<p>Örneğimizi hatırlayalım. Giriş olarak 101011 <a href="http://www.bilgisayarkavramlari.com/2008/08/02/dizgi-string/">dizgisini (string)</a> almayı planlamıştık. Bu durumda ilk bitimiz 1 olarak geliyor ve S0 durumunda 1 girişi ile S2 durumuna geçiyoruz. Burada geçiş sırasında kullanılan kenarın üzerindeki değeri okuyalım: 1/0 bunun anlamı 1 geldiğinde geçilecek kenar olması ve çıktının 0 olmasıdır. Yani şu anda çıktımız 0</p>
<p>Ardından gelen değer 0 (yani şimdiye kadar 01 değerleri geldi). En son makinemizdeki durum, S2 durumuydu, şimdi yeni gelen değeri bu durumdaki kollardan takip ediyor ve S1&#8242;e giden 0/1 kenarını izliyoruz. Bu kolu izleme sebebimiz, S2 durumundan gidilen tek 0 girdisi kolu olmasıdır. Bu kol üzerindeki ikinci değer olan 1 ise, çıktının 1 olduğudur. Yani buraya kadar olan girdiyi alacak olsaydık 01 için 1 çıktısı alacaktık.</p>
<p>İşlemlere devam edelim ve durumları yazmaya çalışalım:</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 56px;"></col>
<col style="width: 57px;"></col>
<col style="width: 41px;"></col>
<col style="width: 56px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: solid 0.5pt;">Gelen Değer</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;">Durum</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;">Çıkış</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;">Yeni Durum</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;">1</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;">S0</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;">0</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;">S2</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;">0</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;">S2</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;">1</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;">S1</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;">1</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;">S1</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;">1</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;">S2</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;">0</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;">S2</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;">1</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;">S1</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;">1</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;">S1</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;">1</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;">S2</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;">1</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;">S2</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;">0</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;">S2</td>
</tr>
</tbody>
</table>
</div>
<p>Yukarıdaki tablomuzun son halinde, çıkış değeri olarak 0 okunmuştur. Yani örneğimizin neticesi 0 olacaktır.</p>
<p>Aynı örneği moore makinesi olarak tasarlayacak olsaydık:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/012611_1102_MealyveMoor2.png" alt="" /></p>
<p>Moore makinesinde, mealy makinesine benzer şekilde boşluktan gelen bir ok, başlangıç durumunu belirtir.</p>
<p>Makinenin, durumlarında, mealy makinesinde olmayan değerler eklenmiştir. Bu değerler, ilgili durumdaki çıktıyı gösterir. Örneğin makinemiz S1 durumundayken çıktı 0 olarak okunabilir.</p>
<p>Şimdi moore makinesinde, aynı örneği çalıştırıp sonucu karşılaştıralım.</p>
<p>Giriş olarak 101011 <a href="http://www.bilgisayarkavramlari.com/2008/08/02/dizgi-string/">dizgisini (string)</a> almayı planlamıştık. Bu durumda ilk bitimiz 1 olarak geliyor ve S0 durumunda 1 girişi ile S2 durumuna geçiyoruz. Bu geçiş sonucunda geldiğimiz S2 durumunda okunan çıktı değeri 0 yani sonuç şimdilik 0.</p>
<p>Ardından gelen 0 değeri ile S3 durumuna geçiyoruz ve çıktımız 1 oluyor. Çünkü S3 durumu 1 çıktısı veren durumdur. Bu şekilde durumları ve durumlar arasındaki geçişleri izlersek, aşağıdaki tabloyu çıkarabiliriz:</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 56px;"></col>
<col style="width: 57px;"></col>
<col style="width: 41px;"></col>
<col style="width: 56px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: solid 0.5pt;">Gelen Değer</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;">Durum</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;">Çıkış</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;">Yeni Durum</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;">1</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;">S0</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;">0</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;">S2</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;">0</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;">S2</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;">1</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;">S3</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;">1</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;">S3</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;">1</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;">S4</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;">0</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;">S4</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;">1</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;">S3</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;">1</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;">S3</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;">1</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;">S4</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;">1</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;">S4</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;">0</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;">S2</td>
</tr>
</tbody>
</table>
</div>
<p>Görüldüğü üzere, makinemiz, örnek girdi için S2 durumunda sonlanıyor ve bu durumda çıktımız 0 olarak okunuyor.</p>

<p class="sayac_bilgi">812 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/01/26/mealy-ve-moore-makineleri-mealy-and-moore-machines/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Preprocessor (Ön işlem)</title>
		<link>http://www.bilgisayarkavramlari.com/2010/12/30/preprocessor-on-islem/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/12/30/preprocessor-on-islem/#comments</comments>
		<pubDate>Wed, 29 Dec 2010 23:19:30 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Derleyiciler]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/12/30/preprocessor-on-islem/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde, işlemcideki çalışmadan önce yapılacak işleri ifade etmek için kullanılan bir terimdir. Çoğu programlama dili açısından, programın çalışması aşamasına geçilmeden önce (run-time) yapılacak işleri belirtir. Genellikle bir betik (macro) şeklinde kayıtlı olarak dosyada duran ve programın derlenmesi aşamasından (compile time) önce veya sonra, ama çalıştırılmadan önce yapılan işleri ifade [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar bilimlerinde, işlemcideki çalışmadan önce yapılacak işleri ifade etmek için kullanılan bir terimdir. Çoğu programlama dili açısından, programın çalışması aşamasına geçilmeden önce (run-time) yapılacak işleri belirtir.</p>
<p>Genellikle bir betik (macro) şeklinde kayıtlı olarak dosyada duran ve programın <a href="http://www.bilgisayarkavramlari.com/2008/01/03/derleyici-compiler/">derlenmesi aşamasından (compile time)</a> önce veya sonra, ama çalıştırılmadan önce yapılan işleri ifade eder.</p>
<p>En çok kullanıldığı yerlerden birisi C dilidir. C dilindeki # işaretiyle başlayan satırların tamamı ön işlem komutlarıdır.</p>
<p>Örneğin  &#8220;#include &lt;stdio.h&gt;&#8221; satırı, kodun derlenmesi aşamasından önce, kodun satırları işlenmeden önce, stdio kütüphanesini (standart input output) sisteme dahil eder.</p>
<p>Bu sayede stdio kütüphanesinde bulunan örneğin printf gibi fonksiyonları kullanabiliriz.</p>
<p>C dilindeki diğer bir ön işlem ise #define satırıdır. Örneğin</p>
<p>#define PI 3</p>
<p>Şeklindeki bir satırdan sonra, kodumuzdaki bütün PI değişkeni geçen değerler 3 olarak kabul edilir. Aslında buradaki işlem, derleme aşamasına geçilmeden önce, koddaki bütün PI ifadelerini 3 değeri ile değiştirmek anlamındadır.</p>
<p>Diğer meşhur ön işlem satırlarından birisi de #ifndef ve #endif ikilisidir. Özellikle bir başlık dosyasının (header file) kodlamasında kullanılan bu satırlar, şayet daha öncede tanımlı bir değer bulunmuyorsa ifndef satırı altına geçilmesini sağlar. Özellikle birden fazla yerden aynı anda #include edilen kütüphanelerde redefinition (tekrar tanımlama) hatasına düşmemek için kullanılır.</p>
<p>Örneğin bir header (.h) dosyası yazmak istiyoruz ve ismi de diyelim ki BilgisayarKavramları.h olsun. Bu dosyanın içerisinde tek satır bulunsun ve :</p>
<p>int a = 10;</p>
<p>yazıyor olsun. BilgisayarKavramları.h dosyasını her include eden dosyada a değişkeni otomatik olarak tanımlı olacaktır. Bu durumda örneğin X.c dosyamızdan include edilen bir BilgisayarKavramları.h bulunsun bir de Y.h dosyasından benzer şekilde include edilme söz konusu olsun.</p>
<p>Şayet X.c dosyası ilave olarak Y.h dosyasını da include ederse, bu durumda X.c dosyası, Y.h içerisinde bulunan BilgisayarKavramları.h dosyasını da include etmiş olacak. Bu problemin çözümü için BilgisayarKavramları.h dosyasının içeriğini tek seferde çalışacak şekilde ayarlamamız gerekiyor. Bunu da derleyicinin, dosya içeriğine sadece bir kere girmesini sağlayan ifndef satırı ile yapıyoruz. Bu durumda dosyamızın içeriği aşağıdaki şekilde olabilir:</p>
<p>#ifndef BilgisayarKavramları</p>
<p>#define BilgisayarKavramları</p>
<p>int a = 10;</p>
<p>#endif</p>
<p>Yukarıdaki yeni dosyada, ilk include işleminden sonra BilgisayarKavramları değeri artık tanımlı olacak ve diğer include edilme durumlarında bir daha ifndef satırı geçilmeyerek a değişkenin tek sefer tanımlanması sağlanacaktır.</p>

<p class="sayac_bilgi">152 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/12/30/preprocessor-on-islem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tek atama dili (single assignment language)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/12/03/tek-atama-dili-single-assignment-language/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/12/03/tek-atama-dili-single-assignment-language/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 07:33:27 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Derleyiciler]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/12/03/tek-atama-dili-single-assignment-language/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde kullanılan bir programlama dili tipidir. Bu dilde herhangi bir değişkene yalnızca bir kere atama yapılabilir. Literatürde sasl (single assignment language, tek atamalı diller) olarak geçen dil bu tipe bir örnektir. Ayrıca C dilinden esinlenerek hazırlanmış ve C yazım kuralları ile uyumlu sacl (single assignment C language) dili de [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar bilimlerinde kullanılan bir programlama dili tipidir. Bu dilde herhangi bir değişkene yalnızca bir kere atama yapılabilir. Literatürde sasl (single assignment language, tek atamalı diller) olarak geçen dil bu tipe bir örnektir.</p>
<p>Ayrıca C dilinden esinlenerek hazırlanmış ve C yazım kuralları ile uyumlu sacl (single assignment C language) dili de bir örnek olabilir.</p>
<p>Dillerin bu şekilde tasarlanmasındaki amaç, dilin derlenmesi sırasında belirli bir performans artışı sağlama kaygısıdır. Ayrıca paralel (parallel computing) ve çok işlemcili (multi processor) ortamlarda da hız artışı hedeflenir.</p>
<p>Bu konuda performans kaygısı ile geliştirilen farklı dil grupları da bulunur. Örneğin sıfır atamalı diller (zero assignment languages), içerisinde hiçbir değişkene atama operatörü bulunmayan dillerdir. Bu tip dillerde fonksiyonlar üzerinden atama yapılır.  Yani dilde değişken yoktur, sadece fonksiyon çağrılarak değişken benzeri işlemler yapılır.</p>

<p class="sayac_bilgi">70 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/12/03/tek-atama-dili-single-assignment-language/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hoare Mantığı ( Hoare Logic )</title>
		<link>http://www.bilgisayarkavramlari.com/2009/09/10/hoare-mantigi-hoare-logic/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/09/10/hoare-mantigi-hoare-logic/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 03:14:15 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Derleyiciler]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=3465</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde, program doğrulama ( program corectness) için kullanılan mantığın ismidir. Basitçe bir dizi matematik kuralları ile bir programı modellemeye ve programın doğruluğunu ispatlamaya (veya yanlışlığını göstermeye) yarayan mantıktır. Bu mantığın bilgisayar dünyasında bir dil olarak modellenmesi sonucunda yine bir muntazamn dil (formal language) ortaya çıkar. Yani aslında bir programın [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar bilimlerinde, <a href="http://www.bilgisayarkavramlari.com/2009/09/10/program-dogrulugu-program-correctness/">program doğrulama ( program corectness) </a>için kullanılan mantığın ismidir. Basitçe bir dizi matematik kuralları ile bir programı modellemeye ve programın doğruluğunu ispatlamaya (veya yanlışlığını göstermeye) yarayan mantıktır.</p>
<p>Bu mantığın bilgisayar dünyasında bir dil olarak modellenmesi sonucunda yine bir <a href="http://www.bilgisayarkavramlari.com/2009/06/25/muntazam-diller-formal-languages/">muntazamn dil (formal language)</a> ortaya çıkar. Yani aslında bir <a href="http://www.bilgisayarkavramlari.com/2009/09/10/program-dogrulugu-program-correctness/">programın doğruluğu (correctness)</a> başka bir program tarafından denetlenebilir.</p>
<p>İşte tam bu noktada Hoare mantığı devreye girer ve bir programın nasıl denetleneceğine cevap arar. Bu mantığa göre hoare üçlüsü ismi verilen bir yapıdan faydalanılır. Buna göre her komut satırı veya program satırı ayrı bir yapıdır ve aşağıdaki şekilde gösterilebilir:</p>
<p>{P} C {Q}</p>
<p>Bu gösterimde {} sembolleri arasında bulunan P ve Q programın çalışmasını doğrudan etkilemeyen ön ve son koşullardır (precondition postcondition). C ise ingilizcedeki command yani komut kelimesinin baş harfidir ve programlama dillerinde bulunan komutları ifade eder.</p>
<p>Yukarıdaki gösterimden anlaşılacağı üzere, bir programın doğruluğunu kontrol etmek için, programda bulunan her satırın ön koşulunu ve son koşulunu kontrol etme yaklaşımına hoare mantığı ismi verilir ve bu yaklaşımda şayet her komuttan önce doğru kontroller yapılır ve her satırdan sonra tam olarak beklenen durumlar belirlenirse programın doğruluğunun ispatlanabileceği iddia edilmektedir.</p>
<p>Bu yazı şadi evren şeker tarafından yazılmış ve bilgisayarkavramlari.com sitesinde yayınlanmıştır. Bu içeriğin kopyalanması veya farklı bir sitede yayınlanması hırsızlıktır ve telif hakları yasası gereği suçtur.</p>
<p>Hoare mantığının kendisine has bir gösterim şekli vardır. Buna göre programdaki komutlar ve bu komutlar arasındaki bağlantılar iki satır olarak gösterilir. Satırlardan üstteki, program komutlarını gösterirken alttaki de bu komutların hoare mantığındaki karşılığını gösterir.</p>
<p><strong>Örnek hoare mantığı gösterimleri</strong></p>
<p>Çok klasik olarak ihtiyaç duyulan bazı gösterimler aşağıda verilmiştir:</p>
<p>Boş komut</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/09/bossatir.jpg"><img class="alignnone size-full wp-image-3468" title="bossatir" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/09/bossatir.jpg" alt="bossatir" width="89" height="39" /></a></p>
<p>Yukarıdaki gösterimde çizginin üzerinde herhangi bir komut bulunmamaktadır. Yani boş komut durumudur. Bu durumda komuttan önceki ve sonraki koşullar yani {P} aynıdır.</p>
<p>Ardışık iki komut</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/09/conj.jpg"><img class="alignnone size-full wp-image-3473" title="conj" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/09/conj.jpg" alt="conj" width="126" height="72" /></a></p>
<p>Yukarıdaki iki ayrı satırın ( S ve T satırları) <a href="http://www.bilgisayarkavramlari.com/2007/11/29/ve-kapisi-and-gate/">birleşimi (conjunction)</a> gösterilmiştir. Bu işlemde S satırının son koşulu olan  ile T satırının ön koşulu olan Q aynı şarttır ve dolayısıyla iki satırın birleşmiş halinde ara koşul olacaktır. P ve R koşulları ise birleşmiş halin ön ve son koşulları olacaktır.</p>
<p>Koşullu komutlar</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/09/iflese.jpg"><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/09/ifelse.jpg"><img class="alignnone size-full wp-image-3475" title="ifelse" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/09/ifelse.jpg" alt="ifelse" width="172" height="71" /></a><br />
</a></p>
<p>Yukarıdaki gösterim <a href="http://www.bilgisayarkavramlari.com/2007/11/29/veya-kapisi-or-gate/">veya operatörünün (disjunction)</a> ifadesidir. Buna göre bir B koşuluna bağlı olarak S veya T satırlarından birisinin çalışması yukarıdaki gösterimle mümkündür. Buradaki gösterimde P ön koşulu ile B koşulu aynı anda olduğunda S satırı, P ön koşulu olup B koşulu olmadığında da T satırı çalışmıştır. Bunun anlamı P ön koşulu her zaman olmak kaydıyla şayet B doğruysa S yanlışsa T satırının çalışmasıdır.</p>

<p class="sayac_bilgi">78 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/09/10/hoare-mantigi-hoare-logic/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Program doğruluğu ( Program correctness)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/09/10/program-dogrulugu-program-correctness/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/09/10/program-dogrulugu-program-correctness/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 02:37:22 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[algoritma analizi (teory of algorithms)]]></category>
		<category><![CDATA[Derleyiciler]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>
		<category><![CDATA[Veri Güvenliği(Cryptography)]]></category>
		<category><![CDATA[Yazılım Mühendisliği (Software Engineering)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=3466</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde bir programın istenen özellikleri yerine getirip getirememesine verilen isimdir. Buna göre şayet bir program, beklenen özellikleri tam ve eksiksiz yerine getiriyor, istenmeyen sonuçlar ortaya çıkmıyor ve program başladıktan sonra her durumda başarılı bir şekilde bitiyorsa bu programa tam doğru ( total correctness) ismi verilir. Durma probeleminden (halting problem) [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar bilimlerinde bir programın istenen özellikleri yerine getirip getirememesine verilen isimdir. Buna göre şayet bir program, beklenen özellikleri tam ve eksiksiz yerine getiriyor, istenmeyen sonuçlar ortaya çıkmıyor ve program başladıktan sonra her durumda başarılı bir şekilde bitiyorsa bu programa tam doğru ( total correctness) ismi verilir.</p>
<p><a href="http://www.bilgisayarkavramlari.com/2008/11/12/durma-problemi-halting-problem/">Durma probeleminden (halting problem) </a>bilindiği üzere bir programın bitip bitmemesinin test edilmesi ayrı bir muammadır. Dolayısıyla tam doğru bir programın elde edilmesi veya ispatlanması farklı güçlükleri beraberinde getirir. Şayet bir program, kendinden beklenen özellikleri başarılı bir şekilde yerine getiriyor ancak bitip bitmemeyi garanti edemiyorsa (bir programın biteceği ispatlanamıyorsa) bu durumda programa kısmi doğru (partial correctness) ismi verilir.</p>
<p>Aslında programların doğruluğu (correctness),<a href="http://www.bilgisayarkavramlari.com/2009/06/28/karar-problemi-decision-problem/"> karar problemlerinin (decision problems)</a> çözülmesidir.</p>
<p>Tam bu noktada bilgisayar bilimleri konusunda veciz sözleri ile konuya aydınlık getiren Dijkstranın bir sözünü hatırlamakta yarar var. &#8220;Testler hataların varlığını gösterebilir ama yokluğunu gösteremez.&#8221;</p>
<p>Bu yazı şadi evren şeker tarafından yazılmış ve bilgisayarkavramlari.com sitesinde yayınlanmıştır. Bu içeriğin kopyalanması veya farklı bir sitede yayınlanması hırsızlıktır ve telif hakları yasası gereği suçtur.</p>
<p>Örneğin doğal sayılar kümesi üzerinde sayıların asal olup olmadığını test eden bir program yazdığımızı düşünelim. Bu program basitçe bir sayıyı alacak ve sayının çarpanlarını bulacaktır. Şayet sayının kendisi ve 1 dışında başka çarpanı yoksa bu sayıyı asal sayı ilan edecektir. Bu şekilde bir program yazmamızda herhangi bir sorun yoktur ancak programın biteceğini garanti edemeyiz. Elbette buradaki problem doğal sayıların bir sonu olup olmadığıdır. Yani program bütün asal doğal sayıları bulmaya çalışırsa sonsuz sayıda işlem yapması gerekir (ya da sonsuz bilinen bir değerse sonlu sayıda). Bu noktada bilgisayarın hafıza gibi kısıtları devreye girer. Yani sonsuz sayı işleyecek bir hafıza kapasitesi henüz bilgisayarlarda bulunmamaktadır.</p>
<p>Bu ispat sırasında programın bir lambda cebirine (lambda calculus) çevrilmesi ve bu cebirde doğruluğunun ispatlanması mümkündür. Bu tip ispat yöntemlerine program çıkarımı (program extraction) ismi verilir. Örneğin Curry Howard karşılığı (curry howard correspondence) yaklaşımı buna bir örnek olarak gösterilebilir.</p>
<p>Bir programın doğruluğunun tetkikine, program tetkiki (program verification) ismi verilir.</p>
<p><strong>Program doğrulamanın kullanıldığı yerler</strong></p>
<p>Program doğrulama, bir programın geliştirilme sürecinde, son adım olan test aşamasına gelinmeden hataların bulunması ve programın kodlanma hatta tasarım aşamasında hatalarının yakalanmasını sağladığı için oldukça önemlidir. Örneğin bitmiş bir programdaki bir hatanın test ile bulunması bütün tasarım ve kodlama adımlarına geri dönülmesini ve dolayısıyla hatanın telafisi için harcanan maliyetin yüksek olmasını sağlarken, daha henüz kodlama aşamsında hatanın tespiti maliyeti düşürmektedir.</p>
<p>Ayrıca yazılan programın hatasının test aşamasında hiçbir zaman bulunamaması da söz konusu olabilir. Bu ihtimale karşı programın matematiksel olarak doğruluğunun ispatlanması çok önemlidir.</p>

<p class="sayac_bilgi">92 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/09/10/program-dogrulugu-program-correctness/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Özyineli Geçiş Ağları (Reursive Transition Networks)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/06/29/ozyineli-gecis-aglari-reursive-transition-networks/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/06/29/ozyineli-gecis-aglari-reursive-transition-networks/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 18:36:30 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Automata (otomatlar, özdevinirler)]]></category>
		<category><![CDATA[Derleyiciler]]></category>
		<category><![CDATA[Doğal Dil İşleme (NLP)]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=2724</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Veri modellemede kullanılan bir ağ şeklidir. Esas itibariyle içerikten bağımsız dillerin (context free grammers) görsel gösterimi için kullanılabilirler. Ağların yapısı uzatılmış geçiş ağlarına (augmented transition network) benzemekle birlikte en büyük farkı ve isminin özyineli olmasının da sebebi ağın kendini tekrarlama özelliğidir. Daha basitçe bir içerikten bağımsız dil (CFG) S devamlısı [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Veri modellemede kullanılan bir ağ şeklidir. Esas itibariyle <a href="http://www.bilgisayarkavramlari.com/2009/03/20/icerikten-bagimsiz-gramer-context-free-grammer-cfg/">içerikten bağımsız dillerin (context free grammers)</a> görsel gösterimi için kullanılabilirler. Ağların yapısı <a href="http://www.bilgisayarkavramlari.com/2009/06/15/augmented-transition-network-atn-uzatilmis-gecis-agi/">uzatılmış geçiş ağlarına (augmented transition network)</a> benzemekle birlikte en büyük farkı ve isminin özyineli olmasının da sebebi ağın kendini tekrarlama özelliğidir.</p>
<p>Daha basitçe bir <a href="http://www.bilgisayarkavramlari.com/2009/03/20/icerikten-bagimsiz-gramer-context-free-grammer-cfg/">içerikten bağımsız dil (CFG)</a> S devamlısı (nonterminal) ile başlayan bir kurallar listesidir. Bu listedeki her kural bir devamlıdan (nonterminal) bir sonluya (terminal) doğru yapılan bir açıklamadır. Özyineli geçiş ağlarında bu açıklamada (yani <a href="http://www.bilgisayarkavramlari.com/2009/03/20/icerikten-bagimsiz-gramer-context-free-grammer-cfg/">CFG</a> kurallarının sağ tarafında) da S devamlısı (nonterminal) bulunabilmektedir.</p>
<p>Örneğin aşağıdaki kuralları ele alalım:</p>
<p>S → A B</p>
<p>A → a</p>
<p>B → b | S</p>
<p>Yukarıdaki son kuralda S bağlangıç devamlısına bir bağlantı kurulmuştur ve aşağıdaki şekilde görselleştirilebilir:</p>
<p><img class="alignnone size-full wp-image-2725" title="ozyineliaglar" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/ozyineliaglar.jpg" alt="ozyineliaglar" width="365" height="350" /></p>
<p>Yukarıdaki ağ yapısı verilen CFG örneğinin çizilmiş halidir. Buradaki çizimden de görüleceği üzere ağ yeniden başa döneme özelliğine sahiptir.</p>
<p>Doğal dil olarak yorumlanacak olursa bir cümlenin içinde alt cümlelerin bulunması bu ağ ile gösterilebilir. Örneğin aşağıdaki örnek cümleyi ele alalım:</p>
<p>Ali geldiğini söylemeyi unuttu.</p>
<p>Yukarıdaki örnekte 3 cümle iç içedir.</p>
<p>Ali gelmek</p>
<p>Ali söylemek</p>
<p>Ali unutmak</p>
<p>Basit bir yaklaşımla bir cümleyi özne &#8211; yüklem olarak tanımlayacak olursak yukarıdaki örnek cümlenin uyduğu yapı aşağıdaki şekilde olabilir:</p>
<p>C: Ö Y</p>
<p>Ö : &#8220;Ali&#8221;</p>
<p>Y: gelmek | söylemek | unutmak</p>
<p>Yukarıdaki CFG yapısını şayet özyineli geçiş ağımız (recursive transition network) ile gösterecek olursak:</p>
<p><img class="alignnone size-full wp-image-2726" title="ozyinesablon" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/ozyinesablon.jpg" alt="ozyinesablon" width="233" height="112" /></p>
<p>Örneğin basit bir Özne-Yüklem ilişkisini yukarıdaki şekilde gösterelim. Yani özneleri dikdörtgen ve yüklemleri yuvarlak ile gösterelim. Bu durumda örneğimiz:</p>
<p><img class="alignnone size-full wp-image-2727" title="ozyineornek" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/ozyineornek.jpg" alt="ozyineornek" width="548" height="196" /></p>
<p>Görüldüğü üzere özyineli ağımızla gösterilen örnekte unutmak fiilinin başındaki isim kelime grubu &#8220;ali geldiğini söylemeyi&#8221; yine bir cümledir ve yapısı itibariyle bir önceki şekilde gösterilen şablonu içermektedir. Benzer şekilde söylemek fiilinin başındaki isim grubu da bir geçiş ağı (transition network) özelliği taşımaktadır</p>

<p class="sayac_bilgi">113 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/06/29/ozyineli-gecis-aglari-reursive-transition-networks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Turing Makinesi (Turing Machine)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/06/27/turing-makinesi-turing-machine/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/06/27/turing-makinesi-turing-machine/#comments</comments>
		<pubDate>Sat, 27 Jun 2009 13:55:12 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[algoritma analizi (teory of algorithms)]]></category>
		<category><![CDATA[Automata (otomatlar, özdevinirler)]]></category>
		<category><![CDATA[Bilgisayar Kavramları]]></category>
		<category><![CDATA[Bilgisayar Standartları]]></category>
		<category><![CDATA[Derleyiciler]]></category>
		<category><![CDATA[Doğal Dil İşleme (NLP)]]></category>
		<category><![CDATA[Donanım ( Hardware )]]></category>
		<category><![CDATA[Dosya Organizasyonu (File Organisation)]]></category>
		<category><![CDATA[işletim sistemleri]]></category>
		<category><![CDATA[Mantık Devreleri (Logic Circuits)]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>
		<category><![CDATA[Sistem Programlama (System Programming)]]></category>
		<category><![CDATA[veri yapıları]]></category>
		<category><![CDATA[Turing]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=2681</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinin önemli bir kısmını oluşturan otomatlar (Automata) ve Algoritma Analizi (Algorithm analysis) çalıştırmalarının altındaki dil bilimin en temel taşlarından birisidir.1936 yılında Alan Turing tarafından ortaya atılan makine tasarımı günümüzde pekçok teori ve standardın belirlenmesinde önemli rol oynar. Turing Makinesinin Tanımı Basitçe bir kafadan (head) ve bir de teyp bandından [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar bilimlerinin önemli bir kısmını oluşturan <a href="http://www.bilgisayarkavramlari.com/category/automata-otomatlar/">otomatlar (Automata) </a>ve <a href="http://www.bilgisayarkavramlari.com/category/algoritma-analizi-teory-of-algorithms/">Algoritma Analizi (Algorithm analysis) </a>çalıştırmalarının altındaki dil bilimin en temel taşlarından birisidir.1936 yılında Alan Turing tarafından ortaya atılan makine tasarımı günümüzde pekçok teori ve standardın belirlenmesinde önemli rol oynar.</p>
<p><strong>Turing Makinesinin Tanımı</strong></p>
<p>Basitçe bir kafadan (head) ve bir de teyp bandından (tape) oluşan bir makinedir.</p>
<p><img class="alignnone size-full wp-image-2683" title="turingtape" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/turingtape.jpg" alt="turingtape" width="425" height="148" /></p>
<p>Makinede yapılabilecek işlemler</p>
<ul>
<li>Yazmak</li>
<li>Okumak</li>
<li>Bandı ileri sarmak</li>
<li>Bandı geri sarmak</li>
</ul>
<p>şeklinde sıralanabilir.</p>
<p><strong>Chomsky hiyerarşisi ve Turing Makinesi</strong></p>
<p>Bütün teori bu basit dört işlem üzerine kurulmuştur ve sadece yukarıdaki bu işlemleri kullanarak bir işin yapılıp yapılamayacağı veya bir dilin bu basit 4 işleme indirgenip indirgenemeyeceğine göre diller ve işlemler tasnif edilmiştir.</p>
<p><img class="alignnone size-full wp-image-2682" title="turingkumesi" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/turingkumesi.jpg" alt="turingkumesi" width="496" height="359" /></p>
<p>Bu sınıflandırma yukarıdaki venn şeması ile gösterilmiştir. Aynı zamanda <a href="http://www.bilgisayarkavramlari.com/2009/06/27/chomsky-hiyerarsisi-chomsky-hierarchy/">chomsky hiyerarşisi (chomsky hierarchy)</a> için 1. seviye (type-1) olan ve Turing makinesi ile kabul edilebilen diller bütün tip-2 ve tip-3 dilleri yani içerk bağımsız dilleri ve düzenli dilleri kapsamaktadır. Ayrıca ilave olarak içerik bağımsız dillerin işleyemediği (üretemediği veya parçalayamadığı (parse) ) a<sup>n</sup>b<sup>n</sup>c<sup>n</sup> şeklindeki kelimeleri de işleyebilmektedir.  Düzenli ifadelerin işleyememesi konusunda bilgi için <a href="http://www.bilgisayarkavramlari.com/2009/03/22/duzenli-ifadelerde-pompalama-onsavi-pumping-lemma-for-regular-expressions/">düzenli ifadelerde pompalama savı (pumping lemma in regular expressions)</a> ve <a href="http://www.bilgisayarkavramlari.com/2009/03/22/icerik-bagimsiz-gramerler-icin-pompalama-onsavi-pumping-lemma-for-context-free-grammers/">içerik bağımsız dillerin işlemeyemesi için de içerik bağımsız dillerde pompalama savı (pumping lemma for CFG)</a> başlıklı yazıları okuyabilirsiniz.</p>
<p><strong>Turing Makinesinin Akademik Tanımı</strong></p>
<p>Turing makineleri literatürde akademik olarak aşağıdaki şekilde tanımlanır:</p>
<p><img class="alignnone size-full wp-image-2685" title="turing_akademik" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/turing_akademik.jpg" alt="turing_akademik" width="167" height="24" /></p>
<p>Burada M ile gösterilen makinenin parçaları aşağıda listelenmiştir:</p>
<p>Q sembolü sonlu sayıdaki durumların <a href="http://www.bilgisayarkavramlari.com/2009/06/24/kume-teorisi-set-theory/">kümesidir</a>. Yani makinenin işleme sırasında aldığı durumardır.</p>
<p>Γ sembolü dilde bulunan bütün harfleri içeren alfabeyi gösterir. Örneğin ikilik tabandaki sayılar ile işlem yapılıyorsa {0,1} şeklinde kabul edilir.</p>
<p>Σ sembolü ile makineye verilecek girdiler (input)<a href="http://www.bilgisayarkavramlari.com/2009/06/24/kume-teorisi-set-theory/"> kümesi</a> gösterilir. Girdi <a href="http://www.bilgisayarkavramlari.com/2009/06/24/kume-teorisi-set-theory/">kümesi</a> dildeki harfler dışında bir sembol taşıyamayacağı için Σ <span class="b">⊆ </span>Γ demek doğru olur.</p>
<p>δ sembolü dilde bulunan ve makinenin çalışması sırasında kullanacağı geçişleri (transitions) tutmaktadır.</p>
<p><span class="b">◊ sembolü teyp bandı üzerindeki boşlukları ifade etmektedir. Yani teyp üzerinde hiçbir bilgi yokken bu sembol okunur.<br />
</span></p>
<p>q<sub>0</sub> sembolü makinenin başlangıç durumunu (state) tutmaktadır ve dolayısıyla q<sub>0</sub> <span class="b">⊆</span> Q olmak zorundadır.</p>
<p>F sembolü makinenin bitiş durumunu (state) tutmaktadır ve yine F <span class="b">⊆ Q olmak zorundadır. </span></p>
<p><strong><span class="b">Örnek Turing Makinesi</span></strong></p>
<p><span class="b">Yukarıdaki sembolleri kullanarak örnek bir Turing makinesini aşağıdaki şekilde inşa edebiliriz. </span></p>
<p><span class="b">Örneğin basit bir kelime olan a* <a href="http://www.bilgisayarkavramlari.com/2007/04/14/regular-expression-regexp-duzenli-deyimler-ifadeler/">düzenli ifadesini (regular expression)</a> Turing makinesi ile gösterelim ve bize verilen aaa şeklindeki 3 a yı makinemizin kabul edip etmediğine bakalım. </span></p>
<p><span class="b">Tanım itibariyle makinemizi aşağıdaki şekilde tanımlayalım:</span></p>
<p>M = { {q<sub>0</sub>,q<sub>1</sub>} , { a } , { a,x } , { q<sub>0</sub> a→a R q<sub>0</sub> , q<sub>0</sub> x→x L q<sub>1</sub>} , q<sub>0</sub> , x , q<sub>1</sub> }</p>
<p>Yukarıdaki bu makineyi yorumlayacak olursak:</p>
<p>Q değeri olarak   {q<sub>0</sub>,q<sub>1</sub>} verilmiştir. Yani makinemizin ik idurumu olacaktır.</p>
<p>Γ değeri olarak { a,x } verilmiştir. Yani makinemizdeki kullanılan semboller a ve x&#8217;ten ibarettir.</p>
<p>Σ değeri olara {a} verilmiştir. Yani makinemize sadece a girdisi kabul edilmektedir.</p>
<p>δ değeri olarak iki geçiş verilmiştir { q<sub>0</sub> a→a R q<sub>0</sub> , q<sub>0</sub> x→x L q<sub>1</sub>} buraadki R sağa sarma L ise sola sarmadır ve görüleceği üzere Q değerindeki durumlar arasındaki geçişleri tutmaktadır.</p>
<p><span class="b">◊ değeri olarak x sembolü verilmiştir. Buradan x sembolünün aslında boş sembolü olduğu ve bantta hiçbir değer yokken okunan değer olduğu anlaşılmaktadır.<br />
</span></p>
<p>q<sub>0</sub> ile makinenin başlangıç durumundaki hali belirtilmiştir.</p>
<p>F değeri olarak q<sub>1</sub> değeri verilmiştir. Demek ki makinemiz q<sub>1</sub> durumuna geldiğinde bitmektedir (halt) ve bu duruma gelmesi halinde bu duruma kadar olan girdileri kabul etmiş olur<span class="b">. </span></p>
<p>Yukarıdaki bu tanımı görsel olarak göstermek de mümkündür:</p>
<p><img class="alignnone size-full wp-image-2686" title="turingornek" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/turingornek.jpg" alt="turingornek" width="432" height="225" /></p>
<p><strong><span class="b"><br />
</span></strong></p>
<p><span class="b">Yukarıdaki bu temsili resimde verilen turing makinesi çizilmiştir.</span></p>
<p><span class="b">Makinemizin örnek çalışmasını ve bant durumunu adım adım inceleyelim. </span></p>
<p><span class="b">Birinci adımda bandımızda aaa (3 adet a) yazılı olduğunu kabul edelim ve makinemizin bu aaa değerini kabul edip etmeyeceğini adım adım görelim. Zaten istediğimiz de aaa değerini kabul eden bir makine yapabilmekti.</span></p>
<p><span class="b"><img class="alignnone size-full wp-image-2687" title="turing1" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/turing1.jpg" alt="turing1" width="487" height="412" /></span></p>
<p><span class="b">Yukarıdaki ilk durumda bant üzerinde beklenen ve kabul edilip edilmeyeceği merak edilen değerimiz bulunuyor. Makinemizin kafasının okuduğu değer a sembolü. Makinemizin geçiş tasarımına göre q<sub>0</sub> halinde başlıyoruz ve a geldiğinde teybi sağa sarıp yine q<sub>0</sub> durumunda kalmamız gerekiyor.</span></p>
<p><span class="b"><br />
</span></p>
<p><span class="b"><img class="alignnone size-full wp-image-2689" title="turing21" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/turing21.jpg" alt="turing21" width="509" height="407" /></span></p>
<p>Yeni durumda kafamızın okuduğu değer banttaki 2. a harfi ve bu durumda yine <span class="b">q<sub>0</sub> </span> durumundayken teybi sağa sarıp yine <span class="b">q<sub>0</sub> </span> durumunda kalmamız tasarlanmış<span class="b"> </span></p>
<p><span class="b"><img class="alignnone size-full wp-image-2690" title="turing3" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/turing3.jpg" alt="turing3" width="515" height="380" /></span></p>
<p>3. durumda kafamızın okuduğu değer yine a sembolü olmakta ve daha önceki 2 duruma benzer şekilde <span class="b">q<sub>0</sub> </span> durumundayken a sembolü okumanın sonucu olarak teybi sağa sarıp <span class="b">q<sub>0</sub> </span>durumunda sabit kalıyoruz.</p>
<p><span class="b"><img class="alignnone size-full wp-image-2691" title="turing4" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/turing4.jpg" alt="turing4" width="487" height="364" /></span></p>
<p>4. adımda teypten okuduğumuz değer boşluk sembolü x oluyor. Bu değer makinemizin tasarımında <span class="b">q<sub>1</sub> </span><span class="b"> </span>durumuna gitmemiz olarak tasarlanmış ve teybe sola sarma emri veriyoruz.</p>
<p><span class="b"><img class="alignnone size-full wp-image-2692" title="turing5" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/turing5.jpg" alt="turing5" width="586" height="322" /></span></p>
<p><span class="b">Makinenin son durumunda </span><span class="b">q<sub>1</sub> </span><span class="b"> durumu makinenin kabul ve bitiş durumu olarak tasarlanmıştı ( makinenin tasarımındaki F kümesi) dolayısıyla çalışmamız burada sonlanmış ve giriş olarak aaa girdisini kabul etmiş oluyoruz.</span></p>
<p><strong><span class="b">2. Örnek</span></strong></p>
<p><span class="b">Hasan Bey&#8217;in sorusu üzerine bir örnek makine daha ekleme ihtiyacı zuhur etti. Makinemiz {a,b} sembolleri için çalışsın ve ilk durum olarak bandın en solunda başlayarak bantta bulunan sembolleri silmek için tasarlansın. Bu tasarımı aşağıdaki temsili resimde görülen otomat ile yapabiliriz:</span></p>
<p><span class="b"><img class="alignnone" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/turing_silici.jpg" alt="" width="454" height="123" /></span></p>
<p><span class="b">Görüldüğü üzere makinemizde 4 durum bulunuyor, bunlardan en sağda olan h durumu bitişi (halt) temsil ediyor. Şimdi bu makinenin bir misal olarak &#8220;aabb&#8221; yazılı bir bantta silme işlemini nasıl yaptığını adım adım izah etmeye çalışalım. </span></p>
<p><span class="b">Aşağıda, makinenin her adımda nasıl davranacağı bant üzerinde gösterilmiş ve altında açıklanmıştır. Sarı renge boyalı olan kutular, kafanın o anda üzerinde durduğu bant konumunu temsil etmektedir.<br />
</span></p>
<p><span class="b"><img class="alignnone" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/turing_silici_adimlar.jpg" alt="" width="374" height="590" /></span></p>
<p><span class="b">Netice olarak Hasan Bey&#8217;in sorusuna temel teşkil eden ve örneğin q1 üzerindeki döngülerden birisi olan b/a,R geçişi, banttan b okunduğunda banta a değerini yaz manasındadır.</span></p>
<p><span class="b">Yine bu yazıya yapılan yorumlarda sorulan bir sorunun cevabını aşağıdaki bağlantıda çözdüm. Soru, eşit a ve b içeren Turing makinesinin tasarımı idi, bağlantıya tıklayarak okuyabilirsiniz. </span></p>
<p><a href="http://www.bilgisayarkavramlari.com/2010/11/19/esit-a-ve-b-bulunduran-turing-makinesi-ornegi/">http://www.bilgisayarkavramlari.com/2010/11/19/esit-a-ve-b-bulunduran-turing-makinesi-ornegi/</a></p>

<p class="sayac_bilgi">1,677 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/06/27/turing-makinesi-turing-machine/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Özyineli Sayılabilir Diller (Recursively Enumerable Languages)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/06/27/ozyineli-sayilabilir-diller-recursively-enumerable-languages/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/06/27/ozyineli-sayilabilir-diller-recursively-enumerable-languages/#comments</comments>
		<pubDate>Sat, 27 Jun 2009 12:33:24 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Automata (otomatlar, özdevinirler)]]></category>
		<category><![CDATA[Bilgisayar Kavramları]]></category>
		<category><![CDATA[Derleyiciler]]></category>
		<category><![CDATA[Doğal Dil İşleme (NLP)]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=2647</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Muntazam dillerden (formal languages) birisi olan ve bu özelliği ile Mantık, Matematik ve Bilgisayar bilimlerinin çalışma alanına giren bir dil çeşididir. Sınıflandırma olarak Chomsky Hiyerarşisinde (Chomsky Hierarchy) 0. seviye olan (Type 0) bu dile uygun bütün diller birer düzenli ifade (regular expression) ile gösterilebilir. Muntazam dil (formal language) olması dolayısıyla [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p><a href="http://www.bilgisayarkavramlari.com/2009/06/25/muntazam-diller-formal-languages/">Muntazam dillerden (formal languages)</a> birisi olan ve bu özelliği ile Mantık, Matematik ve Bilgisayar bilimlerinin çalışma alanına giren bir dil çeşididir. Sınıflandırma olarak <a href="http://www.bilgisayarkavramlari.com/2009/06/27/chomsky-hiyerarsisi-chomsky-hierarchy/">Chomsky Hiyerarşisinde (Chomsky Hierarchy)</a> 0. seviye olan (Type 0) bu dile uygun bütün diller birer düzenli ifade (regular expression) ile gösterilebilir.</p>
<p><a href="http://www.bilgisayarkavramlari.com/2009/06/25/muntazam-diller-formal-languages/">Muntazam dil (formal language)</a> olması dolayısıyla dilde üretilen her <a href="http://www.bilgisayarkavramlari.com/2009/06/25/ozyineli-sayilabilir-kume-recursively-enumerable-sets/">özyineli sayılabilir kelime kümesi (recursively enumerable set) </a> bütün kelimelerden çıkarılabilecek <a href="http://www.bilgisayarkavramlari.com/2009/06/24/guc-kumesi-kuvvet-kumesi-power-set/">güç kümesinin (power set)</a> bir alt kümesi olmak zorundadır. Bu anlamda bir özyineli sayılabilir dili aşağıdaki üç farklı tanımla tanımlamak mümkündür:</p>
<p>Bir dilde bulunan alfabeden üretilebilen bütük kelimeleri kabul eden dil yani Σ sembolü ile dilimizdeki alfabeyi yani harfler kümesini gösterecek olursak L ile gösterilen dilimiz Σ<sup>*</sup> ile üretilebilen kelimeler kümesidir.</p>
<p><a href="http://www.bilgisayarkavramlari.com/2009/06/27/turing-makinesi-turing-machine/">Turing makinesi (Turing machine) </a>ile işlenebilen veya<a href="http://www.bilgisayarkavramlari.com/2009/06/25/hesaplanabilir-fonksiyon-computable-function/"> hesaplanabilir bir fonksiyon (computable function)</a> bulunabilen dildir. Burada dikkat edilecek nokta dilin sonsuz olabileceğidir. Yani dilimizde sonsuz sayıda tekrar bulunabilir.<a href="http://www.bilgisayarkavramlari.com/2009/06/27/turing-makinesi-turing-machine/"> Turing makinesi</a> ve <a href="http://www.bilgisayarkavramlari.com/2009/06/25/hesaplanabilirlik-teorisi-computability-theory/">hesaplanabilirlik teorisi (computability theory)</a> dikkatle okunacak olursa dilin sonsuz olmasının bir sakıncası yoktur. Teorik olarak sonlu zamanda bitiyor olması yeterlidir ve dil sonsuz bile olsa sonlu zamanda işleyen bir makine veya fonksiyon bulunabilir.</p>
<p>Şayt bir dilde üretilen bir<a href="http://www.bilgisayarkavramlari.com/2008/08/02/dizgi-string/"> dizgi (string)</a> için bir <a href="http://www.bilgisayarkavramlari.com/2009/06/27/turing-makinesi-turing-machine/">Turing makinesi (turing machine)</a> veya <a href="http://www.bilgisayarkavramlari.com/2009/06/25/hesaplanabilir-fonksiyon-computable-function/">hesaplanabilir bir fonksiyon (computable function) </a>bulunuyorsa, diğer bir ifadeyle ürettiğimiz <a href="http://www.bilgisayarkavramlari.com/2009/06/27/turing-makinesi-turing-machine/">turing makinesi</a> şu üç durumdan birisini yapıyorsa:</p>
<ul>
<li><a href="http://www.bilgisayarkavramlari.com/2008/11/12/durma-problemi-halting-problem/">bitmek (halt)</a></li>
<li><a href="http://www.bilgisayarkavramlari.com/2008/09/08/dongu-loop/">döngü (loop)</a></li>
<li>red etmek (reject)</li>
</ul>
<p>bu durumda bu dil özyineli sayılabilir dildir denilebilir.</p>
<p>Özyineli sayılabilir diller temel olarak <a href="http://www.bilgisayarkavramlari.com/2009/06/27/chomsky-hiyerarsisi-chomsky-hierarchy/">chomsky hiyerarşisinde (chomsky hierarchy)</a> bulunan bütün diğer dilleri kapsar. Bu anlamda hiyerarşinin en alt seviye dilidir ve diğer dillere göre çok daha esnektir.</p>

<p class="sayac_bilgi">131 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/06/27/ozyineli-sayilabilir-diller-recursively-enumerable-languages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

