Karar yapıları adından da anlaşılacağı gibi program akışında belirli şart(lar) doğrultusunda hangi kod bloklarının çalışacağına karar vermemize olanak tanır. C dili gibi bir çok dilde 2 farklı karar yapısı vardır. Biri if diğeri ise switch (veya case) ismiyle anılır.
if yapısı
Lojik bir işlemin sonucunun doğru veya yanlış oluşuna göre 2 bloktan birini tercih etmeyi sağlar. Yanlışsa için yazılan blok tercihe bağlıdır. Yapıyı görelim;
if(şart) { //Doğru ise burası çalışır } else { //Yanlış ise burası çalışır }
Yanlışsa için yazılan blok tercihe bağlıdır demiştim, else ve sonrasını yazmasanız da olur.
Gelelim şarta yani lojik işleme;
Mantıksal bir işlem için bir kaç operatörümüz var.
Eşittir: ==
Eşit değildir: !=
Büyüktür: >
Büyük eşittir:>=
Küçüktür: <
Küçük eşittir: <= Bu operatörler ile mantıksal bir kaç ifade örneği verecek olursak; a ve b diye 2 int değişkenimiz olsun. a==b a!=b a>b gibi…
int a=10; int b=10; if(a==b) { printf("a ve b esittir"); } else { printf("a ve b esit degildir"); }
Diğer operatörlerle de çalıştığını görebilirsiniz veya sayıları kullanıcıdan alırsınız vs. örnekler çoğaltılabilir.
Bir de şart veya şartlar arasında ilişki kurmamızı sağlayan ilişkisel operatörler var.
Ve: &&
Veya: ||
Değil: !
Bunları kullanırken parantezler de kullanabilirsiniz. Bu sayede işlem önceliği sağlayabilirsiniz. Örneğin:
(a==b) || (c>=d)
!(a==b) (Bu işlemin denki (a!=b))
switch (case) yapısı
Bu yapıda değişkenin değerine göre belirli kod aralıkları çalıştırılabilir. Bkz:
switch(degisken) { case deger1: //degisken==deger1 ise çalışır break; case deger2: //degisken==deger2 ise çalışır break; case deger3: //degisken==deger3 ise çalışır break; default: //yukarıdaki değerlerden hiç biri değilse çalışır. }
İstediğimiz kadar senaryo yazabiliriz. Ayrıca default kısmı opsiyoneldir. Burada dikkat edilmesi gereken bir unsur break; komutlarıdır. Eğer kullanmazsanız o senaryodan sonra gelen diğer senaryoları da çalıştıracaktır. Dolayısıyla bu ifadenin standart kullanımında break komutları da vardır.
int a=1; switch(a) { case 1: printf("a 1e esittir"); break; case 2: printf("a 2ye esittir"); break; case 3: printf("a 3e esittir"); break; case 4: printf("a 4e esittir"); break; default: printf("a 1 2 3 4e eşit değil"); }
Burada kod blokları kullandığımız için önemli bir kaç unsura değinmek istiyorum:
Tek komutluk iş yaptıracaksak süslü parantez “{}” kullanmak zorunda değiliz. Yani yukarıdaki örneği şöyle yazsak da çalışırdı;
int a=10; int b=10; if(a==b) printf("a ve b esittir"); else printf("a ve b esit degildir");
Ancak unutmayın ki bu blok tek komuttan ibaretse geçerlidir, çok satırda böyle bir kullanım söz konusu değildir.
Süslü parantez “{}” açmadan önce, bloğa girmeden önce noktalı virgül “;” kullanmamalıyız. Çünkü noktalı virgül o yapıya sana bağlı bir blok yok mesajını verir.
Örnek Sorular
- Kullanıcının girdiği sayıyla önceden tanımlı bir sayıyı karşılaştıran şifre programının kodunu yazınız
- Kullanıcının girdiği 2 sayının büyük olanını bulan program kodunu yazınız
- Kullanıcının girdiği sayının mutlak değerini bulan program kodunu yazınız
- Kullanıcının girdiği sayının işaretini bulan program kodunu yazınız (Pozitif, Negatif, Sıfır)
- Kullanıcının girdiği vize ve final notunun ortalamasını bulup geçip kaldığını söyleyen program kodunu yazınız (vize:%40, final:%60, geçme notu:60)
- Kullanıcının girdiği sayıya denk gelen haftanın gününü söyleyen program kodunu yazınız(1: Pazartesi, 2: Salı, …, 7: Pazar, switch-case kullanarak)
- Kullanıcının girdiği sayıya denk gelen ayı söyleyen program kodunu yazınız(1: Ocak, 2: Şubat, …, 12: Aralık, switch-case kullanarak)
- Kullanıcının girdiği sayının 7’ye bölünebilirliğini kontrol eden program kodunu yazınız
- Kullanıcının girdiği sayının 7’ye ve 11’e bölünebilirliğini kontrol eden program kodunu yazınız
- Kullanıcının girdiği vize ve final notunun ortalamasını bulup not değerini veren program kodunu yazınız (vize:%40, final:%60)
- 90-100 AA
- 85-89 BA
- 75-84 BB
- 70-74 CB
- 60-69 CC
- 55-59 DC
- 50-54 DD
- 40-49 FD
- 0-39 FF
Çözümlerini buradan indirebilirsiniz.