Algoritmalar · Ünite 3
Algoritma Tasarım İlkeleri ve Gösterim Yöntemleri
10 soruluk deneme testine geç ↓1. Program ve program geliştirme döngüsü
Bilgisayarın tek bir işe kilitli olmamasının sebebi programlanabilir olması: ona ne yapacağını söyleyen talimat dizisine bilgisayar programı ya da yazılım denir. Yazılım olmadan bilgisayar hiçbir şey yapamaz. Programları tasarlayan, yazan ve test eden kişi de programcı (yazılım geliştirici).
Profesyonel programcılar yeni bir işe kod yazarak başlamaz, önce programı tasarlar. Tasarım bitince yüksek seviyeli bir dilde kod yazılır. Her dilin anahtar kelimeleri, operatörleri ve noktalama işaretleri için kuralları vardır; bu kurallara söz dizimi (syntax) denir. Bir kural çiğnenirse söz dizimi hatası çıkar ve program derlenemez ya da çalışmaz.
Derlemek mi, yorumlamak mı?
| Derlenen dil (ör. C#) | Betik dili (ör. JavaScript) | |
|---|---|---|
| Kod ne olur? | Derleyici onu 1 ve 0'lardan oluşan makine koduna çevirir | Uygulamaya çevrilmez, yorumlayıcı satır satır yürütür |
| Çalıştırmak için | Ek bir yazılım gerekmez | Yorumlayıcı gerekir (JavaScript için tarayıcı) |
Mantık hatası ve hata ayıklama
Kod çalışır hâle gelince test edilir. Mantık hatası, programın çalışmasını engellemeyen ama yanlış sonuç üreten hatadır; yaygın sebeplerinden biri matematiksel hatalardır. Hatanın yerini bulup düzeltmeye hata ayıklama (debugging) denir. Bazen bu sırada asıl tasarımın değişmesi gerektiği anlaşılır.
- →Program geliştirme döngüsü: Programı tasarla → Kodla → Söz dizimi hatalarını düzelt → Kodu test et → Mantık hatalarını onar → (gerekirse tasarıma dön).
- →Döngü, programda hiç hata kalmayana kadar tekrarlanır.
- →Döngünün ilk ve en önemli adımı algoritma tasarımıdır. Kötü temele kurulan ev gibi, kötü tasarlanmış program da sonradan düzeltmek için yeniden yazmaktan daha çok emek ister.
2. Algoritma tasarımı
Algoritma, bir görevi gerçekleştirmek için atılması gereken iyi tanımlanmış mantıksal adımlar dizisidir. Tasarım süreci iki adımda özetlenir:
- →Programın yapacağı görevi anlamak.
- →Görevi yapmak için atılacak adımları belirlemek.
Görevi anlamak için programcı genelde müşteriyle (programı isteyen kişi, şirket ya da patron) görüşür, bol soru sorar ve bir gereksinim listesi çıkarır. Yazılım gereksinimi, müşteriyi memnun etmek için programın yapması gereken tek bir işlevdir; örneğin «ürün gruplarına göre aylık KDV hesaplayabilmeli». Müşteri listeyi onaylayınca her işlev alt adımlara bölünür.
Görevi adımlara bölmek
Birine çay demlemeyi tarif ettiğini düşün: «Çaydanlığa su koy, ocağa koy, su kaynayınca demliğe çay at, kaynar suyu dök, 15 dakika demlen.» Adımlar sıralı; sırası bozulursa (önce suyu dökersen) sonuç değişir. Bilgisayar da adımları tam yazıldığı sırayla uygular.
Saatlik çalışan birinin brüt ücretini hesaplayan program için adımlar: (1) çalışılan saat sayısını al, (2) saatlik ücreti al, (3) ikisini çarp, (4) sonucu göster. Bu tarif günlük dille yazılmış bir algoritmadır.
3. Algoritmayı göstermenin üç yolu
Algoritma, kodlanmadan önce programlama dilinden bağımsız yazılmalı ki hangi dile istersen çevirebilesin. Üç yaygın yol var: günlük dil, sözde kod ve akış şeması.
| Yöntem | Nasıl görünür? | Artısı |
|---|---|---|
| Günlük dil | Numaralı Türkçe cümleler: «1. Başla. 2. Toplamı 0 yap…» | Herkes anlar, hiçbir kural yok |
| Sözde kod | Kod benzeri ama serbest komutlar: GİRDİ, GÖSTER, EĞER, TEKRARLA | Koda çevirmesi kolay, söz dizimi derdi yok |
| Akış şeması | Sembollerin oklarla bağlandığı diyagram | Akışı bir bakışta gösterir |
Günlük dil
Bir sınıfın not ortalaması: 1. Başla. 2. Toplamı 0 yap. 3. Sıradaki öğrencinin notunu al. 4. Notu toplama ekle. 5. Sırada öğrenci varsa 3. adıma dön. 6. Toplamı öğrenci sayısına böl. 7. Ortalamayı göster. 8. Bitir. Dilden bağımsız olsa da algoritmanın temel özellikleri (veri alma, çıktı üretme, sonlanma) yine görünür.
Sözde (pseudo) kod
«Sözde» sahte demek. Sözde kod, söz dizimi kuralı olmayan, derlenmesi ya da çalıştırılması amaçlanmayan gayriresmî bir dildir. Programcı noktalı virgül, büyük-küçük harf gibi ayrıntılarla uğraşmadan tasarıma odaklanır; tasarım oturunca sözde kod gerçek koda çevrilir.
1. BAŞLA
2. GÖSTER("Çalışılan saat sayısını girin")
3. GİRDİ saat
4. GÖSTER("Saatlik ücreti girin")
5. GİRDİ ucret
6. brut = saat * ucret
7. GÖSTER("Brüt ücret: ", brut)
8. BİTİR- →Kesin bir komut listesi yok: GÖSTER yerine YAZDIR, PRINT, DISPLAY; GİRDİ yerine OKU, READ, INPUT olabilir.
- →Tekrar için TEKRARLA, DÖNGÜ, FOR, WHILE, REPEAT; koşul için EĞER … DEĞİLSE ya da IF … ELSE kullanılır.
- →Her satır, herhangi bir dilde yapılabilecek bir işlemi temsil eder: ekrana yazma, klavyeden okuma, hesap yapma.
1. BAŞLA
2. GİRDİ not
3. EĞER not > 60 İSE
4. GÖSTER("Geçti")
5. DEĞİLSE
6. GÖSTER("Kaldı")
7. BİTİR4. Akış şeması
Akış şeması, bir programdaki adımları grafiksel olarak gösteren diyagramdır. Belirli anlamı olan semboller, programın «akışını» gösteren oklarla birbirine bağlanır. Okuma, Başla sembolünden başlayıp okları izleyerek Bitir'e ulaşana kadar sürer.
| Sembol | Adı | Ne için? |
|---|---|---|
| Oval | Başla/Bitir (sonlandırıcı) | Akışın başlangıç ve bitiş noktası |
| Paralelkenar | Giriş/Çıkış (veri sembolü) | Kullanıcıdan veri alma ya da sonuç verme |
| Dikdörtgen | İşlem (eylem sembolü) | Hesaplama, atama gibi işlemler; en sık kullanılan sembol |
| Eşkenar dörtgen | Karar | Karşılaştırma ve koşul; cevaba göre yol ikiye ayrılır |
| Alt kenarı dalgalı dikdörtgen | Belge | Belge girdisi/çıktısı; çoğu zaman ekrana mesaj vermek için |
| Küçük daire | Bağlayıcı | Aynı sayfadaki birbirinden uzak parçaları birleştirir |
| Ucu sivri beşgen | Sayfa dışı bağlayıcı | Sayfa numarasıyla farklı sayfalardaki parçaları birleştirir |
Elle çizmek en ucuz yol ama bir hata çoğu zaman tüm sayfayı yeniden çizmeyi gerektirir. Daha verimlisi bir yazılım kullanmak; örneğin ücretsiz draw.io sitesinde karşılama ekranında «akış şeması» seçilir, şema Dosya menüsünden dışa aktarılır.
5. Örnek tasarım: maç başına sayı ortalaması
Basketbolda maç başına sayı ortalaması (mbso) = toplam kaydedilen sayı (tks) ÷ oynanan maç sayısı (oms). 50 maçta 300 sayı atan oyuncunun mbso'su 300 / 50 = 6. Programın işi neredeyse her zaman üç aşamaya ayrılır:
| Aşama | mbso programında |
|---|---|
| 1. Girdinin alınması | Kullanıcıdan tks ve oms istenir; ikisi de tam sayı değişkeninde tutulur |
| 2. Girdinin işlenmesi | mbso = tks / oms hesaplanır; sonuç bölme olduğu için ondalıklı (ör. 7,34) tutulmalı |
| 3. Çıktının üretilmesi | mbso, ne olduğunu anlatan bir mesajla ekrana yazılır |
Değişken, program çalışırken bellekte saklanan veriyi temsil eden sembolik isimdir. Değişkenlerin adını, hatta veri türünü tasarım aşamasında düşünmek, sözde kodu gerçek koda çevirirken eksik kalmasını önler. Gereksinimler problem tanımında çoğu zaman açıkça yazmaz; onları programcı çıkarır.
1. BAŞLA
2. GÖSTER("Toplam sayıyı girin")
3. GİRDİ tks
4. GÖSTER("Oynanan maç sayısını girin")
5. GİRDİ oms
6. mbso = tks / oms
7. GÖSTER("Maç başına sayı ortalaması: ", mbso)
8. BİTİR6. Çözümlü örnekler
| Problem | Algoritmanın özü | Akış şemasında dikkat |
|---|---|---|
| Silindirin hacmi | r ve h'yi al → Hacim = π · r² · h → yaz | Girdi paralelkenar, hesap dikdörtgen |
| İki sayıdan büyüğü | x ve y'yi al → x > y ise x'i, değilse y'yi yaz | Tek karar sembolü, iki çıkış yolu |
| ax² + bx + c'nin reel kökleri | Δ = b² − 4ac. Δ < 0 → «reel kök yok»; Δ = 0 → x = −b / 2a; Δ > 0 → iki kök (−b ∓ √Δ) / 2a | İki karar iç içe: önce Δ < 0, sonra Δ = 0 |
| 1'den 10'a kadar yazdır | Sayaç = 1 → yaz → Sayaç = Sayaç + 1 → Sayaç < 11 ise başa dön | Karardan geriye dönen ok döngü kurar |
| N sayının ortalaması | N'yi al, Toplam = 0, Sayaç = 0 → sayı al, topla, sayacı artır → Sayaç < N ise tekrar → Ortalama = Toplam / N | Döngü bitmeden bölme yapılmaz |
Kendini test et!
Cevabı görmek için soruya dokun.
1.Programın çalışmasını engellemeyen ama yanlış sonuç vermesine yol açan hataya ne denir?
✓ Mantık hatası.
2.Algoritma tasarım sürecinin iki adımı nedir?
✓ Programın yapacağı görevi anlamak ve görevi yapmak için gereken adımları belirlemek.
3.Sözde kod neden doğrudan bir derleyicide çalışmaz?
✓ Gerçek bir programlama dili değildir; söz dizimi kuralı yoktur. Önce bir dile çevrilmesi gerekir.
4.Akış şemasında karşılaştırma ve koşul hangi sembolle gösterilir?
✓ Karar sembolü (eşkenar dörtgen).
5.«Kullanıcı bir sayı girsin» adımı akış şemasında hangi sembolle çizilir?
✓ Giriş/çıkış sembolü (paralelkenar).
6.Bir programın eylemleri genelde hangi üç aşamaya ayrılır?
✓ Girdinin alınması, girdinin işlenmesi ve çıktının üretilmesi.
Deneme testi
Sınavda çıkabilecek türden 10 soru. Bir şık seç; doğru cevap ve açıklaması hemen çıkar.
1.Bir dilin anahtar kelimelerinin, operatörlerinin ve noktalama işaretlerinin nasıl kullanılacağını belirleyen kurallara ne ad verilir?
2.Aşağıdakilerden hangisi betik programlama yaklaşımının özelliğidir?
3.«Müşteriyi memnun etmek için programın yerine getirmesi gereken tek bir işlev» aşağıdakilerden hangisinin tanımıdır?
4.Program geliştirme döngüsünde «kodu test et» adımından sonra, hata bulunursa hangi adım gelir?
5.Sözde kod için aşağıdakilerden hangisi doğrudur?
6.Akış şemasında programın başlangıç ve bitiş noktası hangi sembolle gösterilir?
7.Akış şemasında en sık kullanılan, hesaplama ve atama gibi işlemleri gösteren sembol hangisidir?
8.Bir algoritma 1'den 10'a kadar sayıları yazdıracak. Sayaç 1'den başlıyor ve her turda 1 artıyor. Döngünün devam koşulu hangisi olmalıdır?
9.ax² + bx + c = 0 denkleminin köklerini bulan algoritmada Δ < 0 çıkarsa ne yapılır?
10.Basketbolcunun maç başına sayı ortalamasını hesaplayan programda «mbso = tks / oms» satırı hangi aşamaya aittir?
Bu not ders kitabının yerine geçmez; konu kendi cümlelerimizle, yapay zekâ desteğiyle özetlendi.