Algoritmaya Giriş serimin ilk dört yazısı itibariyle basit algoritmaların nasıl yazıldığını ve bu algoritmalar yazılırken nelerin kullanıldığını açıklayıcı bir şekilde anlatabildiğimi ümit ederek serinin beşinci yazısına giriş yapmak istiyorum. Bu yazının konusu koşul yapıları.
Bu yapılar belirli koşullara göre algoritmamızın gerçekleştireceği davranışı belirlememize yardımcı olur. Gerçek hayattan verilebilecek en basit örnek, kayıt olurken 8 karakter uzunluğunda olmayan bir parola girdiğinizde bir hata mesajı almanızdır. Bu tür senaryoları koşul yapıları sayesinde yönetebiliriz. Koşul yapıları, genel olarak programımıza farklı davranışlar kazandırmaya yarar, ayrıca koşul yapılarıyla kontrol yapmak ilkel/basit bir hata yönetim metodudur. Örneğin girdimiz sayı değilse ekrana bir hata mesajı yazdırmasını koşul yapısı yazarak sağlayabiliriz.
Programlama dünyasında en çok kullanılan koşul yapısı if-else if-else yapısıdır. Ek olarak bir de switch-case yapısı vardır. Bahsi açılmışken bunlara kısaca değinmek istiyorum.
If-Else If-Else
Yazılım dünyasındaki en basit koşul yapısı if-else'dir. Türkçe'ye "eğer ise-değil ise" şeklinde çevrilebilir. Bu koşul yapısı, bir önerme doğruysa (örneğin val > 3) belli bir kod bloğunu çalıştırırken, aksi durumda (yani else senaryosunda) başka bir kod bloğunu çalıştırır. Bu koşul yapısının bir gelişmişi de if-else if-else yapısıdır. Bu yapıda if-else yapısına ek olarak bir de "else if" bloğu vardır. "Değil ise ama şöyle ise" şeklinde de anlaşılabilecek olan else if bloğu, bir önerme yanlış iken başka bir önermenin doğru olması durumunda çalışır (örneğin val > 3 yanlış ise ancak val > 0 ise). If-Else If-Else yapılarında birden fazla "else if" bloğu olabilir. Bu blok şu şekilde yazılır:
if(önerme)
{
...
}
else if(başka bir önerme)
{
...
}
...
else
{
...
}
Switch-Case
If-Else If-Else yapısına kıyasla biraz daha gelişmiş ve nokta atışı yapan koşul yapısı "switch-case" olarak bilinir. Bu yapıda bir önermenin değeri kontrol edilir ve her kontrol bir "case" senaryosu ile yapılır. Örneğin val değeri 0 ise farklı bir kod bloğu, 1 ise farklı bir kod bloğu çalışır. Bu blok kendisine verilen değeri kendi içinde belirtilen kesin değerlerle kıyaslayarak hangi davranışı gerçekleştireceğine karar verir. Belirtilen hiçbir değer tutmazsa çalıştırılmak için son bir blok kodu daha yazılabilir (default). Bu bloklar da şu şekilde yazılır:
switch(değişken/önerme)
{
case deger1: ...
case deger2: ...
...
default: ...
}
Çoğu programlama dilinde switch-case bloğundaki her bir case'nin sonuna bir "break" komutu kullanmak bir standarttır. Bu, bütün case'leri tek tek kontrol edeceğiniz zaman programın başka bir case'e inmemesi içindir. Bu blok Python'da "match-case" olarak geçer.
Flowgorithm'de If-Else
If-Else If-Else ve Switch-Case koşul yapıları hakkında bilgi verdikten sonra bunları Flowgorithm aracılığıyla uygulamalı öğrenmeye geldi sıra. Bunun için yeni bir program oluşturuyoruz.
Programımızın başlangıç kısmını yukarıdaki gibi oluşturduktan sonra, "Input val" ile End blokları arasındaki oka tıklıyoruz.
Çıkan blok menümüzden yukarıdaki şekilde "Control" alt başlığı altından "?if?" bloğumuzu seçiyoruz. Ve if bloğumuz programımıza şu şekildeki gibi ekleniyor.
Burada eklenen yapımız basitçe bir if-else yapısıdır diyebiliriz. Bu yapı, programlama dünyasındaki en basit koşul yapısıdır. Eğer "If" bloğu içinde belirttiğimiz yapı doğruysa programımız sağdaki ok (True), yanlış ise soldaki ok (False) üzerinden ilerleyecek. If yapımızdaki koşulun ne olduğunu belirlemek için If bloğumuzun üstüne çift tıklayalım, karşımıza şöyle bir menü çıkacak.
Bu örneğimizde tanımladığımız "val" değişkeninin değerinin pozitif olup olmadığını kontrol edeceğiz, bu yüzden "val > 0" yazıyoruz. Akabinde de True ve False oklarının içine girdiğimiz sayının pozitif veya negatif olduğunu yazdıracak Output blokları ekliyoruz ve programımız şu şekli alıyor:
Ardından programımızı çalıştırıp val değişkenimize değer verdiğimizde bizi şu şekilde bir tablo karşılamalı.
Yukarıdaki fotoğrafta üstteki görüntü val değişkenine verdiğimiz değerin 0'dan büyük olması durumunda karşımıza çıkan durum iken, alttaki görüntü ise val değişkenine 0'dan büyük bir değer vermediğimizde karşımıza çıkan durum. Ancak bu programda girdi olarak 0 değerini verirsek, 0 > 0 önermesi sağlanmadığı için program "Negative" yazdıracaktır. Ancak herkesin bildiği gibi 0 sayısı nötrdür. O halde bu programda "False" okunun içine bunu belirtecek şekilde bir ekleme yapmamız gerekir, ki bu da if-else-if yapılarının mantığını oluşturur. False okuna tıklayalım ve bir if bloğu daha ekleyelim. Dolayısıyla programımızdaki if bloğu şu şekili alsın:
False okuna val = 0 önermesini kontrol edecek şekilde bir if bloğu daha ekliyoruz ve eğer bu önerme doğruysa ekrana "Zero" yazdırıyoruz, aksi takdirde "Negative" yazdırıyoruz. Gerçek programlama dillerinde bu tür kontrol işlemleri çift eşittir ile (==) yapılır, çünkü tek eşittir atama işareti olarak kullanılır. Bu çift eşittir (==) operatörü ile değerlerin eşitliği kontrol edilir. Bahsi geçmişken JavaScript'te ek olarak değer ve tip eşitliğini kontrol etmek için üç eşittir (===) operatörünün kullanıldığını da belirtmek isterim.
If bloklarında kullanılabilecek diğer karşılaştırma operatörleri sırayla küçüktür (<), küçük eşittir (<=) ve büyük eşittir'dir.(>=).
Bu örnekte yaptığımız programın nasıl dallandığını göstermek için bütün programın akış diyagramını buraya atıyorum:
Bundan önce yaptığımız programların akış diyagramı tamamen tek düze gidiyordu, ki belki fark etmişsinizdir. Ancak bu programımız val değişkenine kullanıcıdan girdi aldıktan sonra toplam üç farklı dala ayrılıyor, bunlar girdinin pozitif (sıfırdan büyük) olduğu, sıfır olduğu ve negatif (sıfırdan küçük) olduğu dallar, ve her bir dalda ayrı bir blok çalışıyor. Yani girdi aldıktan sonra programımızın üç farklı gidişat yönü var, bu üç gidişat yönünden birini seçtikten sonra programımız sonlanıyor.
Algoritmaya Giriş serisinde bu yazıyla koşul yapılarına basitçe girmiş bulundum. Serinin bir sonraki yazısında döngüler konusuna giriyoruz, bunun hemen ardından da artık yazılım dünyasının daha büyük parçaları olan fonksiyonları konuşacağız. İyi algoritmalar :)
Eğer bu seriyi faydalı bulduysan yeni yazılar geldiğinde haberdar olmak için
buradan blogumu takibe alabilirsin.
Yorumlar
Yorum Gönder