Konu Anlatımı
Döngülerde Akış Kontrolü
Bir işlemi belirli sayıda ya da belirli bir koşul sağlanana dek tekrarlayan döngüler programlamanın en çok kullanılan yapılarıdır. Çoğu zaman döngünün her turunda aynı işin yapılması gerekmez: bazen aranan kayıt ilk bulunduğunda döngü hemen bitmeli, bazen de bazı turlar tümüyle atlanmalıdır. Döngü gövdesi içinde çalışan ve programın o bölümünün yolunu değiştiren yapılara akış kontrolü denir.
Bu konuda iki temel komutu, birbirinden nasıl ayrıldıklarını, iç içe döngülerde neler yaptıklarını ve yanlış kurulan bir döngünün neden hiç bitmediğini öğreneceğiz. Ön bilgi olarak döngü kurma, koşul yazma ve değişkene değer atma konularına hâkim olmak gerekir.
1. Ne Öğreneceğiz ve Ön Bilgi
Önceki konularda bir döngünün başlangıç değerini, bitiş koşulunu ve artış adımını öğrenmiştik. Şimdi bu üç parçanın arasına giren iki yeni komutu tanıyoruz. Bu komutlar ne koşulu ne de artış adımını değiştirir; yalnızca gövdenin o andaki yürütülme sırasını değiştirirler.
- Koşul sağlandığı anda içinde bulunulan döngüyü bitiren komut
- Bulunulan turu atlayıp bir sonraki tura geçen komut
- İki komutun iç içe döngülerdeki farklı etkisi
- Sayaç artışının atlanmasıyla ortaya çıkan sonsuz döngü ve çözüm yolları
Bir döngünün kaç tur çalışacağını önceden kestirebiliyorsak sayaçlı döngü, kestiremiyorsak koşullu döngü tercih edilir. Akış kontrol komutları her iki döngü türünde de aynı görevi görür; yalnızca bulundukları döngünün kapsamı dikkate alınır.
2. Temel Kavramlar ve Sınıflandırma
Döngüyü sonlandıran komut, kendisine gelindiği anda içinde bulunulan döngünün tamamını bitirir ve akış döngü bloğunun hemen altındaki satıra taşınır. Arama, bulma, bir koşulun ilk sağlandığı yerde işi bitirme gibi durumlarda bu komut kullanılır.
Turu atlayan komut ise döngüyü bitirmez. Yalnızca içinde bulunulan turda kendisinden sonra gelen satırların çalışmasını engeller ve akış bir sonraki tura geçer. Bir turda yapılacak iş yapılmayacaksa ya da o turda farklı bir iş yapılacaksa bu komut seçilir.
İkisi arasındaki temel ayrım etki alanıdır. Döngüyü sonlandıran komut bütün döngüyü kapatır, turu atlayan komut yalnızca bulunulan tekrarda kalan işlemleri iptal eder. Turu atlayan komut, gövdenin son satırına yazılmış artış adımına da geçmez. Böyle bir kurulumda koşul bir daha sağlanamaz ve döngü sonsuza dek sürer.
| Özellik | Döngüyü sonlandıran komut | Turu atlayan komut |
|---|
| Etkilediği bölüm | Döngünün tamamı | Yalnızca bulunulan tur |
| Akışın gittiği yer | Döngü bloğunun altındaki satır | Bir sonraki turun başı |
| Döngü çalışmayı sürdürür mü | Sürdürülmez, döngü kapanır | Sürdürülür, döngü açık kalır |
| Yaygın kullanım | Arama, bulma, koşul sağlanınca durma | Bazı turları dışarıda bırakma, eleme |
İç içe döngülerde her komut yalnızca ait olduğu en içteki döngüyü etkiler. İç döngüde kullanılan sonlandırma komutu dış döngüyü durdurmaz; dış döngünün kalan turları, iç döngü baştan başlatılarak sürdürülür.
3. Basit Örnek ve Adım Adım Çözüm
Bir listedeki kayıtları sırayla denetleyip yalnızca uygun olanları yeni bir listeye aktarmak için turu atlayan komut kullanılır. Bu örnekte listede yirmi kayıt vardır ve bunların yedisi negatiftir; negatif olanlar aktarılmayacaktır.
- Adım 1: Döngüyü listenin birinci kaydından başlayarak son kayda kadar kur.
- Adım 2: Her turda kaydın işaretine bak; negatif olan kayıtta turu atlayan komutu çalıştır.
- Adım 3: Negatif olmayan kaydı yeni listeye ekleyen satırı yaz.
- Adım 4: Döngü bittikten sonra yeni listedeki kayıt sayısını ekrana yazdır.
Sonuç olarak yeni listeye on üç kayıt aktarılır. Burada dikkat edilecek nokta döngünün sonuna kadar açık kalmasıdır; ilk uygun kayıtta döngü kapatılsaydı listedeki diğer kayıtlara hiç bakılamazdı.
4. İleri Örnek ve Saha Uygulaması
Bir okuldaki öğrenci listesinde aranan numarayı bulmak için döngü kurulmuştur. Arama başarıyla sonuçlandığında programın gereksiz yere çalışmaya devam etmemesi için döngü o noktada kapatılmalıdır. Bu yaklaşım gerçek kayıt sistemlerinde arama sürelerini belirgin biçimde kısaltır.
- Numaralar dizisinin başından sonuna kadar tek tek denetlenir.
- Her numara, aranan numarayla karşılaştırılır.
- Eşleşme bulunduğunda sıra bilgisi bir değişkene yazılır ve döngü kapatılır.
- Eşleşme bulunamazsa döngü, son kayıttan sonra kendiliğinden biter.
Bu uygulamada iki davranış bir arada kullanılmıştır: arama bulunduğunda döngüyü sonlandıran komut, arama sürerken geçersiz kayıtları yok sayan turlarda ise turu atlayan komut. Böylece hem doğru sonuç hem de kısa süre elde edilir.
5. Karşılaştırma Tablosu ve Denetim
Yazılan bir döngüyü yayına almadan önce aşağıdaki başlıklar sırayla denetlenmelidir. Denetimde ilk boşluk bulunan başlıkta çalışma durdurulup düzeltme yapılır; böylece hatalar tek tek ortaya çıkar ve birbirine karışmaz.
| Denetim başlığı | Aranacak ölçüt |
|---|
| Koşulun ilerleyişi | Bitiş koşulu, gövdede değişen bir değere bağlı mı |
| Sayaç konumu | Artış adımı koşul denetiminden önce çalışıyor mu |
| Komut kapsamı | Sonlandırma komutu hangi döngüye ait, etkisi nerede bitiyor |
| Atlanan satırlar | Tur atlatma komutundan sonraki satırlar her turda gerekli mi |
| En uzun süre | Döngünün en fazla kaç tur döneceği hesap kâğıdında doğrulandı mı |
Denetimi kolaylaştırmak için döngüye bir tur sayacı eklemek yararlıdır. Bu sayaç yalnızca denetim amacı taşır ve döngünün gerçekte kaç kez çalıştığını ekrana yazar.
6. Sık Yapılan Hatalar, Özet ve Kendini Dene
Bu konuda en sık karşılaşılan dört hata şöyledir. Birincisi, turu atlayan komutu sonlandırma komutu sanıp döngüyü beklenenden erken bitirmek. İkincisi, gövdenin son satırındaki artış adımının atlanmasıyla sayaçın hiç ilerlememesi. Üçüncüsü, koşulda hiç değişmeyen bir sabit kullanıp sonsuz döngüye yol açmak. Dördüncüsü, iç döngüdeki bir komutun dış döngüyü de durdurduğunu düşünmek.
- Her döngüde, koşulu ilerleten bir satır bulunduğunu doğrula.
- Akış komutlarını yazmadan önce o satırda yapılacak işin gerekip gerekmediğini sor.
- İç içe döngüde her komutun hangi döngüyü etkilediğini satır satır izle.
- Döngüyü en az üç farklı değer kümesiyle çalıştırıp sonuçları karşılaştır.
Özetle akış kontrolü, döngünün normal seyrini değiştiren iki güçlü araçtır. Döngüyü sonlandıran komut işi bitirdiğimizde kullanılır; turu atlayan komut o turda iş yapılmayacağından kullanılır. Doğru komut seçildiğinde program daha kısa sürede çalışır ve döngünün neden durduğu kolayca anlaşılır.