24 Mart 2016 Perşembe

SUPERIMPOSED CODING

Bu kod superimposed kodun çalışma prensibini göstermektedir. Superimposed kod ile dosyadan erişmek istediğimiz bilgiye daha az yere bakarak ulaşabiliriz. Bu da retrieval işlem süresini azaltır.

“desserts.txt” dosyası içinde pasta isimleri ve içinde bulunan malzemelerin ( “1” var , “0” yok şeklinde ) kodları bulunmaktadır. “ingredients.txt” dosyasının içinde ise pastanın içinde bulunan malzemelerin kodları bulunmaktadır.

Örneğin ” ingredients.txt ” içinde ilk sırada bulunan “APPLES 00100100” elmanın kodunu göstermektedir. Eğer ” desserts.txt ” içinde bir pastanın kodunun ilk biti 1 ise bu o pastada elma olduğunu gösterir.

KODLAR

FIELD/RECORD ORGANIZATION & RECLAIMING SPACE

Bu yazımda değişken boyutlardaki kayıtların dosyada saklanması , aranması ve silinmesi gibi işlemleri gerçekleştiren C++ kodunu anlatacağım. Aşağıdaki kod ile öğrenci bilgileri dosyada sabit uzunluklarda değil , değişken uzunluklarda tutulmaktadir. Bu da dosyada yerden kazanç sağlamaktadır. Örneğin ismi daha kısa olan bir öğrencinin kaydı dosyada daha az yer kullanmaktadır.

Bunun yanında dosyadan bir öğrenci kaydı silindiğinde o öğrencinin yerinin tekrar kullanılabilmesi için gerekli düzenlemeler yapılmıştır. Bu düzenleme ile o öğrenci kaydının bulunduğu yere sığabilecek yeni bir öğrenci geldiği zaman o alana kaydedilerek alandan kazanılacaktır.

KODLAR

Prim ve Kruskal Algoritmaları

Prim Algoritması bağlantılı, yönsüz ve ağırlıklı çizgeler için minimum spanning tree bulan ve bunu greedy yöntemle gerçekleştiren bir algoritmadır. Minimum Spanning Tree graph üzerinde her vertex erişimi olan ve edge ağırlıkları toplamı minimize edilmiş bir ağaç yapısıdır.

Bu yazımda Prim ve Kruskal Algoritmalarından yararlanarak graphların görselleştirilmesini sağlayan bir C# projesini paylaşacağım. Aşağıya programın çalıştığındaki ekran görüntüsünü koyuyorum. (Buttonlar kullandığım Windows teması yüzünden beyaz görünmektedir. Bilgisayarınızda çalıştırdığınızda kendi ayarlarınıza göre şekillenecektir.)

Uygulamayı İndir


Bubble Sort , Insertion Sort , Selection Sort , Counting Sort

Bu yazımda arraylar için birkaç sorting algoritmalarının kodlarını bir arada göstereceğim. “BubbleSort” , “InsertionSort” , “SelectionSort” ve son olarak “CountingSort” algoritmalarının kodlarını burada bulabilirsiniz.

Kodda “main” fonksiyonu içinde istediğiniz fonksiyonun yorumlarını kaldırarak çalıştırabilirsiniz. Kod C++ dili kullanılarak yazılmıştır. Veri yapısı olarak Array kullanılmıştır.

KODLAR








Queue ve Stack Yapılarının Array Kodlaması

Bu kodda Queue ve Stack yapılarının array implementasyonunu göstermeye çalıştım.

KODLAR

Insertion ve Merge Sort Çalışma Zamanları

Bu yazıda Insertion ve Merge Sort algoritmalarının C ile kodlanması ve çalışma zamanlarının karşılaştırılması açıklanmaktadır. Algoritma düz sıralı , ters sıralı ve rasgele sıralı sayılardan oluşan arrayler için çalışma zamanlarını hesaplamaktadır.

KODLAR



Heap Sort Kodlaması ve Çalışma Zamanı

Bu yazımda Heap-Sort’un C ile kodlanması bulunmaktadır. Kod içerisinde ister bilgisayar tarafından oluşturulan bir dizi, istenilirse kullanıcının girebileceği bir array Heap-Sort ile sıralanmaktadır. Sıralama sonunda dizinin ilk ve son hali ekranda gösterilmektedir. Ayrıca kod, bu işlemin ne kadar sürdüğünü de göstermektedir.

KODLAR


Recursive, Nonrecursive, Selection Quick-Sort

Bu yazımda Quick Sort’un kodlamasından bahsedeceğim. Quick – Sort’un en kötü çalışma zamanı n^2’dir. Ortalama çalışma süresi n*lg(n)’dir.Quick sort algoritması aşağıdaki gibidir.

QUICKSORT(A,p,r)

  1. if p < r
  2. then q PARTITION(A,p,r)
  3. QUICKSORT(A,p,q)
  4. QUICKSORT(A,q + 1,r)

PARTITION(A,p,r)
x A[p]
i p - 1
j r + 1
while TRUE
do repeat j j - 1
until A[j] x
repeat i i + 1
until A[i] x
if i < j
then exchange A[i] A[j]
else return j

Aşağıda Quick-Sort algoritmasını daha eğlenceli hale getiren bir video bulunmaktadır :)


Bu bölümde toplam 3 adet kod parçası bulunmaktadır. İlk kod Quick – Sort’un Recursive yazılmış halidir. İkinci kod ise Quick-Sort’un Recursive olamayan halidir. Son kod ise bir arrayin tamamını sıralamadan, eğer sıralansaydı n. elemanın ne olacağını bulan Quick-Sort Selection kodudur.

Palindrome Kontrol – Palindrome Control Recursive C Code

Palindrom, tersten okunuşu da aynı olan cümle, kelime ve sayılara denilmektedir.


  1. A Toyota! Race fast, safe car! A Toyota!
  2. Kazak
  3. 98778855231222213255887789


Bu yazımda girilen stringin palindrome olup olmadığını kontrol eden C kodu bulunmaktadır. Kontrol recursive bir işlemle yapılmıştır.

KODLAR

Counting Sort with C Code

Bu yazımda Counting Sort Algoritmasının nasıl çalıştığını özetleyen bir C Codu bulunmaktadır.

KODLAR


Array Hash and Link-List Hash Code Implementation

Bu yazımda sizlere C ile Double hashing uygulama kodlarını vereceğim. Bu kodu inceleyerek Double Hashing ( İki fonksiyonlu hash yapısı ) yöntemini kavrayabilirsiniz.

Hash fonksiyonları veya algoritmaları büyük veri bilgilerine , küçük veriler ile ulaşmaya çalışır. Örneğin her bireyin bir TC kimlik numarası vardır. Kişilere ulaşmak için her seferinde bu 11 haneli numaraları kullandığımızı varsayalım ve bir elin parmaklarını geçmeyecek kadar insanları bir dizide tutalım ( kisi[Tc_No] ).

Bu yöntemle ne kadar çok gereksiz yer tutulacağını hayal edebiliyor musunuz? 1’dan başlayarak en küçük Tc nolu kişiye kadar olan dizideki tüm elemanlar boş durmaktadır. Tüm kişilere hatasız bir şekilde ulaşılmaktadır fakat gereksiz birçok alan tutulmaktadır.

İşte bu sorunu ortadan kaldırmak için kişinin Tc Kimlik Numarasını bir fonksiyona sokuyoruz ve o fonksiyondan 1 ile 10 arasında bir sayı döndürmesini bekliyoruz. ( 10 kişi için ) Örneğin bu fonksiyon tc kimlik numarasının 11 ile bölümünden kalanı döndüren bir fonksiyon olabilir. Bu tabiki bize her kişi için ayrı bir sayı döndürmeyecektir. Çünkü tc kimlik numarasını 11’e böldüğümüzde kalanı aynı olan birçok numara olabilir. Peki o zaman bu 10 kişiyi birbirinden nasıl ayırt ederiz?

Zaten işte hash fonksiyonlarını bulmanın güzelliği de burda ya… Bir hash fonksiyonun doğruluğu yüksek farklılıktaki dataları ne kadar küçük bir alana ve ne kadar farklı şekilde sıkıştırabildiğiyle ölçülür. Mükemmel bir hash fonksiyonu bulmak her zaman o kadar kolay olmayabilir. Seçilen fonksiyon ne kadar güzelse, ne kadar ayırt edici ise o kadar alandan kazanmış olursunuz. Hash mantığının kavranması bakımından array ve link list kodlamalarını da içeren bir C kodu örneğini de yazının sonuna ekliyorum. ( Bundan daha iyi hash fonksiyonları elbette bulunabilir. )

KODLAR

COALESCED HASHING

Coalesced hashing , diğer bir ismiyle Coalesced chaining karmaşık yapıda olan zincirleri düzenlemek için oluşturulan bir stratejidir.

Örneğin bir sınıfta 40 kişi olsun ve bu kişilerin numaraları 6 haneli olsun. Bu kişilerin bilgilerine arama yapmadan, direk ulaşabilmek için bir array oluşturmak istersek nasıl yapabiliriz? İlk düşünce 999999’luk bir array oluşturur ve her kişiyi kendi numarasına göre yerine yerleştirmektir. Böyle yaptığımız zaman kullanılmayan numaraların yerleri boşa tutulmuş olacaktır.

Peki kişi sayısı kadar oluşan bir array içerisine bu kişileri nasıl yerleştirmeliyiz ki arama süresini kısaltarak ulaşabilelim. İşte coalesced hash tablosu ile bu soruya cevap bulabilmemiz mümkündür.

Öğrencileri belli bir sayının moduna göre o listeye yerleştirelim. Sayımız 59 olsun. Asal olması her zaman daha iyi sonuç verecektir. Asal sayı seçilmesi durumunda aynı yere yerleşmek isteyen öğrencilerin sayısı azalacaktır. Sayının aşırı küçük seçilmesi aynı şekilde birçok öğrenciyi aynı yere atamak isteyecektir. Sayının çok büyük seçilmesi işlem süresini uzatacaktır.

Öğrenci Numarası % 59' a göre öğrencileri yerleştirelim. Çıkan sonuçun arraydeki yeri boş ise öğrenci oraya yerleşsin. Sonucun aynı gelmesi durumunda arraydeki yer dolu olacaktır. Bu durumda örneğin 1 ilersine bakalım. Orası boş ise oraya yerleştirelim. Orasıda dolu ise gene 1 ilerisine bakalım ve oraya yerleştirelim. Bu şekilde doldurduğumuzda güzel bir sonuç ortaya çıkacaktır.

Örneğin bir öğrenciye ulaşmak istediğimizde öğrenci numarası % 59 = 43 olsun. Direk array üzerinde 43 numaralı indexe bakılır. Öğrenci ya direk burdadır ya da bu aynı indexe yerleşmiş başka bir öğrencidir. Eğer öğrenci numaraları eşleşiyorsa işlem tamamdır. Öğrenci numaraları eşleşmiyor ise eşleşene kadar bir sonraki array indexine bakılır.

Sonuç olarak toplam probe ( erişim ) sayısında düşme söz konusudur ve erişilmek istenen bilgiye daha hızlı erişilir. Aşağıda 58 kişilik bir sınıf için hash tablosu oluşturan ve toplam probe sayısını hesaplayan bir C kodu bulunmaktadır.

KODLAR

Red-Black Trees and Properties , Kırmızı Siyah Ağaçlar ve Özellikleri

Bu yazımda sizlere bir binary search tree olan Red-Black treelerden bahsedeceğim. Ayrıca Red-Black treelerle ilgili bir küçük console uygulamasını göstereceğim.

Red-Black treeler binary search treelerden farklı olarak ekstra bir boolean yapı tutarlar. ( Renk; Kırmızı ya da Siyah ) Red-Black treeler aynı zamanda Balanced treelerdir. Aşağıda örnek Red-Black Tree yapısını gösteren C kodu bulunmaktadır. Kodda template yapısı kullanılmıştır. Red-Black Tree’nin her bir elemanına ( node ) istenilen bilgi gerekli düzenlemeler yapılarak konulabilir.

KODLAR

BFS and DFS Algoritmaları ve C Kodu ( Graph )

Bu yazımda graphlarda gezinme algoritmaları olan BFS ( Breadth First Search ) ve DFS ( Depth First Search )’nin bir örnek graph üzerinde uygulamasının C kodu ile nasıl yapılacağından bahsedeceğim. İlk önce BFS algoritması ile başlayacağım.

Örneğin hiç bilmediğiniz bir şehirde eve taşındınız. Çevrenizi hiç bilmiyorsunuz. İlk önce ilk kademe sokaklardan başlayarak gezersiniz. Bu sokaklar evinize en yakın sokaklardır. Bu sokakları öğrendikten sonra öğrendiğiniz sokakların komşu sokaklarını gezmeye başlarsınız. BFS algoritması da graph üzerinde tam olarak böyle bir gezinti yapmaktadır. İlk önce başladığı noktanın komşularına, daha sonra onların komşularına gitmektedir.
BFS algoritması tam olarak aşağıdaki gibidir.



DFS gezinmede ise ilk önce gidilebildiği kadar uzak yere gidilir. Daha sonra gidecek başka yer kalmayınca, bir önceki aşamaya dönerek oradan gidilebilecek en uzak noktaya gidilir ve daha sonra ilk başlanılan noktaya dönülür. DFS algoritması tam olarak aşağıdaki gibidir.



Bu algoritmaları bir örnek graph üzerinde göstermeden önce graph yapısını göstermeliyim. Vereceğim kodda aşağıdaki graphın yapısını uygulayacağım.



Her iki algoritmanın C ile nasıl kodlandığını burada bulabilirsiniz. Kodlama graphların array gösterimi ile yapılmıştır. Link list olarak da düzenlenebilir.

Linear Quotient ( Doğrusal Bölüm ) and Binary Tree Method ( İkili Ağaç Yöntemi )

Linear Quotient ( Doğrusal Bölüm ), dosya organizasyonu konusunun kullandığı bir hashing collision (çakışma) çözüm algoritmasıdır. Yerleştirilecek bir yapının yerinin dolu olması durumunda, kaç sıra sonraya yerleştirileceğini hesaplar. Burada diğer hashing collision çözüm algoritmalarından farklı olarak kaç sıra sonraya konulacağı değişken niteliktedir. Bunun için 2 Hash fonksiyonu kullanılır. Aşağıda paylaşacağım linkte Linear Quotient ile ilgili C kodu bulunmaktadır.

Yine aynı şekilde Binary Tree Method için yazılmış olan C kodu da bulunmaktadır. İki kod farklı farklı derlenip çalışma zamanlarındaki performansları gözlenebilir.

KODLAR

Nondeterministic ve Deterministic Finite Automata C++ Örneği

Automata teorisinde NFA( Nondeterministic Finite Automaton ) ve DFA( Deterministic Finite Automaton ) iki Finite State Machine’dir. NFA’da herhangi bir state’de ve gelen bir karakterden birkaç farklı state’e geçiş yapılabilir. Fakat bu DFA’da gelen karaktere göre unic olarak tanımlanır. DFA’ya gelen herbir karakter için yalnızca bir state’e geçiş yapılır. Bu her iki tip automata tipi regular diller üzerinde tanımlanır.

Aşağıda her iki automata için C++ dilinde yazılmış birer örnek verilmektedir. Örnekte, girilen bir string içerisinde “kalem” ve “leman” kelimelerini arayan, bu kelimeleri ararken de her karakter geldiğinde bulunulan stateleri yazdıran bir console uygulaması bulunmaktadır.

“kalem” ve “leman” kelimelerini arayan DFA örneği…


“kalem” ve “leman” kelimelerini arayan NFA örneği…




İlk OpenGL Uygulaması

Bu yazımda OpenGL kullanarak duvarlar arasında gezinen bir topun kaynak kodlarını paylaşacağım. Kodlar C++ ile yazılmıştır. Bu uygulama OpenGL programlamaya başlanırken ilk yapılan uygulamalardan birisidir. İlk önce kodun ne iş yaptığına aşağıdaki video ile göz atalım.


Kodu çalıştırabilmeniz için OpenGL kütüphanenisini yüklemelisiniz. Kütüphanenin nasıl yükleneceğini başlıklı yazımda bulabilirsiniz. Kaynak Kod buradadır.

Transformation, Rotation, Scale Matrix without OpenGL

OpenGL’in arka planda tuttuğu matrislerin neler olduğu ve nasıl değişimler geçirdiğini göstermek amacıyla Rotating Planets isimli bir uygulamanın kaynak kodlarını paylaşacağım. Bu uygulamada merkezde duran Güneş, onun etrafında dönen Dünya ve hem güneşin hem de dünyanın etrafında dönen Ay’ın hareketlerini OpenGL fonksiyonlarını kullanmadan gerçekleştireceğiz.

Paylaşacağım C++ kodunun çıktısı aşağıdaki gibi bir sonuç vermektedir.


Uygulamanın çalıştırılması için gerekli tüm dosyaları burada bulabilirsiniz.

OpenGL Model Dosyaları ve Kamera İşlemleri

Bu yazımda “concept-sedan-01v1” uzantılı bir OBJ model dosyasını parse eden ve model üzerinde ışıklandırma, Slide, Pitch, Roll, Yaw, Rotate işlemlerini gerçekleştiren uygulamanın kaynak kodlarını paylaşacağım.

Uygulamanın çıktısı aşağıdaki gibidir. Uygulamanın çalıştırılması için gerekli C++ kodlarını burada bulabilirsiniz.


Girilen Yazıyı Mors Sesine Çevirme ( convert2MorsWav )

Bu yazımda sizlere girilen bir yazının mors koduna dönüştürülmesinden bahsedeceğim. Girilen Kelimeyi Mors Alfabesine Çevirme adlı makalemdem farklı olarak bu sefer yazıları mors alfabesinden oluşmuş bir txt oluşturmak yerine, bunları direk mors seslerine dönüştüren matlab kodunu uygulamalı olarak anlatacağım.

Bunun için Matlab 2011a’da convert2MorsWav adlı bir fonksiyon oluşturdum ve iki türlü kullanıma hazırladım.

İlk kullanımda girilen yazının mors sesleri Matlab ortamında oluşturulup oynatılmaktadır. İkinci kullanımda ise ses dosyası oluşturulmaktadır. ( *.wav ) Bu ses dosyası Matlab’dan bağımsız olarak çalıştırılabilmektedir. Fonksiyon kodları aşağıda verilmiştir. Kodlama ile ilgili açıklamalar yorumlandırılmıştır. 

Scripti kullanılan ses dosyasını buradan indirebilirsiniz.


23 Mart 2016 Çarşamba

Girilen Kelimeyi Mors Alfabesine Çevirme ( Matlab )

Input olarak alınan bir yazı dizisini Mors karakterlerine dönüştüren matlab scripti linktedir.

Matlab Yüklemede Oluşan “Command Line Option Syntax” hatası

Bu yazımda sizlere ,Matlab’ı yüklerken oluşan bir hatadan bahsedeceğim. Hatanın adı çok önemli değil. Sadece ekranda görünen bu pencere hatayı algılamada yeterli olacaktır.

Matlab düzgün çalışabilmesi için “Microsoft Visual C++ Redistributable” a dayanır. Matlabı yüklediğinizde aynı zamanda Microsoft’un bu yazılımı da yüklenir. İşte bu hata iletisi bu yazılımın yüklenemediğini ve yükleyicinin elle başlatılması gerektiğini gösterir. Yükleyiciyi bilgisayarınızda aşağıdaki klasörlere girerek bulabilirsiniz.
$MATLABI YÜKLEDİĞİNİZ KLASÖR\bin\win32\vcredist_x86.exe
($MATLABI YÜKLEDİĞİNİZ KLASÖR\bin\win64\vcredist_x64.exe 64 bit Windows kullananlar için)
Yukarıda bilgisayarınıza uygun olan exeyi elle çalıştırarak yüklemeniz gerekmektedir. Bu işlemi yaptıktan sonra Matlab Installer’ı tekrar çalıştırıp sorunsuz bir şekilde yükleyebilirsiniz.

Windows Biçimlendirmeyi Bitiremedi Hatası – Usb Flash Disk

Windows üzerinde bir flash diski biçimlendirirken “Windows Biçimlendirmeyi Bitiremedi Hatası” alabilirsiniz. Genellikle flash diske bir kopyalama işlemi yaparken veya formatlama sırasında bilgisayardan çekilmesiyle meydana gelen bir sorundur. Böyle bir sorunda zaten Windows’un kendi biçimlendiricisi bu hatayı çözemez. Bunun için “HP USB Disk Format Tool” programı kullanılabilir. Programı indirin ve istediğiniz bir yere kurun.

Daha sonra yapmanız gereken adımlar aşağıdadır.

  1. Usb Flash Diskinizi bilgisayarınıza takın.
  2. Programı çalıştırın ve Device bölümünde formatlamak istediğiniz Flash Disk’i seçin.
  3. File System’e usb’nizde eskiden kullandığınız dosya biçimini seçin. (Genelde USB disklerde FAT32′dir)
  4. Volume Label’e Flash Diskinizi bir bilgisayara takdığınızda hangi isimde açılmasını istediğinizi girin. Bu kısım boş bırakılabilir. Sorun olmaz.
  5. Daha sonra Start’a tıklayıp işlemin tamamlanmasını bekleyin.
Bu program ile ayrıca boot edilebilen USB diskler de oluşturulabilir. Aşağıda programın örnek bir görüntüsünü de paylaşıyorum.

“Saving changes is not permitted!” uyarısı ve çözümü

SQL Server 2008’de oluşturmuş olduğunuz bir tabloyu güncellemeye çalıştığınızda karşılaşabileceğiniz bir uyarıdır. Uyarının tam metni aşağıdaki gibidir.
Saving changes is not permitted. The change you have made requires the following table to be dropped and re-created. You have either made changes to a table that can’t be recreated or enabled the option prevent saving changes that require the table to be re-created.

Bu uyarı değişiklik izninin olmadığı ile ilgilidir. Çözümü basit…
Sql Management Studio içerisindeki üst menüden Tools -> Options penceresini açıyoruz.

Bu pencerede Designers -> Table and Database Designers sekmesinin altında bulunan “Prevent saving changes that require table re-creation”özelliğini iptal ediyoruz. Böylece tabloları istediğimiz gibi düzenleyebiliriz.

Kodlama Hatası (Latex)

Latex ile bir rapor hazırlarken karşılaştığım bir sorunun çözümünü paylaşacağım. Bildiğiniz gibi Latex dökümanlarından bir çıktı elde ederken Compile – Build işlemlerinden geçiririz. Raporum için bir proje oluşturdum ve aşağıdaki resimde bulunan birkaç satırı yazıp compile ettim.


Görüldüğü üzere herhangi bir içerik eklemedim. Buna rağmen aşağıdaki gibi bir hata aldım.


Missing \begin{document} hatası oluşturulan projenin arka plan karakter kodlamasının yanlış olmasından kaynaklıdır. Projelerinizde \begin{document} yazdığınızı düşünseniz bile arka planda karakter kodlaması farklı olduğundan compiler bunu tespit edememektedir. Bu yüzden seçtiğiniz herhangi bir editör ile bu tex dosyasının karakter kodlamasını “UT8 – BOMSUZ” olarak değiştirmeniz gerekmektedir. Notepad++ ile bu işi çok rahat bir şekilde halledebilirsiniz.