Konu Anlatımı
Problem Çözme ve Sözde Kod
Bir işi bilgisayara yaptırmadan önce o işi insan diliyle adımlara bölmek gerekir. Sözde kod, bu adımları yazıyla anlatmanın en sık kullanılan yoludur: kutu, ok ve simge kullanılan akış diyagramından daha hızlı yazılır, daha kolay okunur ve kopyalanarak geliştirilebilir. Sözde kod derlenmez; onun görevi çözümü insana anlatmak ve başka bir kişinin de aynı çözümü kurmasını sağlamaktır.
Bu konuda sözde kodun hangi kurallara göre yazıldığını, bir problemi adımlara börmenin neden zorunlu olduğunu, örnek verilerle nasıl sınandığını ve ortaya çıkan hatanın kök nedenine nasıl dönüldüğünü göreceğiz. Ön bilgi olarak değişken, koşul ve döngü kavramlarına hâkim olmak gerekir.
1. Ne Öğreneceğiz ve Ön Bilgi
Sözde kod yazmak, kod yazmaktan farklı bir iş değildir; kod yazmanın düşünme aşamasıdır. Çözüm dil bilgisine bağlı olmadan kafada kurulur, kâğıda dökülür, sınanır ve ancak sınama başarılı olduğunda gerçek koda dönüştürülür. Bu yüzden sözde kodda harf harf düzeltme yapılmaz; eksik kalan bir adım sonradan çok büyük zarar verir.
- Problemin ne istediğini ve hangi girdilerle çalıştığını açıkça yazma
- Çözümü atama, koşul, döngü ve çıktı olmak üzere dört temel yapıyla anlatma
- Her adımı tek bir eyleme indirgeyerek belirsizliği kaldırma
- Örnek değerlerle adımları izleyerek çözümü sınama ve düzeltme
Sözde kodun dört temel yapısı olmasa çözüm anlatılamazdı. Atama bir değeri değişkene yazar, koşul akışı iki yana böler, döngü tekrarlanan işlemi kısaltır, çıktı ise sonucu dışarıya aktarır. Bu dört temel yapı dışında hiçbir komuta gerek yoktur.
2. Temel Kavramlar ve Sınıflandırma
Bir çözümde kullanılan değişkenler üçe ayrılır. Sayısal değişken tam sayı ya da ondalık değer tutar, sözel değişken ad gibi yazıları saklar, algılanabilir değişken ise bir ölçümle sayısal değere dönüştürülebilen büyüklükleri taşır. Sözde kod yazarken değişkenin tutacağı değerin türünü bilmek, sonraki adımlarda hangi işlemin yapılabileceğini baştan belirler.
Dizi, birbirine bağlanmış aynı türdeki değerlerden oluşan topluluktur ve dizi elemanlarına sıra numarasıyla erişilir. Bu sıra numarasını tutan değişkene indeks denir. Toplama, çarpma ve bölme gibi sayısal işlemler yalnızca sayısal değişkenler üzerinde yürütülebilir.
| Temel yapı | Sözde koddaki karşılığı | Küçük örnek |
|---|
| Atama | Bir değeri değişkene yazar | toplam 0 |
| Koşul | Akışı iki yana böler | sayı beş ise |
| Döngü | Tekrarlanan işlemi kısaltır | sayaç birden son değere kadar |
| Çıktı | Sonucu dışarıya aktarır | yaz toplam |
Yazım kuralları daima aynıdır: her satır yalnızca bir iş yapar, değişken adı tuttuğu şeyi anlatır ve adımlar sırayla yazılır. Bir satıra hem karşılaştırma hem atama hem de çıktı yazılırsa hatanın kaynağı bulunamaz. Aynı biçimde bütün değişkenlere tek harf vermek çözümü okunmaz hâle getirir.
3. Basit Örnek ve Adım Adım Çözüm
Bir liste içindeki sayıların toplamını bulan çözüm şu sırayla kurulur. Önce toplamı tutacak değişken sıfıra ayarlanır, sonra dizinin ilk elemanından sonuncusuna kadar bir döngü açılır ve her turda o eleman toplama eklenir. Döngü bittiğinde toplam yazdırılır.
- Toplamı tutacak değişkeni oluştur ve başlangıç değerini sıfır yap
- Bir sayaç değişkeni kur ve dizinin ilk elemanına ata
- Sayaç son elemanı da kapsayacak biçimde döngüyü tekrarla
- Her turda dizenin o elemanını toplama ekle
- Döngü bittikten sonra toplamı yazdır
Bu çözümde toplamın sıfırdan başlatılması şarttır. Başka bir değerle başlanırsa o sabit toplama karışır ve sonuç gerçek toplamı vermez. Döngünün bitiş koşulu da son elemanı kapsayacak biçimde kurulmalıdır; son eleman işlenmeden döngü kapanırsa bir sayı eksik kalır.
4. İleri Örnek ve Saha Uygulaması
Sıralama ve arama algoritmaları, sözde kodun gücünü en iyi gösteren çalışmalardır. Seçmeli sıralamada her turda dizinin kalan kısmi taranır ve en büyük eleman sona yerleştirilir; tur sayısı eleman sayısının bir eksiğidir. Kabarcık sıralamasında ise komşu ikililer karşılaştırılır, küçük olan sola geçirilir ve en fazla eleman sayısının bir eksiği kadar geçişte dizi düzenli hâle gelir.
İkili arama sıralı bir dizide ortadaki elemanı karşılaştırarak arama uzayını yarıya indirir; bu yüzden çok sayıda kayıtta tek tek taramaktan çok daha çabuk sonuç verir. Sıralanmamış bir dizide ikili arama çalışmaz, çünkü hedefin hangi yarıda aranacağı belli olmaz. İki yöntemin karşılaştırması aşağıdaki tabloda görülmektedir.
| Ölçüt | Tek tek tarama | İkili arama |
|---|
| Dizi sıralı olmalı mı | Gerekmez | Şarttır |
| En kötü durumdaki karşılaştırma | Eleman sayısı kadar | Logaritma düzeyinde azalır |
| Küçük dizilerde sonuç | Daha çabuk bulunur | Ek yükten dolayı gecikebilir |
| Ek bellek gereksinimi | Yoktur | Yoktur |
Saha uygulamasında ölçme yapılacaksa sıra önemlidir: önce çözüm kâğıda yazılır, sonra örnek verilerle izlenir, en sonra gerçek koda dönüştürülür. Bu sıralama sayesinde hata kod aşamasına geçmeden yakalanır ve düzeltmesi dakikalar sürer.
5. Karşılaştırma Tablosu ve Denetim
Bir çözüm dört denetimden geçmelidir: doğruluk, etkinlik, okunabilirlik ve dayanıklılık. Doğruluk için normal, sınır ve hatalı girdilerle çalıştırılır. Etkinlik için gereksiz adım ve tekrarlar aranır. Okunabilirlik için adlandırma ve satır düzeni incelenir. Dayanıklılık için izin verilmeyen bir girdi verildiğinde çözümün ne yapacağı denenir.
| Denetim ölçütü | Sorulacak soru | Başarısız örneği |
|---|
| Doğruluk | Beklenen çıktı geliyor mu | Sınır değerinde bir eleman eksik |
| Etkinlik | Gereksiz adım var mı | Aynı işlem beş kez yazılmış |
| Okunabilirlik | Adlar neyi anlatıyor | Bütün değişkenler tek harfli |
| Dayanıklılık | Hatalı girdide ne oluyor | Sıfır değeriyle bölme denemesi |
Kuru çalıştırma, denetimin en yararlı yoludur: gerçek makineye ihtiyaç duymadan örnek değerler kâğıda yazılır ve her adımda değişkenlerin aldığı değerler tek tek izlenir. Çıktı beklenenden farklıysa izleme durdurulmaz; değerlerin hangi adımda bozulduğu bulunana dek sürdürülür ve kök neden o adımda aranır. Çözüm baştan yeniden yazılmaz, yalnızca hatalı adım düzeltilir.
6. Sık Yapılan Hatalar, Özet ve Kendini Dene
En sık görülen hata, döngüde sayaç artırma satırının unutulmasıdır. Bitiş koşulu doğru yazılmış olsa bile sayaç hep aynı değerde kalıyorsa döngü hiç sona ermez. İkinci hata, eşitlik denetimini atlamaktır; son eleman işlenmeden döngü kapanır ve bir sayı eksik kalır. Üçüncü hata, döngü içine çıktı adımı yazmaktır; sonuç her turda ekrana basılır.
Kendini dene bölümü için şu dört soruyu yanıtlaman yeterlidir. Problemin girdisi ve çıktısı nedir? Kullanılan dört temel yapı hangileridir? Çözümü hangi örnek verilerle sınadın? Sınama sırasında hangi değer beklenenden farklı çıktı? Bu soruların dördüne de yanıt verebiliyorsan yazdığın sözde kod gerçekten bir çözümdür.
Özet olarak sözde kod, problemi anlamaktan sonra başlayan bir düşünme ve yazım yöntemidir. Girdi, çıktı ve kısıt belirtilmeden yazılan bir çözüm eksiktir ve sınanamaz. En kısa çözüm her zaman en iyi çözüm değildir; doğru çalışan ve başkasının okuyabildiği çözüm tercih edilir.