Temel C Programlama -19- Kararlar ve If Karar Yapısı

Döngülerin ardından programlamaya dair en temel bileşenlerden biri de karar yapılarıdır. Karar yapıları sınıflar gibi üst seviye bir yazılım özelliği değildir. Eski veya yeni bütün programlama dillerinde istisnasız olarak karşımıza çıkmaktadır. Üstelik bu özellik sadece programlama diline mahsus da değildir. Makine komutları arasında karar komutlarını görmemiz mümkündür. Yapay zekanın temeli kararlar ve döngülerdir. Eğer karar mekanizması olmasaydı yazdığımız programlar eksik olacak ve program yazmanın pek fazla bir anlamı kalmayacaktı. Biz günlük hayatta da pek çok karar durumuyla karşılaşırız ve aklımızı kullanarak bu kararları veririz. Makinenin karar vermesi ise bizim talimatımızla olmaktadır. Bu noktada programcı program yazarken aklını kullanmakta ve ona göre bir karar mekanizması oluşturmaktadır. Karar mekanizmaları insan dilinde de dil yapısı içerisindedir ve sıkça kullanılır. Örneğin İngilizce’de “If” ifadesiyle bir karar cümlesi ortaya koyulur. “If the door is open, close the door.” yani “Eğer kapı açıksa kapat” yapısını dilde kolaylıkla oluştururuz. Türk dilinde karar yapıları “Eğer” ile veya -sA eki ile sağlanmaktadır. Bizim -sA harfini A harfini büyük halde yazmamız dil bilgisi kitaplarında böyle görmemizden dolayıdır. Yani -sA yazdığımızda bunun hem -se hem -sa olarak okunabileceğini belirtmiş oluruz. Şimdi konuşma dilindeki karar yapıları ile yalancı kod yazalım.

  • A Sayısı 5’den büyükse 5’e eşitle.

  • Zaman değeri 100 saniyeye eşit olursa ekrana “Zamanınız Doldu.” yazdır.

  • Kullanıcı tuş takımındaki sol düğmesine basarsa robot kolu sola çevir.

  • Eğer A değeri B’den büyükse ekrana “Büyüktür” yazdır değilse “Küçüktür yazdır.”

  • Eğer A değeri B’den büyükse “Büyüktür”, değilse eğer eşitse “Eşittir”, değilse “Küçüktür” yazdır.

  • İleride engel varsa sola dön.

  • Batarya %10 olursa uyarı ver.

Görüldüğü gibi burada aynı döngülerde olduğu gibi bir şart ifadesi kullanılmakta fakat bu şart ifadesinin ardından tek bir komut işletilmektedir. Biz de karar verirken iki durum arasında bir seçim yaptığımız gibi iki duruma göre iki farklı işi yaptığımız da olmaktadır. Örneğin telefonun pil durumuna bakarız ve batarya %10 olursa şarja takarız. Fakat batarya %10’dan fazlaysa bir iş yapmayız. Burada bataryanın %10’dan fazla dolu olup olmaması gibi iki durumla karşılaşırız. Fakat telefonda oyun oynamak istediğimizde iki duruma göre iki farklı iş yaparız. Örneğin batarya %10’dan fazla dolu ise oyun oynarız, değilse şarja takarız. Görüldüğü gibi bu karar yapılarını günlük hayatımızda devamlı olarak kullanmaktayız.

Sırada ise bu karar yapılarını bilgisayar programında kullanmak vardır. Bilgisayarda karar yapıları parantez içerisindeki sonucun Doğru ya da Yanlış olmasına bakar. Aynı döngülerin arasına yazdığımız parantezlerde ilişkisel operatörler yardımı ile 1 ve 0 değerlerini elde ediyorsak karar yapıları da bu ilişkisel operatörler üzerine kurulmuştur. Daha karmaşık sonuçlar elde etmek için mantık operatörlerini de kullanabiliriz.

if karar yapısı

Karar yapılarına baktığımızda if ve türevlerinden başka bir de switch deyimini görmekteyiz. switch yerine de if-else-if yapısını kullanmak mümkün olduğundan karar yapılarını if’den ibaret görebiliriz. Bu karar yapılarını basit veya karmaşık kullanmamıza bağlı olarak yapının karmaşıklığı artacaktır. Bu yapıları peşpeşe ve birbiri içinde kullanmamız mümkündür. Aynı döngü içinde döngü yapabildiğimiz gibi if içerisinde if de yapabiliriz.

Şimdi basit bir program yazalım. Öğrenci notu 45’e eşit veya 45’den yukarı olduğu zaman öğrencinin geçtiği bilgisini ekrana yazdıralım.

if ( not >= 45 ) {
printf( "Gecti\n" );
}

Görüldüğü gibi if deyiminin ardından parantez açıp ilişkisel operatörler yardımıyla Doğru veya Yanlış değerlerini elde ettik ve parantez içerisinde doğru olması şartıyla if blokunda yer alan yani süslü parantezlerin arasında olan komutlarımız çalıştı. If deyiminin içindeki kodun çalışması için parantez içindeki değerlerin 0’dan farklı bir sayı olması gereklidir. If içerisine bir rakam da yazabiliriz fakat bunu böyle yazmanın bir anlamı yoktur. Şimdi if karar yapısının söz dizimini yazalım.

if (şart){
  komutlar;
  komutlar;
  komutlar;
}

if (şart)
{ 
komutlar; 
komutlar;
komutlar;
}

if (şart)
tek_komut;

Burada ilk kullanımda şart ifadesinin hemen ardından süslü parantezi açtık. Bunu aşağıda kullanmama sebebimiz if ifadesinde bu tarz bir kullanım alışkanlığı olduğu ve bu yönde kullanımın tavsiye edildiğidir. Alttaki ile aynı olsa da kodunuzu genel kabul görmüş kurallara göre yazmak istiyorsanız bu inceliklere dikkat etmeniz gerekir.

Şimdi if yapısını en basit halde kullanarak bir program yazalım ve deneyelim.

#include <stdio.h>
#include <stdlib.h>
int main() {
int sayi;
printf("Bir Sayi Giriniz:");
scanf("%i", &sayi);
if (sayi > 100){
	printf("\n Sayi 100'den Buyuktur \n");
}
 system("PAUSE");
 } // Main Sonu

Burada sayı 100’den büyükse ekrana “Sayı 100’den Buyuktur” ifadesi yazdırılacaktır. Eğer sayı 100’den büyük değilse bu komut işletilmeyecek ve if yapısı atlanacaktır. Sayının 100’den büyük olup olmadığını denetleyen karar mekanizması ise parantezlerin içerisinde (sayi > 100) olarak yer almaktadır. Buradaki şartı istediğimiz gibi değiştirip kendi karar yapımızı düzenleyebiliriz. Programın çıktısı şu şekilde olacaktır.

if yapısını döngülerin içerisinde kullanmakla etkili bir program yazmış oluruz. Örneğin 1 ile 10000 arasında 75’in katları olan sayıları bulmak için şöyle bir algoritma yazabiliriz.

#include <stdio.h>
#include <stdlib.h>
int main() {
int limit = 10000;
int i = 0;
while (i < limit)
{
if ((i%75) == 0){
printf("%i \n", i);
}
i++;
}
 system("PAUSE");
 } // Main Sonu

Burada limit adını verdiğimiz kaça kadar sayı olacaksa onun sınırını belirlemek amacıyla bir değişken tanımladık ve ona 10000 değerini yükledik. i değeri ise bizim döngü değişkenimiz olmaktadır. i değişkeni limit değerinden küçük olduğu sürece döngüye devam etme talimatı verdik. Döngü içerisinde i değeri her döngü çeviriminde birer birer artırılacaktır. Bunu i++ komutu ile sağladık. Döngü içerisindeki if komutu ise her döngü çeviriminde çalıştırılır. if ((i%75) == 0) ifadesinden göreceğiniz üzere if, while ve fonksiyonların içerisinde aritmetik işlem yapabiliriz. Biz de i%75 ile i değerinin 75’in katı olup olmadığını öğreniyoruz. Eğer 75’in katı ise bize sıfır değerini veriyor. Eğer sıfıra eşitse printf fonksiyonu ile sayımızı yazdırıyoruz. Programın ekran görüntüsü şu şekilde olacaktır.

Ekranın tamamını buraya alamasak da burada 10 bine kadar 75’in katlarını görebiliriz. Bir sonraki örnekte ise birden fazla if ifadesinin kullanımının nasıl olduğunu görelim.

#include <stdio.h>
#include <stdlib.h>
int main() {
int sayi;
printf("Bir Sayi Giriniz:");
scanf("%i", &sayi);
if (sayi > 100){
	printf("\n Sayi 100'den Buyuktur \n");
}
if (sayi < 100){
	printf("\n Sayi 100'den Kucuktur \n");
}

if (sayi == 100){
	printf("\n Sayi 100'e Esittir \n");
}
 system("PAUSE");
 } // Main Sonu

Burada yukarıdaki programın benzerini görmekteyiz. Fakat yukarıdaki program sadece sayının 100’den büyük olup olmadığını kontrol ediyordu. Burada ise sayının tüm ihmal durumlarını hesaba kattık ve programı bu şekilde yazdık.

Bizim anlattığımız for, while, if gibi deyimler başlangıç seviyesi olmayıp en ileri seviye programcılar ile programlarında etkin olarak bunları kullanmaktadır. Yani ileride size lazım olmayacak bilgileri asla size anlatmıyoruz. Bir sonraki yazımızda karar yapılarına devam edeceğiz.

Last updated