Ders 4 - C++ Kontrol Yapıları

9 Mar 2016 · 6 dk okuma süresi

Programlama dünyasının olmazsa olmazlarından kontrol yapıları, programın akışının kontrol edilmesini sağlar. Örneğin; Facebook, Twitter gibi büyük sitelere dahi girerken kullanıcı adı ve şifrenizin doğruluğunu kontrol yapıları ile kontrol ederler ve buna göre işlem yaparlar.

1) IF Yapısı

Programlama dünyasında en çok kullanılan yapıdır. Neredeyse bütün programlama dillerinde kulanım şekli benzerdir. Kullanımına bakacak olursak:

if( koşul )
  eğer koşul sağlanıyorsa burası çalışır;

veya alt satıra geçmeden bu şekilde yazılması da mümkün:

if( koşul ) eğer koşul sağlanıyorsa burası çalışır;

Üstteki kullanımda süslü parantezler ile { } blok oluşturmadık. Bundan dolayı IF yapısı sadece kendisinden sonraki ilk satırı kapsamaktadır. Eğer koşulun sağlanması durumunda birden çok kod satırı yani birden çok statement kullanılacaksa alttaki örnekte ki gibi süslü parantezler ile blok oluşturulmalıdır.

if ( koşul )
{
  koşul sağlanıyorsa çalışacak kod;
  ...
  ..
  .
}

Bu yapının diyagram şeklindeki gösterimi aşağıdaki gibidir:

if-diagram

Özetle; test edilen ifade yani koşulumuz sağlanıyorsa IF yapısı içindeki kodlar çalışır; koşulumuz sağlanmıyorsa IF yapısı içindeki kodlar işlemeden atlanır.

2) IF ELSE Yapısı

İlk başlıkta koşulun sağlandığı durumdan söz ettik. Peki ya koşul sağlanmıyorsa ne olacak? Bu sefer işin içine ELSE devreye giriyor. Yani IF yapısında belirtilen koşul sağlanmıyorsa işlenecek olan kodları ELSE ifadesinde belirtiriz. Kullanımı basitçe şu şekildedir:

if ( koşul )
  koşul sağlanıyorsa çalışacak kod;
else
  koşul sağlanmıyorsa çalışacak kod;

İlk başlıkta belirtildiği gibi süslü parantezin { } yani blokların kullanılmadığı durumlarda ifadelerden sonraki sadece ilk satırlar koşula bağlıdır. Eğer birden çok satırı koşula dahil edecekseniz alttaki örnekteki gibi süslü parantezlerle blok oluşturmalısınız.

if ( koşul )
{
  koşul sağlanıyorsa çalışacak kod;
  ...
  ..
  .
}else
{
  koşul sağlanmıyorsa çalışacak kod;
  ...
  ..
  .
}

Bu yapının diyagram şeklindeki gösterimi aşağıdaki gibidir:

if-else-diagram

Şimdi hem IF hem de IF ELSE başlığını kapsayacak şekilde örnek yapalım:

#include "stdafx.h"
#include <iostream>

using namespace std;

int main() {
  int yas;

  cout << "Lutfen yasinizi giriniz: ";
  cin >> yas;

  if (yas > 18) {
    cout << "18 yasindan buyuksunuz!" << endl;
  }
  else {
    cout << "18 yasindan kucuksunuz!" << endl;
  }

  system("pause");
  return 0;
}

Bu kodun çıktısı yaşınızı 18’den büyük yazdığınız takdirde bu şekilde olacaktır:

if-else-ornek

3- ELSE IF Yapısı

Bu yapı tek başına bir şey ifade etmez. Kendisinden önce mutlaka IF yapısı olmalıdır. ELSE yapısından farkı ise; ELSE ifadesinde koşul sağlanmadığı durumda içindeki kodlar doğrudan işler. ELSE IF ise tahmin edeceğiniz üzere kendisinden önceki IF yapısındaki koşul sağlanmadığında buraya geçecek ve burada yazılan koşula göre hareket edilecek. Konuyu örnekle daha iyi anlayacağınızı düşündüğüm için hemen örneğe geçiyorum. Alttaki örnekte girilen sayının kaç basamaklı olduğunu kullanıcıya bildiriyoruz.

#include "stdafx.h"
#include <iostream>

using namespace std;

int main() {
  int sayi;

  cout << "Lutfen sayi giriniz: ";

  cin >> sayi;

  if (sayi >= 100) {
    cout << "Sayi 3 veya daha fazla basamaklidir." << endl;
  }
  else if(sayi<100 && sayi>=10)
  {
    cout << "Sayi 2 basamaklidir." << endl;
  }
  else
  {
    cout << "Sayi tek basamaklidir." << endl;
  }

  system("pause");
  return 0;
}

İlk olarak örneğin ne yaptığını açıklayalım:

İlk koşulda sayının 100’e eşit veya 100’den büyük olma durumu kontrol ediliyor ve sağlanıyorsa ekrana sayının 3 veya daha fazla basamaklı olduğunu bildiriyoruz. İlk koşul sağlanmıyorsa 2. koşul olan ELSE IF koşuluna geçiyor. Bu koşulda ise sayının 100’den küçük ve 10’a eşit veya 10’dan büyük olma durumunu kontrol ediyoruz ve sağlanıyorsa ekrana sayının 2 basamaklı olduğunu bildiriyoruz. Eğer ikinci koşul da sağlanmazsa son basamaktaki ELSE bloku çalışıyor ve bu blokta sayının 1 basamaklı olduğunu bildiriyoruz. Çünkü mantıksal olarak ilk 2 koşul sağlanmadıysa sayı mutlaka tek basamaklıdır.

Örneğin çıktısını 3 farklı sayıyla denedim ve çıktılar aşağıdaki şekilde:

ELSE-IF-Ornek

Özetle; ELSE IF yapısı birden çok koşulun göz önüne alınması gereken durumlarda kullanılıyor.

4- SWITCH - CASE Yapısı

Bu yapının başlıca amacı bir değişkenin değerine göre programa yön vermektir. Kullanımı basitçe aşağıdaki gibidir:

switch( kontrol edilecek değişken ){
  case deger1: yapılacak işlemler;
  case deger2: yapılacak işlemler;
  case deger3: yapılacak işlemler;
  ...
  ..
  default: üstteki durumlardan farklı bir durumda yapılacak işlemler;
}

Switch - Case yapısındaki default, IF ELSE yapısındaki ELSE yapısına benzemektedir. Şimdi bir örnekle olaya açıklık getirelim. Alttaki örnekte kullanıcıdan 1-7 arasında bir sayı girmesi isteniyor. Daha sonra sırasıyla girilen sayıya denk gelen haftanın günü yazdırılıyor. Eğer girilen sayı 1-7 aralığında değilse default kavramıyla gerekli uyarı mesajını ekrana veriyoruz.

#include "stdafx.h"
#include <iostream>

using namespace std;

int main() {

  int sayi;

  cout << "Lutfen 1-7 arasinda sayi giriniz: ";

  cin >> sayi;

  switch (sayi)
  {
    case 1: cout << "Pazartesi" << endl; break;

	case 2: cout << "Sali" << endl; break;

	case 3: cout << "Carsamba" << endl; break;

	case 4: cout << "Persembe" << endl; break;

	case 5: cout << "Cuma" << endl; break;

	case 6: cout << "Cumartesi" << endl; break;

	case 7: cout << "Pazar" << endl; break;

	default:  cout << "Girilen sayi 1-7 araliginda degildi." << endl; break;
  }

  system("pause");
  return 0;
}

Programa 6 ve 20 sayılarını ayrı ayrı girdiğimizde alınan çıktılar şu şekilde:

Ayrıca kodlarda her koşula eklediğimiz break komutu ile herhangi bir koşul sağlandığında yapının kırılmasını sağlıyoruz. Böylelikle koşul yokmuş gibi bütün satırların işlenmesini engelliyoruz.


Diyagram Resimlerinin Kaynağı: http://gelecegiyazanlar.turkcell.com.tr