Fonksiyon, belirli sayıda verileri kullanarak bunları işleyen ve bir sonuç üreten komut grubudur.
Her fonksiyonun bir adı ve fonksiyona gelen değerleri gösteren parametreleri (bağımsız değişkenleri) vardır. Bir fonksiyon bu parametreleri alıp çeşitli işlemlere tabi tutar ve bir değer hesaplar.
Bu değer, çıktı veya geri dönüş değeri (return value) olarak adlandırılır. Bir fonksiyonun kaç girişi olursa olsun sadece bir çıkışı vardır.
24 Ekim 2016 Pazartesi
C ve Fonksiyonlar
C programları fonksiyonlardan oluşurlar.Şu ana dek kullandığımız main() de bir fonksiyondur. Bu fonksiyonun bir başka fonksiyon içinden çağrılmasına gerek yoktur. Her C programında bir main() fonksiyonun yer alması gerekmektedir.main() fonksiyonu, program çalıştırıldığında otomatik olarak çağrılan bir fonksiyondur.
Bir main() fonksiyonu içinden bir başka fonksiyon çağrılabilir. Bir fonksiyon içinden bir başka fonksiyon çağrılabilir.Örneğin, fonksiyon1( ) isimli fonksiyondan fonksiyon2( ) isimli bir başka fonksiyon çağrılabilir.
Fonksiyonlara Genel Bakış
Fonksiyonlar karmaşık yapılı programların karmaşıklığını azaltmak ve bu programları modüler bir yapıya kavuşturmak için kullanılırlar.
Fonksiyonlar, programcıların tekrarlanan kodlar yazmalarını önlerler.
Fonksiyon belirli bir adı olan program parçasıdır.
Fonksiyonların çalışabilmesi için bir başka fonksiyondan adı ile çağrılması gerekmektedir.
Fonksiyonlar
Gerçek hayattaki yazılım problemlerini çözen çoğu bilgisayar programları ve yazılımları, şu ana kadar öğrendiklerimizden çok daha geniş ve karmaşık bir yapıya sahiptir.
Tecrübeler bu tür geniş programları yazmanın en iyi yolunun, küçük parçaları ya da her biri orijinal programdan daha kolay kullanılabilecek modülleri (daha önceden hazırlanmış program parçacıkları) birleştirmek olduğunu göstermiştir.
Bu tekniğe, böl ve ele geçir (divide & conquer) denir.
Karakter Dizilerini Karşılaştırmak
İki karakter dizisinin birbirleriyle karşılaştırılarak, içerdiği karakterlerin aynı olup olmadıkları test edilebilir.
Bu amaçla strcmp() fonksiyonu kullanılır.
Karşılaştırma sonucunda, her iki karakter dizisi birbirinin aynı ise "0"; birbirinden farklı ise "1" değeri üretilir. Elde edilen bu değer kullanılarak programın akışı yönlendirilebilir.
Bu amaçla strcmp() fonksiyonu kullanılır.
Karşılaştırma sonucunda, her iki karakter dizisi birbirinin aynı ise "0"; birbirinden farklı ise "1" değeri üretilir. Elde edilen bu değer kullanılarak programın akışı yönlendirilebilir.
Karakter Dizilerini Birleştirmek
İki karakter dizisini birleştirilerek tek bir karakter dizisi haline dönüştürmek için C'nin strcat() fonksiyonu kullanılır.
Bu fonksiyon, var olan bir karakter dizisinin sonuna bir başka karakter dizisini ekleyecektir.
Örneğin "abc" karakter dizisinin sonuna "def" karakter dizisi strcat() fonksiyonu kullanılarak eklenebilir.
Karakter Dizilerinin Uzunluğu Bulmak
Bazı uygulamalarda bir karakter dizisinin uzunluğunu bulmak gerekebilir.
Bir karakter dizisinin uzunluğunu, yani kaç karakter içerdiğini bulmak için C'nin standart strlen() fonksiyonu kullanılır.
Uzunluk bulunurken, içerdiği en son karakter olan NULL karakteri göz özüne alınmaz.
Örneğin, karakter dizisi "abc" değerlerini içeriyorsa, strlen() fonksiyonu bu uzunluk olarak "3" değerini döndürür.
Karakter Dizileri (Strings)
Bazı programlama dillerinde karakter dizilerini tutmak için özel veri türleri (string, vb.) bulunmaktadır.
Ancak C programlama dilinde böyle bir veri türü olmadığı için yerine karakterlerden oluşan bir boyutlu diziler kullanılır.
Karakter dizilerine özel olarak, karakter dizilerinin sonuna sonlandırıcı karakter olarak adlandırılan bir simge eklenir.
Sonlandırıcı karakter:
Dizinin bittiği yeri gösterir.
ASCII tablosunun sıfır numaralı ('\0') karakteridir.
Karakter dizilerine iki şekilde başlangıç değeri verilebilir:
(1) char s[7] = {'d','e','n','e','m','e','\0'};
(2) char s[7] = "deneme";
Birinci tanımlamada sonlandırıcı karakter programcı tarafından konmalıdır.
İkinci tanımlamada ise buna gerek yoktur. Çünkü, sonlandırıcı karakter bu atamayla, derleyici tarafından eklenir.
Bir karakter dizisini klavyeden okumak için C'nin standart gets( ) fonksiyonu kullanılır.
stdio.h dışında yeni bir kitaplığı C programına dahil etmeye gerek yoktur.
Bu fonksiyon herhangi bir indeks tanımlamadan karakter dizilerinin okunmasını sağlar.
Okuduğu karakter dizisinin sonuna satır sonu işaretini değil, NULL değerini yerleştirir.
gets() fonksiyonu, klavyeden girilen karakter dizilerini, herhangi bir ek tanımlamaya gerek duymadan bir dizi içine yerleştirir.
Dizinin her bir karakteri dizinin farklı bir hücresi içine yerleşir.
Örnek:
char ad[20];
...
gets(ad);
Ancak C programlama dilinde böyle bir veri türü olmadığı için yerine karakterlerden oluşan bir boyutlu diziler kullanılır.
Karakter dizilerine özel olarak, karakter dizilerinin sonuna sonlandırıcı karakter olarak adlandırılan bir simge eklenir.
Sonlandırıcı karakter:
Dizinin bittiği yeri gösterir.
ASCII tablosunun sıfır numaralı ('\0') karakteridir.
Karakter dizilerine iki şekilde başlangıç değeri verilebilir:
(1) char s[7] = {'d','e','n','e','m','e','\0'};
(2) char s[7] = "deneme";
Birinci tanımlamada sonlandırıcı karakter programcı tarafından konmalıdır.
İkinci tanımlamada ise buna gerek yoktur. Çünkü, sonlandırıcı karakter bu atamayla, derleyici tarafından eklenir.
Bir karakter dizisini klavyeden okumak için C'nin standart gets( ) fonksiyonu kullanılır.
stdio.h dışında yeni bir kitaplığı C programına dahil etmeye gerek yoktur.
Bu fonksiyon herhangi bir indeks tanımlamadan karakter dizilerinin okunmasını sağlar.
Okuduğu karakter dizisinin sonuna satır sonu işaretini değil, NULL değerini yerleştirir.
gets() fonksiyonu, klavyeden girilen karakter dizilerini, herhangi bir ek tanımlamaya gerek duymadan bir dizi içine yerleştirir.
Dizinin her bir karakteri dizinin farklı bir hücresi içine yerleşir.
Örnek:
char ad[20];
...
gets(ad);
Çok boyutlu dizi örnekleri:
Çok boyutlu diziler tek boyuta indirgenerek bellekte tutulurlar.
Tek indisli dizilerde olduğu gibi, çok indisli dizilere de başlangıç değeri vermek mümkündür.
Örneğin 3 satır ve 4 sütunlu (3x4=12 elemanlı) bir x matrisinin elemanları şöyle tanımlanabilir:
int x[3][4] = {11,34,42,60, 72,99,10,50, 80,66,21,38};
int x[3][4] = {11,34,42,60, /* 1. satır elemanları */
72,99,10,50, /* 2. satır elemanları */
80,66,21,38}; /* 3. satır elemanları */
Tek indisli dizilerde olduğu gibi, çok indisli dizilere de başlangıç değeri vermek mümkündür.
Örneğin 3 satır ve 4 sütunlu (3x4=12 elemanlı) bir x matrisinin elemanları şöyle tanımlanabilir:
int x[3][4] = {11,34,42,60, 72,99,10,50, 80,66,21,38};
int x[3][4] = {11,34,42,60, /* 1. satır elemanları */
72,99,10,50, /* 2. satır elemanları */
80,66,21,38}; /* 3. satır elemanları */
Kaydol:
Kayıtlar (Atom)