# 5. Seçme Komutları

## 5. Seçme Komutları

Programımızın bazen olası kodlar arasında seçim yapmasını isteyebiliriz. Yani yukarıdan aşağı doğru bütün kodların çalışması, istediğimiz bir program çalışma düzeni olmayabilir. Şu ana kadar geliştirdiğimiz kodlar yukarıdan aşağıya sıra düzensel şekilde ilerliyordu. Bunun akış çizelgeleri ile göstermek istersek:

Öncelikle [matematiksel işleçler](https://github.com/mehmetakifakkus/turkce-programlama-diline-giris/tree/98cd9ba318a9fb2af958648390804a1a60cefca0/secme_komutlari/islecler/matematik-islecleri.md) kısmında yazdığımız şu alışveriş hesabı kodunu hatırlayalım:

\
değişken dolarKuru = 3.45\
değişken saatFiyati = 60\
değişken telefonFiyati = 300\
değişken toplam = (saatFiyati + telefonFiyati) \* dolarKuru\
\
yaz toplam

Bu kodun akış çizelgesini aşağıdaki gibi gösterebiliriz. Burada **eliptik sembol**ler programımızın başlangıç ve bitişini göstermekte, **dikdörtgen** şeklinde olanı ise değişken oluşturma, atama veya diğer matematiksel işlemleri gösteriyor. En sondaki **paralel kenar** şekli ise ekrana/konsola bir ifadenin yazdırıldığını ifade ediyor.

![](https://699050433-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M0__xF7J5c3ynybFVu4%2F-M0__yja6Tx7gSr2uqsd%2F-M0_a-Vo6ZruimXSAJuI%2FsiraDuzensel.svg?generation=1582252444345084\&alt=media)

### Kodlar arasında seçim yapmak

Eğer kodlarımızın bir kısmını belirli bir şarta bağlı olarak çalıştırmak, bir kısmını ise devre dışı bırakmak istersek seçme komutlarını kullanmamız gerekir. Akış çizelgesi olarak şu şekilde gösterilirler:

#### Tek yönlü seçme

Belli bir koşula bağlı olarak bir kodun çalışmasını isteyebiliriz. Bu durumda ilişkisel ifademiz bir koşulu yerine getirir ve doğru ise komut çalışır değilse komut çalışmaz, ardından diğer komutlara geçilir. Akış çizelgesi şöyledir:

![](https://699050433-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M0__xF7J5c3ynybFVu4%2F-M0__yja6Tx7gSr2uqsd%2F-M0_a-VqjtppDWQii5PN%2FtekTarafliEger.svg?generation=1582252441393701\&alt=media)

#### Çift yönlü seçme

Belli bir bağlı olarak iki komuttan birisini seçmek ve diğerini saf dışı bırakmak isteyebiliriz. Bu durumda çift yönlü seçme kullanırız. Eğer koşul doğru ise **komut1**, değilse **komut2** çalıştırılır. Akış çizelgesi şöyledir:

![](https://699050433-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M0__xF7J5c3ynybFVu4%2F-M0__yja6Tx7gSr2uqsd%2F-M0_a-Vs0CTSCw5C3MpV%2FciftTarafliEger.svg?generation=1582252439394778\&alt=media)

&#x20;Burada bahsi geçen koşul ifadeleri birer ilişkisel ifadelerdir. Hatırlamak isterseniz [ilişkisel işleçler](https://mehmetakifakkus.gitbooks.io/turkce-programlama-diline-giris/content/islecler/iliskisel-islecler-esit-kucuk-buyuk.html) konusuna göz atabilirsiniz.

## Peki nasıl kodlarız?

Bu durumda tek yönlü şart için **eğer** komutu, çift yönlü şart için **eğer** ve **değilse** komutları aradığımız komutlardır. **eğer** komutunun ardından gelen parantezlerin arasına koşulumuz olan ilişkisel komut yazılır. Doğruysa **eğer**in ardındaki kısım yanlışsa değilse kısmı çalışır. Zaten adı üzerinde gayet anlaşılır değil mi?

Şöyle bir söz dizimi kuralını verelim:

\
eğer(koşul)\
&#x20;   komut1\
değilse\
&#x20;   komut2

Esasen günlük hayatta bu tarz karar verme durumlarıyla sıklıkla karşılaşıyoruz. Biraz da esprili bir dille bunu örnekleyelim. Bu uyanıp işe ya da okula gitmenin bir algoritması olsun. Sabah kaltınız, önce yataktan kalkar, sonra durumunuzu kontrol eder, saçınız kirliyse evden çıkmadan bir banyo yapmayı düşünebilirsiniz. Dolayısıyla bu bir koşuldur ve duruma göre banyo yapıp yapmayacağınıza karar verirsiniz. Bunu akış çizelgeleri ile şöyle anlatabiliriz:

![](https://699050433-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M0__xF7J5c3ynybFVu4%2F-M0__yja6Tx7gSr2uqsd%2F-M0_a-VuIl5ROB1bDy5B%2FgunlukHayat.svg?generation=1582252443456007\&alt=media)

### Kod Örnekleri

Yine örnekler üzerinden gidelim. Hatırlatmak gerekirse; bu kodları kodlama sayfasına kopyala yapıştır yapıp nasıl çalıştığını gözlemleyebiliriz.

**Örnek1:** Ehliyet kursu yönetiyoruz. Öğrenciler bize ehliyet alabilmek için başvuruyor. Kodumuz ehliyet başvuru sisteminde çalışıyor varsayalım. Kişinin yaş bilgisine göre, "ehliyet alabilirsiniz" ya da "yaşınız ehliyet almaya yeterli değildir" gibi durum mesajlarını yazdırmak istiyoruz.

Öncelikle akış çizelgesi nasıl olur ona bakalım.

![](https://699050433-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M0__xF7J5c3ynybFVu4%2F-M0__yja6Tx7gSr2uqsd%2F-M0_a-VwcRlCBpb_ZCyB%2Fehliyet.svg?generation=1582252442367346\&alt=media)

Gördüğünüz üzere, hemen kodlamaya çalışmıyoruz, öncelikle bir algoritma belirlemeye çalışıyoruz. Bunu kaba taslak çizme dökmek kafamızda bir şeylerin daha net oturmasını sağlar.

TPD kullanarak bu akış çizgesi şu şekilde kodlanabilir.

\
değişken yaş = 19\
\
eğer(yaş > 18)                                        // doğru\
&#x20;   yaz "Ehliyet alabilirsiniz"\
değilse\
&#x20;   yaz "Yaşınız ehliyet almaya yeterli değildir"

**Örnek2:** Öğretmeniz bize bir sınav yapsın. Sınavdan önce şöyle bir şey desin: "80 den fazla not alanları ödüllendireceğim ve 10 puan ekstra vereceğim, altında alan her kişiden ise ceza amaçlı 5 puan kıracağım." Kişinin son puan durumunu hesaplayan kodu yazalım.

Öncelikle akış çizelgesi nasıl olur ona bakalım.

![](https://699050433-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M0__xF7J5c3ynybFVu4%2F-M0__yja6Tx7gSr2uqsd%2F-M0_a-VyakqbZhZsYlzZ%2FpuanDurumu.svg?generation=1582252440533601\&alt=media)

TPD kullanarak bu akış çizgesi şu şekilde kodlanabilir.

\
değişken puan = 75         // 75\
eğer(puan >= 80)            // doğru\
&#x20;   puan = puan + 10       // 85\
değilse\
&#x20;   puan = puan - 5\
\
yaz puan

&#x20;Son 2 örnekte dikkat ederseniz göreceksiniz ki; yurtdışı alışverişi örneğinden farklı olarak her komut çalıştırılmıyor ve duruma göre seçim yapıyoruz.

**Örnek3:** 3 sayıdan en büyüğünü bulan programı yazalım. İş biraz da karmaşıklaşıyor...

\
değişken num1 = 12\
değişken num2 = 10\
değişken num3 = 15\
\
değişken no = num1\
\
eğer(num2 > no)  // yanlış\
&#x20;   no = num2\
\
eğer(num3 > no)  // doğru\
&#x20;   no = num3\
\
yaz no

Bu 3 sayıyı 3 değişken ile başlatıyoruz. İsimleri hatırlaması ve kullanması kolay olsun diye **num1** gibi bir isim verdik. Diğerleri de bunun ismiyle ilişkili olarak değer aldı. -Unutmayın iyi bir programcı değişken isimlerini anlamlı seçer- Sırasıyla değerlerini veriyoruz.

Bu kodu kodlama sayfasındaki yere kopyalarak programın nasıl çalıştığına bakalım. Değişkenlerin ilk değerini farklılaştırarak kodun nasıl çalıştığına bakalım. Alternatif çözümler elbette var. Bunlar üzerine düşünelim.

\
\
function qsa(sel) {\
&#x20;   return Array.apply(null, document.querySelectorAll(sel));\
}\
\
//deneme ismindeki tüm editörler codemirror editorü olacak\
qsa(".deneme").forEach(function (editorEl) {\
&#x20; CodeMirror.fromTextArea(editorEl, {\
&#x20;   mode: "simplemode",\
&#x20;   readOnly: true,\
&#x20;   lineNumbers: true,\
&#x20;   theme: 'eclipse'\
&#x20; });\
});\
\
//deneme ismindeki tüm editörler codemirror editorü olacak\
qsa(".oneline").forEach(function (editorEl) {\
&#x20; CodeMirror.fromTextArea(editorEl, {\
&#x20;   mode: "simplemode",\
&#x20;   readOnly: true,\
&#x20;   lineNumbers: false,\
&#x20;   theme: 'eclipse2'\
&#x20; });\
});\\
