İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır

Akış Kontrolü ve Döngüler

'WHILE' DÖNGÜSÜ

C dilinde, bircok tip dongu vardir. While dongusu, herhangi bir test, dogru kaldigi surece, bir program parcasini tekrarlar. Bu testin sonucu yalnis cikarsa, while dongusu sona erer, ve program normal akisina devam eder.

Göster Gizle Kopar Satır Gizle Satır Göster
main() /* while dongusunun bir ornegi */
{
int count;

count = 0;
while (count<6)
{
  printf("count'un degeri: %d oldu. ",count);
  count = count + 1;
}
}

Bu programda, count isimli bir degiskeni tanimliyoruz, ve sifira esitliyoruz. while dongusunun kullanimi, gorundugu gibi, 'while' sozcugu, ve parantez icinde bir test'den olusur. Parantezlerin icindeki deyim dogru kaldigi surece, bu program tekrarlar. Bu programda, degiskenin degeri teker teker arttirildigindan, eninde sonunda degeri altiya varacaktir, ve bu durumda program donguden cikacaktir.

Parantezlerin icinde yer alan deyimleri, bundan sonraki konuda isleyecegiz. O zamana kadar, bunlarin dusundugunuz seyleri yaptigini kabul ediniz.

Birkac onemli nokta:

DO-WHILE DONGUSU

Buna benzeyen bir baska komut ise, 'do-while' komutudur. Su program, daha once gordugumuz programa cok benzer:

Göster Gizle Kopar Satır Gizle Satır Göster
main() /* Do-While dongusu ornegi */
{
int i;

i=0;
do
{
  printf("I nin degeri simdi: %d oldu.\n",i);
  i = i + 1;
} while (i<5);
}

Yegane farkin, dongunun bir 'do' komutu ile yapilmasi ve denkligin kontrolunun sona birakilmasidir. Bu durumda, parantezlerin arasinda deyim dogru kaldigi surece, dongu tekrarlanir.

Burada onemli noktalar: Kontrol, dongunun sonunda yapildigindan, kume isaretlerinin arasindaki deyimler daima en az bir kere islenir. Ayrica yine, sayet i nin degeri degismez ise, program donguden cikmaz. Son olarak, sayet dongunun icinde bir tek komut varsa, kume isaretlerine gerek yoktur.

Ayrica, dilediginiz miktarda donguyu ic ice de koymaniz mümkündür.

FOR DONGUSU

For dongusu, yeni birsey degildir. Sadece, 'while' dongusunun bir baska seklidir:

Göster Gizle Kopar Satır Gizle Satır Göster
main() /* Bir for dongusu */
{
int index;
for(index=0;index<6;index = index + 1)
printf("index'in degeri simdi %d oldu.\n",index);
}

'For' dongusu, uc parcadan olusmustur. Her kesim birbirinden ; ile ayrilir. Ilk kesimi, baslangic kesimi (initalization) dir. Burada bulunan islemler, dongu baslamadan once, ve bir kere yapilir. Aslinda buraya yazilacak seyler icin bir sinir yoktur, fakat basit tutmakta fayda vardir. Bu kesime birden fazla islem yazilabilir, bunlari da birbirinden ',' virgul ile ayirmak gerekir.

Ikinci kesimde, "index<6" diyen parcada, bu dongunun her turunda kontrol edilmesi gereken deyim yer alir. Bu deyim dogru oldugu surece, dongu devam eder. Dogru yada yalnis sonuc veren herhangi bir deyim, bu kesimde yer alabilir.

Ucuncu kesimde yer alan islemler ise, yine dongunun her turunda yapilir, fakat isleme baslamasi, dongunun icinde yer alan komutlarin islenmesinden sonra yapilir.

'For' komutundan sonra, ya tek bir komut gelir, yada kume isaretleri icinde, bir komut bloku.. C de hemen heryerde, tek bir komut yerine, bir komut bloku koymaniz mumkundur.

IF KOMUTU

Göster Gizle Kopar Satır Gizle Satır Göster
/* Bu, if-else komutunun bir ornegidir */

main()
{
int data;
for (data=0;data<10;data = data + 1)
{
if (data==2)
printf("Data simdi %d ye esit.\n",data);

if (data<5)
printf("Data simdi %d. Bu da, 5 den azdir. \n",data);
else
printf("Data simdi %d. Bu da, 4 den buyuktur.\n",data);
}
}

Bu programda, ilk once, icinde iki tane if komutu olan bir for dongusu gorunuyor. Bu dongunun on kere tekrarlanacagi, acik bir sekilde goruluyor.

Ilk if satirina bakin: "if" kelimesi ile basliyor, ve sonra bir parantez icinde, sarti goruluyor. Sayet bu parantezin icindeki islemin sonucu dogru (evet) ise, if'den hemen sonra gelen satir islenir. Sayet cevap yalnis ise, if'den sonra gelen komut, atlanir. Burada da, tek bir komut, kume isaretleri ile, bir komut bloku haline getirilebilir.

Burada data==2 islemi, data degiskeninin degerinin ikiye esit olup olmadigini kontrol eder. (Sayet data = 2 olsa idi, tumuyle ayri birsey gerceklesirdi.)

IF-ELSE

Ikinci "if", yine birincisine benziyor. Fakat, ek olarak "else" isimli bir kesimi de iceriyor. Bu da, sayet parantezlerin icindeki islem dogru (EVET) sonuc verirse, "if" den sonra gelen satir islenecektir, sayet yalnis (HAYIR) sonucu verirse, "else" den sonra gelen komut islenecektir. Bu nedenle, iki satirdan biri muhakkak islenecektir.

BREAK ve CONTINUE

Göster Gizle Kopar Satır Gizle Satır Göster
main()
{
int xx;

for (xx=5;xx<15; xx=xx+1)
{
  if (xx==8)
  break;
  printf("Break dongusunun icinde, xx in degeri simdi %d\n",xx);
}

for (xx=5;xx<15;xx=xx+1)
{
  if (xx==8)
  continue;
  printf("Continue dongusunun icinde, xx in degeri simdi %d\n",xx);
}
}

Bu programda gordugunuz gibi, sayet xx in degeri 8 e esit ise, break isimli komutu cagiran bir if komutu goruyorsunuz. Break komutu, bizi donguden cikarip, programi dongunun hemen altindaki satirdan devam etmesini saglar.

Bu komut, ornegin dongunun icinde hesaplanan bir degere gore, donguden cikmak istediginizde cok ise yarar. Ornekte, xx in degeri sekize ulasinca, program donguden cikar, ve ekrana yazilmis en son deger, yedi olur.

Programin ikinci parcasindaki dongude ise, Continue komutunu goruyoruz. Burada ise, deger 8 e ulasinca, program donguden cikmaz, fakat program dongunun en son satirina atlayip, aradaki printf satirini islemez.

SWITCH

Göster Gizle Kopar Satır Gizle Satır Göster
main()
{
int kamyon;

for (kamyon = 3;kamyon<13;kamyon = kamyon + 1)
{
switch (kamyon)
{
case 3: printf("Degeri simdi uc.\n");
break;
case 4: printf("Degeri simdi dort.\n");
break;
case 5:
case 6:
case 7:
case 8: printf("Degeri simdi 5 le 8 arasinda.\n");
break;
case 11:printf("Degeri simdi onbir.\n");
break;
default:printf("Tanimsiz degerlerden biri.\n");
break;
}
}
}

Simdiye kadar gordugumuz en buyuk komut olan "switch", aslinda kullanimi kolaydir. Ilk once, "switch" kelimesi ile baslar. Bunun arkasindan, parantez icinde bir deyim gelir. Bundan sonra, dilediginiz kadar 'case' komutlari, kume isaretleri arasinda yer alir. Her degeri sembolize eden 'case' satirlari, degiskenin degeri, iki nokta ust uste, ve bununla ilgili komutlardan olusur.

Bizim ornegimizde, "kamyon" degiskeninin degeri 3 oldugunda, printf satiri, 'Degeri simdi uc' satirinin ekrana yazilmasini, saglar. Daha sonra yer alan 'break' komutu ise, switch in icinde yer alan diger komutlari islenmeden, switch den cikilmasini saglar.

Bir giris noktasi bulunduktan sonra, satirlar bir 'break' komutuna rastlayincaya kadar, yada switch'in son kume isaretine varincaya kadar komutlar siradan islenir.

"Kamyon" un degeri 5 e esit ise, program, case 5,6,7 den gecerek 8'de bulunan printf ve break komutlarini isler. Break komutu da, programi son kume isaretine getirir. Sayet degiskenin bir degerine karsilik gelen bir case yoksa, 'default:' isimli secenek secilir.

GOTO KOMUTU

Göster Gizle Kopar Satır Gizle Satır Göster
main()
{
goto leave
printf("Bu satir hic yazilmayacak.\n");
leave:
}

Goto komutunu kullanmak icin, "goto" isminin yanina, atlamak istediginiz yerin sembolik ismini yazmaniz yeterlidir. "goto" ile bir dongunun icine atlamaniza izin yoktur, fakat bir dongunun disina atlayabilirsiniz. Ayrica bir fonksiyondan otekine de "goto" ile gecemezsiniz.

Bazi kimseler, goto nun hicbir yerde kullanilmamasi gerektigini belirtiyorlar. Sayet, goto kullanimi ile, diger metodlara gore daha anlasilir bir program olusacaksa, goto yu kullanmaktan cekinmeyin.

SONUNDA - ISE YARAYAN BIR PROGRAM

Göster Gizle Kopar Satır Gizle Satır Göster
main() /* Santigrad'dan Fahrenheite */
{
int count; /* for degiskeni */
int fahr; /* fahrenheit degerini tutar */
int cen; /* Santigrat degerini tutar */

printf("Santigrad -> Fahrenheit karsilik tablosu\n\n");

for (count=-2;count<=12;count=count+1)
{
  cen = 10 * count;
  fahr = 32 + (cen * 9) / 5;
  printf(" C = %4d F = %4d ",cen,fahr);
  if (cen == 0)
    printf(" Suyun donma noktasi");
  if (cen == 100)
    printf(" Suyun kaynama noktasi");
    printf("\n");
}
}

Bu program, santigrad ve fahrenheit derecelerin tablosunu yaratmaktadir. Birden fazla degisken kullanilan ilk programimizdir bu. Degisken taniminda, uc ayri satir kullanilmasi sayesinde, degiskenlerin yanina ne ise yaradiklarini da yazabiliriz.

TAM SAYI ATAMA

Göster Gizle Kopar Satır Gizle Satır Göster
main()
{
int a,b,c;

a = 12;
b = 3;

c = a+b;
c = a-b;
c = a*b;
c = a/b;
c = a%b;

c = 12*a+b/2-a*b*2/(a*c+b*2);

a = a + 1; /* arttirma islemleri */
b = b * 5;

a = b = c = 20; /* Coklu atamalar */
a = b = c = 12*13/4;
}

Bu programda uc tam sayi degiskeni tanimliyoruz (a,b,c), ve bunlara degerler atiyoruz. Ilk iki satirda a ve b ye sayisal degerler veriyoruz. Daha sonraki dort satirda, basit islemler goruyorsunuz.

Besinci satirda ise, modulo operatorunu goruyorsunuz. Modulo, iki degisken birbirine bolundugunde, kalan degeri verir. Modulo, sadece integer ve char degisken tipleri ile kullanilabilir.

Daha sonra gelen iki arttirma islemleri ise, bu sekilde derleyici tarafindan kabul edilir, fakat bunlari yazmanin daha kestirme bir sekli vardir - bunu daha sonra gorecegiz.

Son iki satira gelince, bunlar cok tuhaf gorunebilir goze. C derleyicisi, atama satirlarini, sagdan sola dogru okur. Bunun sayesinde, coklu atamalar gibi, cok faydali islemler yapilabilir. Bu ornekte, derleyici, yirmiyi alip, c ye atiyor. Sola dogru devam ederken, b yi gorup, en son elde edilen sonucu (20) b ye atiyor. Ayni sekilde a ya da, b nin degeri veriliyor.

Bu programi derleyip, calistirmak son derece SIKICI olabilir. Bu programin hicbir ciktisi yoktur. Dilerseniz, ogrendiginiz printf fonksiyonu ile, programin yaptiklarini daha yakindan inceleyebilirsiniz.

C de veri tanimlari, program bloku icinde, islenecek komutlardan once gelir. Sayet tanimlari programin ortasina yerlestirmeye calisirsaniz, derleyici bir hata verecektir.

Dosya Listesi

İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır