Algoritma, bir sorunu çözmek veya bir görevi yerine getirmek için izlenen adım adım yöntemler bütünüdür. Günlük hayatta farkında olmadan birçok algoritma kullanırız. Örneğin, çay demlemek veya bir yemek tarifi uygulamak birer algoritmadır. Bilgisayar biliminde ise algoritmalar, bir bilgisayar programının temelini oluşturur.
Algoritma oluşturmak, bir problemi parçalara ayırarak çözmektir. İşte bu sürecin adımları:
Çözmek istediğiniz problemi çok iyi anlamanız gerekir. Problemin ne istediğini, girdilerin ve çıktıların neler olacağını tam olarak belirleyin.
Örnek: "Kullanıcının girdiği iki sayının toplamını bulan bir program" yazmak istiyorsak:
Problemi çözmek için izleyeceğiniz mantıksal adımları sıralayın. Bu adımları akış şeması (flowchart) veya sözde kod (pseudocode) ile ifade edebilirsiniz.
Sözde Kod (Pseudocode) Örneği:
Oluşturduğunuz adımları, farklı senaryolar için kağıt üzerinde deneyin. Örneğin, yukarıdaki algoritmayı a=5, b=3 için deneyip sonucun 8 çıkıp çıkmadığını kontrol edin. Bu adım, olası hataları önceden bulmanızı sağlar.
Doğru çalıştığından emin olduğunuz algoritmayı, bir programlama dili (Python, Java, C++ gibi) kullanarak yazılım haline getirirsiniz.
Problemi Anlama: Kullanıcıdan iki sayı al ve toplamlarını ekrana yazdır.
Algoritma (Sözde Kod):
Python Koduna Dönüşümü:
sayi1 = int(input
Soru 1: Bir kütüphane otomasyonu için kitap arama algoritması tasarlanacaktır. Kullanıcı, kitabın adını girdiğinde sistem, önce "Son Eklenenler" listesini, ardından "Yazar Kataloğu"nu ve en son "Genel Depo"yu tarayacaktır. Kitap bulunduğu anda arama işlemi sonlanacak ve kitabın raf bilgisi kullanıcıya gösterilecektir. Bu durum için en uygun akış şeması sembolü ve açıklaması aşağıdakilerden hangisidir?
a) Veri Girişi - Kullanıcıdan kitap adının alınması
b) Karar - Kitabın bulunup bulunmadığının kontrol edilmesi
c) Başla/Bitir - Algoritmanın başlangıç ve bitiş noktaları
d) İşlem - Kitabın raf bilgisinin ekrana yazdırılması
e) Döngü - Listelerin sırayla taranması işlemi
Cevap: b) Karar - Kitabın bulunup bulunmadığının kontrol edilmesi
Çözüm: Algoritmanın kritik noktası, her bir tarama adımından sonra "Kitap bulundu mu?" sorusunu sormak ve cevaba göre ya sonuç göstermek ya da bir sonraki aşamaya geçmektir. Bu mantıksal sorgulama, bir karar (diamond/elmas) sembolü ile temsil edilir.
Soru 2: Bir öğrenci, klavyeden girilen iki sayının birbirine tam bölünüp bölünemediğini kontrol eden bir algoritma yazmak istiyor. Algoritma, bölüm sonucunu ekrana yazdıracak ve eğer tam bölünmüyorsa kalanı da gösterecek. Aşağıdaki adımlardan hangisi bu algoritmanın temel yapı taşlarını doğru sıralamıştır?
I. Kalanı Hesapla (Sayı1 mod Sayı2)
II. Sayı1 ve Sayı2'yi Oku
III. Kalan 0 ise "Tam Bölünür" yaz, değilse "Kalan: [kalan]" yaz
IV. Bölümü Hesapla (Sayı1 / Sayı2)
a) II - I - IV - III
b) II - IV - I - III
c) I - II - III - IV
d) IV - II - I - III
e) II - III - I - IV
Cevap: b) II - IV - I - III
Çözüm: Algoritmalarda öncelikle girdiler alınır (II). Ardından, sonucu etkilemeyecek olsa dahi bölüm hesaplanabilir (IV). Ancak karar vermek için kalanın hesaplanması (I) şarttır. En son ise karara bağlı olarak çıktı verilir (III). Sıra, girdi-işlem-çıktı mantığına uygundur.
Soru 3: Bir gişedeki işlem süresini azaltmak için müşterilerin numara alarak sıraya girdiği bir sistem düşünün. Gelen müşteriye sıradaki en küçük bir sonraki numara verilir ve gişedeki memur her "Sıradaki!" dediğinde en küçük numaralı müşteri işlemini yaptırmaya gider. Bu sistem aşağıdaki veri yapılarından hangisini örneklemektedir ve bu yapının temel çalışma prensibi nedir?
a) Yığın (Stack) - Son Giren İlk Çıkar (LIFO)
b) Kuyruk (Queue) - İlk Giren İlk Çıkar (FIFO)
c) Bağlı Liste (Linked List) - Rastgele Erişim
d) Ağaç (Tree) - Hiyerarşik Erişim
e) Grafik (Graph) - Çok yönlü ilişki
Cevap: b) Kuyruk (Queue) - İlk Giren İlk Çıkar (FIFO)
Çözüm: Bu senaryoda, işleme alınacak