Algoritmaya Giriş #6 - Döngüler

 Algoritmaya Giriş serimin ilk beş yazısında algoritma tanımından, girdi/çıktı işlemlerinden, değişkenlerden ve koşul yapılarından Flowgorithm aracılığıyla bahsettim. Bu yazımda ise artık programlamanın bir diğer yapıtaşı olan döngülere geçiş yapıyoruz.

Döngüler genel olarak bir kod bloğunun onlarca, yüzlerce kez çalışması gerektiği durumlarda hayat kurtaran bir çözüm olarak karşımıza çıkar. Döngüler olmasaydı, tekrar tekrar çalışması gereken kod bloklarını elle yazmamız ya da en iyi ihtimalle kopyala-yapıştır yapmamız gerekecekti. Örneğin ilk 1000 sayma sayısının toplamını bulan bir program yapmanız gerektiğini düşünün, 1'den 1000'e kadar bütün sayıları toplayan bir kod bloğu yazmanız gerekecekti. Ya da daha geçerli bir örnek vereyim, örneğin Fibonacci dizisinin 1000. elemanını bulan bir program yapmak istiyorsunuz. Fibonacci dizisinin 1000. elemanını döngü kullanmadan bulana kadar siz o 1000. elemanın ne olduğunu zaten öğrenmiş olursunuz :)

Döngüler, belli bir sayısal değerden başlayan ve belli bir sayısal değere kadar belli adımlarla ilerleyecek şekilde inşa edilen yapılardır. Bu serideki Diziler yazısından aşina olduğunuz "for" döngüsü, gerçek bir programlama dilinde genellikle şu şekilde yazılır:

for(var = ilkDeger; var <= sonDeger; var += step)

{

    ...

}

Burada ilkDeger, döngünün sayacı olan var değişkeninin döngüde alacağı ilk değeri, sonDeger bu değişkenin alacağı son değeri, step ise ilkDeger'den sonDeger'e kaçar adımla gideceğimizi (örneğin step = 1 ise ilkDeger, ilkDeger + 1, ilkDeger + 2..., step = 2 ise ilkDeger, ilkDeger + 2, ilkDeger + 4...) belirler. Tabii ki artan döngüler dışında azalan döngüler de bulunmakta.

Flowgorithm'de programınıza döngü eklemek istiyorsanız akış diyagramındaki oklardan herhangi birine tıklayın ve aşağıdaki menüden "Loops" veya "Döngüler" altbaşlığını bulun.


Bu yazıda bahsedeceğim bütün döngüler sağdaki "Döngü" alt başlığında yer almakta. Hadi başlayalım.

For Döngüsü

Flowgorithm'deki For yapısını Diziler yazısında kısaca kullanmıştım, ancak madem ki bu yazıyı tamamen döngülere ayırdım, o halde For döngüsünden detaylı olarak bahsetmek istiyorum. For döngüsü, yazılım dünyasında en çok kullanılan döngüdür, yazılımda "döngü" denince akla gelen ilk yapıdır.

Bu yapının Flowgorithm'deki kuruluşunu örnek bir programcıkta gösterelim:



Yukarıdaki örnek programımızda döngüde kullanılmak üzere bir i değişkeni tanımlıyoruz. Bir altındaki altıgen şeklindeki blok ve o bloktan çıkıp o bloğa giren oklar bizim "for" döngümüzü oluşturuyor. Bu döngümüz 0'dan 3'e gidiyor ve her adımda i değişkeninin değerini yazdırıyor.



Flowgorithm'deki "For" bloğunun menüsü, "For" bloğumuza çift tıkladığımızda yukarıda çıkıyor. Menüde en yukarıda döngünün kullanacağı değişkenin ismini girdiğimiz bir kutucuk yer alıyor, bu kutucuğa ismini girdiğimiz değişkenin tanımlanmış olması gerekiyor. Bir alt satırda; solda bu değişkenin alacağı ilk değer, sağda ise bu değerin alacağı en son değer giriliyor. En son değerin bir altında başlangıçtan bitişe bu değerin kaç kaç gideceğini gireceğimiz bir kutucuk yer alıyor. Onun solundaki "Yön" alt başlığında ise, bu döngünün artan mı azalan mı olduğunu belirttiğimiz bir seçim yer alıyor. Eğer "Artan" seçeneğini seçersek döngü sırayla 0, 1, 2 ve 3 değerlerinden geçecek, "Azalan" seçeneğini seçersek de döngü 0'dan azalmaya başlayacaktır. Gerçek programlama senaryosunda bu ikinci durum hatalı bir döngü kurduğumuz anlamına gelecektir.

Eğer bu değerlerden bir tanesini eksik girerseniz sadece gri renkli "For" yazan bir blok karşınıza çıkacak ve bu blok çalıştırılmayacaktır.

While Döngüsü


Programlama dünyasının ikinci en çok kullanılan döngüsü "While" döngüsü olarak geçer. For döngüsüne göre biraz daha ilkel bir döngüdür, çünkü döngü koşulu tanımlanırken sadece sağlanması beklenen koşulu girersiniz. Döngünün kaçar kaçar ilerleyeceği ise tamamen size kalır. Döngü bir sayaç değişkeni kullanacaksa sayaç değişkenin ilk değerini önceden tanımlamanız gerekir.

For döngüsü örneğimizde tanımladığımız programın "While" döngüsüyle yapılmış örneği aşağıdaki şekildedir.

While döngüsünü programınıza ekleyip içine sağlaması beklenen önermeyi (bu örnek için i < 3) yazdıktan sonra "Doğru" okunun içine döngü bloğunda çalışmasını istediğiniz bütün kod parçalarını yazdıktan sonra "i = i + 1" bloğuyla i değişkeninin değerini birer birer arttırarak blok içinde yazan önerme sağlanmaya devam ettiği sürece "Doğru" okundan devam ediyor, önerme sağlanmadığı anda eni sonu döngüden çıkıyorsunuz.


While bloğunun menüsünde, For döngüsünün aksine bu döngünün sağladığı sürece çalışacağı önermeyi girdiğimiz tek bir kutucuk çıkıyor. Burada biz önermeyi i < 3 olarak girdiğimiz için ekrana sırayla 0, 1 ve 2 yazdıracak. i <= 3 girersek de küçük eşittir olduğundan 0, 1, 2 ve 3 değerlerini ekrana yazdırıp programdan çıkacak.

Gerçek programlama örneklerinde while döngüsü tabii ki sadece sayısal sayaç değişkenleriyle kullanılmaz. Bu tür bir kullanım burada while döngüsünün mantığını en basit ve hızlı şekilde anlatabilmek için tercih edilmiştir.

Do-While Döngüsü


Programlama dünyasında sıklıkla kullanılan üçüncü bir döngü türü ise do-while. Bu döngü, adından anlaşılabileceği gibi while yapısına çok benziyor, ancak arada bir temel fark bulunmakta ve bu farkı Flowgorithm son derece güzel bir şekilde gösteriyor. Öncelikle While döngüsü kullanan örneğimizi Do-While döngüsüyle yeniden yapalım. Flowgorithm'de bu döngü "Do" bloğu olarak geçer.



Do-while, ya da Flowgorithm'de "Do" döngüsünü kullanan programcığımız bu şekilde. Bu programda, tıpkı While döngüsünde olduğu gibi sayaç değişkenimizin alacağı ilk değer önden tanımlanmış oluyor. Bu tanımlama gerçekleştikten sonra yuvarlaktan sağ oka geçip i değerini yazdırıyor, sonra da i değerini bir bir arttırıyor. Ardından döngü bloğuna girip önermeyi kontrol ediyor ve eğer önerme doğruysa yukarı çıkan okla yuvarlağa geri dönerek döngüyü devam ettiriyor, aksi takdirde döngüden çıkıyor ve program akışına devam ediyor.

Do-While döngüsünü While döngüsünden ayıran en önemli özellik de tam olarak burada. Dikkat ederseniz While döngüsünde önce önerme kontrol ediliyor, önerme doğru ise döngüye giriliyordu. Do-While döngüsünde ise öncelikle döngüde tanımlanan kod blokları çalıştırılıyor, sonra önerme kontrol ediliyor ve doğruysa döngü devam ediyor. Yani Do-While, While döngüsünün aksine en az bir kez mutlaka çalışıyor. Do-While, en basitinden konsol uygulamalarında menü ekranları yazacağınız zaman, ya da yanlış şifre girildiği zaman tekrar şifre girmesini isteyeceğiniz zaman oldukça kullanışlı bir döngüdür.

Do-While'ın ilk sefer mutlaka çalıştığını görmek istiyorsanız, yukarıdaki programdaki i < 3 değerini i < 0 yapın ve programı çalıştırın. Flowgorithm'in konsol ekranında aşağıdaki gibi bir tabloyla karşılaşacaksınız (görebilesiniz diye kaynak akışı görebileceğiniz şekilde boyutlandırıp yerleştirdim).




Sonsuz Döngü


Programlama dünyasında yazılımcının elinden çıkabilecek en meşhur hatalardan birisi "sonsuz döngü"dür. Bu döngü, adından da anlaşılacağı üzere sonsuz kere dönen döngüdür. For döngüleriyle pek yapılmasa da while we do-while döngülerinde yapmak çok kolaydır. Bunun için tek yapmanız gereken şey döngüde kontrol edilen sayaç değişkenini değiştirecek bir atama operasyonu eklememektir. Örneğin aşağıdaki program sonsuz döngüdür.


Burada "i = i + 1" benzeri bir atama bloğu eklenmediğinden dolayı bu döngü sonsuza dek çalışacaktır ve her seferinde ekranda yeni satırda "0" değeri yazdırılacaktır (i = 0 olarak atandığı için).

Flowgorithm aracılığıyla döngüler bu şekildeydi.

Eğer bu seriyi faydalı bulduysan yeni yazılar geldiğinde haberdar olmak için buradan blogumu takibe alabilirsin.

Yorumlar

Bu blogdaki popüler yayınlar

Algoritmaya Giriş #8 - Özyinelemeli Fonksiyonlar

Algoritmaya Giriş #4 - Diziler