Algoritma ve Akış Şemaları
Konuya Giriş ve Öğreneceklerimiz
Bugün telefonlarımızda oyun oynarken, internetten alışveriş yaparken veya harita uygulamasından bir yere gitmek için yol tarifi alırken arka planda sürekli çalışan muazzam bir güç vardır: Algoritmalar. Bilgisayarlar aslında bizim kadar "zeki" değillerdir; onlara adım adım, son derece net ve kesin talimatlar vermediğimiz sürece hiçbir şey yapamazlar. İşte bir problemi çözmek veya bir amaca ulaşmak için tasarlanan bu adım adım kurallar dizisine algoritma diyoruz.
Bu konuda şunları öğreneceğiz: * Algoritmanın ne olduğunu ve mantığını kavramayı, * Algoritmaları sözde kod (pseudo code) ile adım adım ifade etmeyi, * Cebirsel ifadeleri bir algoritmanın basamakları hâline dönüştürmeyi, * Akış şemalarındaki (flowchart) geometrik şekillerin anlamlarını, * Akış şemalarını kullanarak döngüler oluşturmayı ve hata (bug) bulmayı.
Algoritma Nedir?
Bir problemi çözmek veya belirli bir görevi yerine getirmek için izlenmesi gereken, mantıksal sıralamaya sahip işlem basamaklarının bütününe algoritma denir.
Aslında farkında olmadan günlük hayatımızda da algoritmalar kullanırız. Örneğin bir kek yapmak için uyguladığımız tarif bir algoritmadır: 1. Adım: Malzemeleri hazırla. 2. Adım: Yumurta ve şekeri çırp. 3. Adım: Un ve kabartma tozu ekle, karıştır. 4. Adım: Karışımı kaba dök. 5. Adım: Fırında $180^\circ$C'de 30 dakika pişir. 6. Adım: Keki fırından çıkar ve bitir.
Bu adımların sırasını değiştirirsek (örneğin önce fırına koyup sonra yumurta kırmaya kalkarsak) hedefimize (kek yapmaya) ulaşamayız. Bilgisayarlar için yazılan algoritmaların da aynı derecede katı, mantıklı ve kesin bir sıraya sahip olması gerekir.
Sözde Kod (Pseudo Code) İle Algoritma Yazmak
Bilgisayarların anlayacağı diller (Python, C++, Java vb.) karmaşıktır. Ancak biz bir algoritmayı kurarken, önce kendi konuşma dilimize yakın bir dille taslak hazırlarız. Buna sözde kod denir.
Örneğin, kırtasiyeden alınan $5$ adet kalemin toplam fiyatını hesaplayan bir algoritmanın sözde kodu şöyledir: * 1. Adım: Başla. (Her algoritma "Başla" ile başlar.) * 2. Adım: Satın alınacak kalem sayısını belirle (Bu örnekte $5$). * 3. Adım: Bir kalemin fiyatını sistemden gir ($x$). (Bu bir dışardan veri girişidir) * 4. Adım: Toplam Ücret = Kalem sayısı $\times$ Kalem fiyatı ($5 \cdot x$) (Burası hesaplamanın (cebirin) yapıldığı yerdir) * 5. Adım: Toplam Ücreti ekrana yazdır. (Bilgi çıkışı) * 6. Adım: Bitir. (Her algoritma "Bitir" ile son bulmalıdır.)
Bu sözde kodda, 4. adımda bir önceki konuda öğrendiğimiz cebirsel ifade ($5x$) mantığının çalıştığına dikkat edin. Algoritmaların beyni genellikle cebirsel işlemlerden oluşur.
Akış Şeması (Flowchart)
Sözde kodlarla yazdığımız adımları, evrensel bir görsel dile çevirerek herkesin daha hızlı ve net anlamasını sağladığımız şemalara akış şeması diyoruz. Akış şemalarında her işlemin kendine özel bir geometrik şekli vardır.
- Elips (Oval): Algoritmanın başlama ve bitiş (Başla / Bitir) adımlarını temsil eder.
- Paralelkenar: Dışarıdan sisteme veri girişini veya okumayı ifade eder (Örneğin; "Yaşınızı giriniz").
- Dikdörtgen: Matematiksel hesaplamaların, cebirsel işlemlerin ve atamaların yapıldığı işlem kutusudur (Örneğin; Toplam = $a + b$).
- Eşkenar Dörtgen (Baklava Dilimi): Karar verme ve karşılaştırma (Eğer / Değilse) adımlarıdır. İçinde bir soru vardır. Cevaba göre (Evet veya Hayır) akışın yönü iki farklı yola ayrılır.
- Oklar: Algoritmanın ilerleme yönünü, hangi kutudan hangisine gidileceğini gösterir.
- Dalgalı Dörtgen (Belge/Çıktı Şekli): Sonuçların ekrana veya yazıcıya yazdırılmasını temsil eder.
Örnek Akış Şeması: Dikdörtgenin Çevresini Hesaplama
Bir dikdörtgenin çevresini bulmak için önce kısa ($x$) ve uzun ($y$) kenarları bilmemiz gerekir. Formülümüz ise $2 \cdot (x + y)$ veya $2x + 2y$'dir. Bunun akış şemasını zihnimizde şu şekilde canlandırabiliriz: 1. Elips: Başla 2. Paralelkenar: Kısa kenar uzunluğunu ($x$) gir. 3. Paralelkenar: Uzun kenar uzunluğunu ($y$) gir. 4. Dikdörtgen: Çevre = $2 \cdot (x + y)$ (Hesaplama) 5. Çıktı Şekli: "Çevre" değerini ekrana yazdır. 6. Elips: Bitir.
Döngüler ve Karar Yapıları
Algoritmaların en güçlü tarafı bıkıp usanmadan aynı işlemi yüzlerce kez tekrar edebilmeleridir. Biz buna döngü (loop) diyoruz. Döngüler, Eşkenar Dörtgen (karar) kutusu kullanılarak kurulur.
Bir Şekil Örüntüsünü Algoritmaya Dökme: Diyelim ki ilk terimi 2 olan ve her adımda 2 artan ($2, 4, 6, 8, \dots$) bir örüntüyü ekrana yazdırmak istiyoruz. Ancak bu sonsuza kadar gitmesin, terim 18'den büyük olunca dursun.
- Başla
- Atama (Dikdörtgen): $n = 2$ (Sayıya 2 değerini ver, bu bizim ilk terimimiz)
- Çıktı: Sayıyı (n) ekrana yazdır.
- Karar (Eşkenar Dörtgen): $n$ sayısı 18'den büyük mü?
- Cevap EVET ise: Alt adıma geç (Bitir'e git).
- Cevap HAYIR ise: Yeni $n = n + 2$ yap (sayıyı 2 artır) ve 3. adıma geri dön!
- Bitir
İşte 4. adımdan 3. adıma doğru çizilen ok, algoritmanın dönmesini, yani bir döngü oluşturmasını sağlar. Bilgisayar bu döngü içinde sırasıyla $2, 4, 6, 8, 10, 12, 14, 16, 18$ sayılarını yazar ve karar kutusuna geldiğinde "18'den büyük mü?" sorusuna (örneğin bir sonraki adım olan 20 için) "Evet" yanıtını bulunca döngüden çıkıp sistemi durdurur.
Algoritmik Hataları (Bug) Bulma ve Düzeltme
Bazen yazdığımız algoritmalar istenen sonucu vermez. Adımları yanlış sıralamak veya hatalı işlem kullanmak, programlama dünyasında "bug" (böcek) olarak adlandırılan hatalara yol açar.
Hatalı Bir Örnek İnceleyelim: İki sayının ortalamasını bulan bir algoritma yazalım. 1. Başla 2. 1. sayıyı ($a$) gir 3. Toplam = $a + b$ 4. 2. sayıyı ($b$) gir 5. Ortalama = Toplam $\div 2$ 6. Ortalamayı Yazdır 7. Bitir
Hata nerede? Dikkat ederseniz 3. adımda Toplam = $a + b$ hesabını yapıyoruz ama $b$ (ikinci sayı) henüz sisteme girilmedi! Sistem $b$'nin ne olduğunu bilmediği için burada çöker (hata verir). Düzeltme: 4. adımı (2. sayıyı girme) mutlaka 3. adımdaki hesaplama işleminden önceye almalıyız.
Sık Karşılaşılan Kavram Yanılgıları
Yanılgı 1: "Akış şemalarında hangi şekli kullandığımızın bir önemi yoktur, sonuçta hepsi bir kutudur." Doğrusu: Kesinlikle yanlıştır. Akış şemalarındaki şekiller evrensel bir standarttır. Japonya'daki bir mühendis ile Türkiye'deki bir mühendisin aynı algoritmayı okuyup anlayabilmesi bu standartlar (paralelkenar, dikdörtgen, eşkenar dörtgen) sayesindedir. Hesaplama için paralelkenar kullanmak, trafik ışıklarında kırmızıda geçip yeşilde durmaya çalışmak gibi kural dışı ve hatalıdır.
Yanılgı 2: "Bilgisayarlar çok zeki olduğu için küçük hataları (örneğin eksik bir değişkeni) kendi kendilerine anlayıp düzeltebilirler." Doğrusu: Bilgisayarlar sıfır zekâya sahip mükemmel itaatkâr işçilerdir. Siz onlara "X işlemini yap" derseniz o işlemi yaparlar. X'in nasıl yapılacağını önceden tanımlamadıysanız sistem durur ve hata verir. Algoritmaların her olasılığı hesaplaması ve adım adım mantıksal olması bu yüzden zorunludur.
Öğrencilerin Sıkça Sorduğu Sorular
Soru: Döngülerde karar (baklava dilimi) kullanmayı unutsak ne olur? Cevap: Harika bir soru! Eğer bir döngüde ne zaman durması gerektiğini (şartı) karar kutusuyla belirtmezsen, sonsuz döngü (infinite loop) denilen durum ortaya çıkar. Program sonsuza kadar aynı işlemi tekrarlar ve en sonunda cihazın hafızası veya işlemcisi dolarak (halk tabiriyle) cihaz çöker.
Soru: Sözde kodu daha az adımda yazmak mümkün mü? Mesela "1. sayıyı gir, 2. sayıyı gir" demek yerine "Bütün sayıları gir" diyebilir miyiz? Cevap: Evet, bir algoritmayı çok karmaşık adımlarla da, daha verimli (kısa) adımlarla da yazabilirsiniz. İkisi de aynı doğru sonucu veriyor olabilir. Ancak daha az işlem ve hafıza tüketen, daha pratik tasarlanmış algoritmalara "daha verimli algoritma" denir. Yazılım dünyasında herkesin amacı sadece sonucu bulmak değil, sonucu "en az adımda, en hızlı şekilde" bulmaktır.
Özetle
Algoritmalar ve akış şemaları, cebirsel düşüncenin sadece kâğıt üzerinde kalmayıp gerçek dünyadaki makineleri ve programları nasıl yönettiğini gösterir. Bir probleme matematiksel bir cebir kuralı yazmak, o problemi bir bilgisayara çözdürmek için attığınız ilk ve en büyük adımdır. Karar yapıları (eşkenar dörtgen) ve işlem adımlarını (dikdörtgen) doğru yönettiğiniz sürece teknoloji dünyasının kapıları size her zaman açık olacaktır.