11.KOŞULLANDIRMA DEYİMLERİ
Programlamadaki ana unsur elbette ki ?eğer? ifadesidir. ?eğer? bütün programların yapıtaşıdır. Çünkü bilgisayar ?eğer?lerle çalışmaktadır. C dilinde karşılaştırma yapmak için if- else deyimleri sıklıkla kullanılır. Kullanımı şöyledir:
CODEif ( değer1 karşılaştırma operatörü değer2 ) Eğer doğruysa şunları yap... else Eğer yanlışsa şunları yap...
Karşılaştırma operatörleri şunlardır:
CODE!= eşit değil mi?
= = eşit mi?
< küçük mü?
> büyük mü?
<= küçük - eşit mi?
>= büyük - eşit mi?
= işareti karşılaştırma operatörü değil, atama operatörüdür.
== işareti karşılaştırma operatörüdür.
Şimdi gerçek bir kod örneği verelim.
CODEint sayi1;
if ( sayi1==10)
printf(?sayi1?in değeri 10?dur?);
else
printf(?sayi1?in değeri 10 değildir.?);
Eğer birden fazla işlem yapılacaksa köşeli parantezler içine alınır.
CODEchar karakter1;
if ( karakter1==?A?)//***
{
printf(?karakter1?in sayısal değeri 65?dir?);
printf(?karakter1?in karakter değeri A harfidir?);
}
else
{
printf(?karakter1?in sayısal değeri 65 değildir?);
printf(?karakter1?in karakter değeri A harfi değildir?);
İstenilirse else kullanılmayabilir. Doğru olmadığı durumda ekstra bir şeye gerek yoksa kullanmamak daha iyidir.
?A? yerine A yazamayız. Çünkü eğer öyle yaparsak derleyici A?yı bir değişkenmiş gibi yorumlayacaktır. Öyle bir değişken yoksa hata verir. Eğer varsa o değişkenin değeri ile karşılaştırma yapar. Demek ki tek tırnak işaretleri, içerisindekini karakter olarak yorumlamak için kullanılır ve yalnızca bir karakter için kullanılır. Çift tırnak işaretleri ise içerisinde birden fazla karakter olanlar için kullanılır. Bu konu string?ler bölümünde tafsilatlı olarak anlatılacaktır.
12.DÖNGÜLER
Daha önce, taslak hazırlama bölümünde, döngünün ne olduğuna kısaca değinmiştik. Döngü, tekrar edilecek işlemlerin oluşturulmasında kullanılan bir yöntemdir. C?de iki çeşit döngü vardır.Bunlar for döngüsü ve do-while döngüsüdür.
for döngüsü:
Bu döngünün kullanımında en azından bir sayaç gerekir. Sayaç genelde tamsayı bir değişken olarak seçilir. Bir örnek verip inceleyelim.
CODEint sayac;
for (sayac=1;sayac<10;sayac++)
yapılacak işlemler;
Bu döngüyü derleyici şu adımlarla yorumlar.
CODE1. sayac değişkenine ilk değer olarak 1 verir.
2. sayac değişkeninin 10?dan küçük olup olmadığını test eder.
2.a. Eğer küçükse yapılacak işlemleri yapar.
2.b. Eğer küçük değilse, yani eşit veya büyükse ?5? numaralı adıma gider.
3. sayac değişkenine bir eklenir. (sayac++ komutu bu değişkeni 1 arttır demektir)
4. Döngünün devam etmesi için ?2? numaralı adıma geri döner.
5. Döngü bitmiştir. Programa döngünün dışından, kaldığı yerden, devam eder.
CODEfor( ilk değer atama; karşılaştırma; değer değiştirme )
İŞLEMLER....
İlk değer atamada istenilen sayıda değişken için başlangıç değeri verilebilir. Karşılaştırma bölümünde o bölgedeki lokal değişkenler veya global değişkenler karşılaştırılabilir. Döngünün bir dahaki adımında karşılaştırma değerlerinin değiştirilmesi, değer değiştirme bölümünde olur. Yapılacak işlemler bölümünde bir değer değiştirme de elbette döngüyü etkileyecektir. Daha kısa veya uzun veya sonsuz döngü haline sokabilecektir. Buna dikkat edilmesi gerekir. İşlemler bölümünde birden fazla işlem varsa, işlemler köşeli parantezler içine alınır.
do-while döngüsü:
Bu döngü de kendi arasında iki çeşittir. Birincisi:
CODEdo
{
yapılacak işlemler ve belirlenen sayaçta değer değiştirme;
}
while ( karşılaştırma);
Bu döngü çeşitinde sayacı arttırmak için gerekli kod yapılacak işlemler bölümüne yazılır. Bu kod gayet açıktır. Derleyici bu kodu aşağıdaki şekilde yorumlar.
CODE1. Yapılacak işlemleri yapar.
2. Karşılaştırma bölümündeki işlemi yapar.
2.a. Eğer karşılaştırma doğruysa ?1? numaralı adıma döner.
2.b. Eğer karşılaştırma yanlışsa döngü biter.
İkincisi:
CODEwhile ( karşılaştırma)
{
yapılacak işlemler ve belirlenen sayaçta değer değiştirme;
}
Bu ikinci yöntem birincisine çok benzemekle birlikte farklıdır.. Derleyici bu kodu aşağıdaki şekilde yorumlar.
CODE1. Karşılaştırma bölümündeki işlemi yapar.
1.a. Eğer karşılaştırma doğruysa ?2? numaralı adıma gider.
1.b. Eğer karşılaştırma yanlışsa ?4? numaralı adıma gider.
2. Yapılacak işlemleri yapar.
3. ?1? numaralı adıma geri döner.
4. Döngü biter.
Aralarındaki tek fark şudur. Birinci örnekte, işlemler mutlaka, en az bir kere yapılır. Çünkü döngü, yapılacak işlemlerle başlar. İkinci örnekteyse ilk önce karşılaştırma yapıldığı için, döngü işlemleri en az bir kere yapılır diyemeyiz. Çünkü karşılaştırma yanlışsa döngü bitecektir.
Şimdi bunlara birer örnek verelim.
CODEint sayac;
sayac=1;
do
{
printf(?%dn?,sayac);
sayac=sayac*2;
}
while ( sayac<=128);
CODEint sayac;
sayac=1;
while (sayac<=128)
{
printf(?%dn?,sayac);
sayac=sayac*2;
}
Bu iki program kodu da, çalıştırıldığı zaman ekrana alt alta 2?nin kuvvetlerini 128?e kadar yazdırır.
?1 2 4 8 16 32 64 128? değerleri alt alta ekranda belirir.
<!-->
13.DÖNGÜLERDE KULLANILAN İKİ ÖZEL DEYİM
Döngülerden çıkmak, ya da döngüye bir sonraki adımdan devam etmek bazen çok gerekli olur. Bu gibi durumlarda imdadımıza continue; ve break; komutları yetişir. Adlarından da anlaşılabileceği gibi, continue; komutu döngüyü bir sonraki adıma yönlendirir. break; komutu ise döngüyü yarıda bırakır.
14.SWITCH-CASE DEYİMİYLE KOLAY KOŞULLANDIRMA
Ard arda bir sürü if-else kullanmak bazen karmaşıklığa yol açabilir. Bunun yerine göze daha hoş görünen bir koşullandırma yöntemi kullanılmalıdır. switch-case
switch-case ?de karşılaştırma operatörü yoktur. Sadece tam sayılar için kullanılır ve tam sayıların farklı değerlerinde ne olacağını bir liste halinde belirtir. Örnek:
CODEint sayi1;
switch ( sayi1 )
{
case 0:yapılacak işlemler; break;
case 1: yapılacak işlemler; break;
.............
.............
case 17: yapılacak işlemler; break;
}
Görüldüğü gibi sayi1 değişkeninin değerleri için ayrı ayrı karşılaştırma deyimi yazmaya gerek kalmadı. Bu yöntem bu gibi durumlarda büyük kolaylık sağlar. Şimdi bu yöntemi derleyicinin nasıl yorumladığına bakalım:
CODE1. Derleyici karşılaştırılacak tam sayı değer içeren değişkenin ?sayi1? değişkeni olduğunu öğrenir.
2. Listedeki case değerlerini tek tek karşılaştırarak, sayi1 değerine eşit bir case satırı gördüğünde o satırdaki işlemleri yapar. break; komutu kullanılmazsa o satırdan sonra break; komutu gelene kadar bulunan bütün işlemler yapılır. Yani, listenin alt kısmında ne varsa yapılır. case dikkate alınmadan!
Unutulmaması gereken bir başka özellik, karşılaştırılacak değişkenin sadece tam sayı olması gereğidir. char, int ya da başka bir tamsayı değişken tipi kullanılabilir.
15.DİZİLER
Bazı programlarda çok sayıda ve sıralı değişkenler kullanmak ve bunlara özel indis numaralarıyla ulaşmak isteyebilirsiniz. Bütün programlama dillerinde de olduğu gibi, C dilinde bu işi diziler yardımıyla yapabilirsiniz. Örneğin, bir küpün koordinatlarını kaydetmek için 8 adet koordinat gerekir. Her koordinat için 3 adet float tipinden koordinat verisi gerekir. Bunun için ayrı ayrı 24 tane değişken tanımlamak çok hantaldır. Bunun yerine 3 tane dizi tanımlarız:
CODEint x[8];
int y[8],z[8];
Bu diziler sayesinde her koordinata ulaşmak kolaylaşır. Çünkü istediğimiz koordinata ulaşmak için indis numarasını kullanmamız yeterli olacaktır.
Dizilerin önemli özelliği, indislemenin 0?dan başlayarak tanımlamada belirtilen sayının bir eksiğine kadar devam etmesidir. Yani dizi[2] olarak tanımlanan dizinin 2 elemanı vardır. {0 ve 1}
Şimdi, dizileri kullanan bir örnek program verelim.
CODEint dizi[8];
int sayac;
dizi[0]=5;
printf(?%dn?,dizi[0]);
for (sayac=1;sayac<8;sayac++)
{
dizi[sayac]=dizi[sayac-1]*5;
printf(?%dn?,dizi[sayac]);
}
Bu programın açıklamasını okumadan önce kendiniz programın ne yaptığını anlamaya çalışın!
Bu programda 8 elemanlı bir dizi tanımlanmıştır. İlk olarak, dizinin ilk elemanına 5 değeri verilmiştir. Daha sonra ekrana bu değer yazılmıştır.
Döngü başladığında, 2 numaralı dizi elemanının değeri, 1 numaralı dizi elemanının 5 katı olarak hesaplanır ve ekrana 25 yazılır. Döngü devam ettikçe dizi 5?in kuvvetleri olacak değerleri almaya devam eder. Ta ki 8. eleman da hesaplanıp döngüden çıkılana kadar!
<!-->