Ana sayfa > Programlama > C++ Programlama > Koşul ve if yapıları

Koşul ve if yapıları

► Detaylı anlatım

Koşula bağlı çalışma

C++'da, bazı durumlarda belirli işlem satırlarının istenen koşullar sağlandığında çalışması gerekebilir. Bu koşulları devreye sokmaya yarayan program yapılarına Program Kontrol Terimleri adı verilir.

Belirlediğimiz koşullar sağlandığında çalışmasını istediğimiz işlem satır veya satırlarını programlarımıza ekleyebiliriz. Tanımlanan koşul sağlandığında, koşula bağlı olarak tanımlanan işlem satır veya satırları devreye girecek aksi takdirde, bu satırları işlem yapmadan atlayacaktır. Tanımlanan koşul sağlanmadığında, söz konusu işlem satır veya satırları programda hiç yer almamış gibi işlem görür. Koşula bağlı olarak devreye giren işlem satırları programlarımızda çok büyük kolaylık ve esneklik sağlayacaktır.

If işlem satırı

Koşula bağlı işlem satırı veya satırları çalıştırma olanağı sağlayan deyimlerden bir tanesi ve belki de en sık kullanılanı if deyimidir. Bir if deyiminin genel yapısı aşağıda gösterilmektedir:


if (ifade) işlem-satırı;

if (ifade) {
	işlem-satırı;
    .
	.
	.
	işlem-satırı;
}	

Bir if yapısı tek bir işlem satırı veya birden fazla işlem satırı içerebilir.

Eğer if yapısında, if deyiminden sonra yer alan parantezler içindeki ifade doğru sonuç verirse (ifade sonucu 0'dan farklı ise), if kalıbı içinde yer alan işlem satır veya satırları çalışır. Eğer ifade yanlış bir sonuç verirse (ifade sonucu 0'a eşit ise), if kalıbı içinde yer alan yer alan işlem satırı veya satırları devre dışı kalır. Yani, program o işlem satırları hiç yazılmamış gibi bir sonraki işlem satırından çalışmaya devam eder.

Daha açık ifade etmek gerekirse, biz if satırını kullanarak programa şu talimatı vermiş oluyoruz:

if yapısına geldiğinde, eğer parantez içinde yer alan koşul doğru sonuç verirse, if kalıbı içindeki işlem satırlarının gereğini yap, aksi takdirde bir sonraki işlem satırına geç!

Şimdi, if satırında parantezler içinde yer alan ifadenin neler yaptığını inceleyelim. Genel olarak, bu ifade ilişkisel bir işlemci kullanarak iki değeri karşılaştırır, bir değerin diğeri ile olan ilişkisini kontrol eder.

Koşul bölümünü oluşturan ifade iki değeri karşılaştıran tek bir ilişkisel işlem veya birden fazla ilişkişel işlemi birleştiren mantıksal işlemlerden oluşur.

Yukarıda bahsettiklerimizi bir örnek üzerinde incelemeye çalışalım:


#include <iostream>

using namespace std;

int main(void)
{
  int id = 21;

  if (id == 21) cout << "id değişken değeri 21 sayısına eşittir!";

  id = 35;
  
  if (id == 21) cout << "\n" << "id değişken değeri 21 sayısına eşittir!";
  
  return 0;
}

Yukarıdaki programı derleyip çalıştırdığımızda, aşağıdaki ifadeleri ekrana yazar:

id değişken değeri 21 sayısına eşittir!

Program, id değişkenine 21 değerini atar. Sonra if satırında id değişken değeri ile 21 sayısını == ilişkisel işlemcisini kullanarak karşılaştırır. id değişken değeri 21 sayısına eşit olduğu için ifade doğru sonuç olarak verdiğinden, aynı satırdaki cout fonksiyonu karakter dizisini ekrana yazar. id değişkenine 35 değerini atar. İkinci if yaısında bu kez ifade yanlış sonuç verdiğinden, cout fonksiyonu devreye girmez.

Else yapısı

Şimdi, if deyiminin else deyimi ile birlikte kullanılmasını incelemeye çalışalım. else deyimi tek başına değil sadece if deyimi ile birlikte ve if deyiminin peşinden kullanılabilir. if ve else işlem satırlarının program içindeki genel yapısı aşağıdaki gösterilmektedir:


if (ifade) işlem-satırı;
else işlem-satırı;

if (ifade) {
	işlem-satırı;
    .
	.
	.
	işlem-satırı;
}	
else {
	işlem-satırı;
    .
	.
	.
	işlem-satırı;
}

if else yapılarında if ve else deyimlerine ait işlem satır sayısı en az bir olmak üzere daha fazla sayıda da olabilir.

Eğer if koşulunda yer alan ifadenin sonucu doğru ise, program if satırındaki işlem satır veya satırlarının gereğini yerine getirir, else satır veya satırlarına hiçbir işlem yapmaz. Eğer if satırında yer alan ifade sonucu yanlış ise, program if yapısındaki işlem satırını veya satırlarını dikkate almaz, else satırındaki işlem satır veya satırlarının gereğini yerine getirir. Program if ve else işlem satır veya satırlarında sadece birisine işle yapmak zorundadır.

Sadece if satırlarından oluşan bir programda bütün if satırları da işlem görebilir, hiçbir if satırı da görmeyebilir. Elde edilecek sonuç tamamen if satırlarından tanımlanan ifadelerin doğruluğuna bağlıdır ve birbirinden bağımsızdır. if ve else gruplarından oluşan işlem satırlarında ise if ya da else işlem satırlarından birisi mutlaka çalışacaktır. Çünkü biri diğerinin alternatifidir ve birbirine bağlıdır. Program if satırının ifadesinin sonucunun doğru olduğunu belirleyip ilgili işlem satırını çalıştırdığında, artık else ile ilgili işlem satırına işlem yapma şansı yoktur.

Şimdi vereceğimiz örneklerle öğrendiklerimizi incelemeye çalışalım:


#include <iostream>

using namespace std;

int main(void)
{
  int id1, id2;

  id1 = 21;
  id2 = 35;

  if (id1==id2) cout << "id1 ve id2 değişken değerleri birbirine eşittir!";
  else cout << "id1 ve id2 değişken değerleri birbirine eşit değildir!";

  return 0;
}

Yukarıdaki programı derleyip çalıştırdığımızda, aşağıdaki ifadeleri ekrana yazar:

id1 ve id2 değişken değerleri birbirine eşit değildir!

Program, önce oluşturduğu id1 ve id2 adlı değişkenlere sıra ile 21 ve 35 değerlerini atar. if satırında, parantez içindeki ifade de yer alan == işlemcisi ile iki değişken değerinin eşit olup olmadığını kontrol eder. İki değişken değeri birbirine eşit olmadığından if satırında herhangi bir işlem yapmadan doğrudan else satırına geçer ve yukarıdaki karakter dizisini ekrana yazar.

if else kalıplarında, else işlem satırında yer alan bir ifadeye bağlı bir değerlendirme yapılmaz. Sadece if satırında yapılan değerlendirmeden olumsuz sonuç alındığında else satırındaki işlemler devreye girer.

Kod blokları

Şimdi, if ve else yapılarında iki veya daha fazla işlem satırını birleştirerek kullanmaya çalışacağız. Ancak, öncelikle kod bloğu kavramını ele alalım.

C++'da, iki veya daha fazla işlem satırını birleştirerek belirli bir koşula veya döngüye bağlı olarak çalıştırabiliriz.

Birden fazla işlem satırının bir araya getirilerek kullanılmasına Kod Bloğu adı verilir.

Kod bloğu { ve } işaretleri arasında yer alır. Kod bloğunun genel yapısı aşağıda gösterilmektedir:


if (ifade) {
    işlem satırı;
    .
    . 
    .
    işlem satırı;
}
else {
    işlem satırı;
    .
    . 
    .
    işlem satırı;
}

if satırındaki ifade doğru sonuç verdiği zaman, program if deyiminin hemen peşinden gelen { } işaretleri arasında yer alan işlem satırlarından oluşan kod bloğunun gereğini yerine getirir. Eğer ifade yanlış sonuç verirse, program bu kez else deyiminin hemen peşinde yer alan { } işaretleri arasındaki işlem satırlarından oluşan kod bloğunun gereğini yerine getirir. Daha açık bir şekilde ifade etmek gerekirse, if ve else deyimleri tek bir işlem satırının çalışmasını sağlayabilecekleri gibi aynı anda birden fazla işlem satırının da çalışmasını sağlayabilirler.

Bir if veya else satırında koşul sağlandığında, koşula bağlı olarak devreye giren kod bloğu içinde yer alan işlem satırları sıra ile çalıştırılır. C++'da, if ve else deyimlerinden sonra yer alan tek bir işlem satırı ya da kod bloğu kendisi ile bağlantılı olan diğer if ya da else satırında işlem satırı ya da kod bloğu kullanılması konusunda belirleyici değildir. Farklı bir ifade ile, if veya else yapısında bir kod bloğu kullanmamız, if veya else yapısına bağlı olan else veya if yapısında da kod bloğu kullanmamızı gerektirmez.

Şimdi öğrendiklerimizi örnekler üzerinde incelemeye çalışalım:


#include <iostream>

using namespace std;

int main(void)
{
  int id;

  cout << "Bir int değer giriniz: ";
  cin >> id;

  if(id%2) {
    cout << "Girdiğiniz sayı tek bir sayıdır: " << id << "\n";
    cout << "Sayının 3 katı: " << 3 * id;
  }
  else {
    cout << "Girdiğiniz sayı çift bir sayıdır: " << id << "\n";
    cout << "Sayının 2 katı: " << 2 * id;
  }

  return 0;
}

Yukarıdaki örnekte, program size int bir değer girmenizi ister. Girdiğiniz değeri id değişkenine atar. if satırında id değişken değerinin tek sayı olup olmadığını kontrol eder. Tek bir sayı ise if koşuluna bağlı olarak tanımlanmış kod bloğu içindeki karakter dizisini ve değişken değerinin 3 katını hesaplayarak ekrana yazar. Sayı çift ise else satırına bağlı olarak tanımlanmış kod bloğu içindeki karakter dizisini ve değişken değerinin 2 katını hesaplayarak ekrana yazar.