23 Mart 2021 Salı

Fonksiyonlar c programlama

 C Programlama Dili fonksiyon olarak adlandırılan alt programların birleştirilmesi kavramına dayanır

. Bir C programı bir yada daha çok fonksiyonun bir araya gelmesi ile oluşur.

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.
Fonksiyonların girdilerine parametre denir. Bir fonksiyon bu parametreleri alıp bir işleme tabi tutar ve bir değer hesaplar. Bu değer, çıktı veya geri dönüş değeri (return value) olarak adlandırılır. Unutmayın ki, bir fonksiyonun kaç girişi olursa olsun sadece bir çıkışı vardır.
C Programlama Dili, kullanıcısına bu türden fonksiyon yazmasına izin verir. C dilinde hazırlanan bir fonksiyonun genel yapısı şöyledir:
      FonksiyonTipi FonksiyonAdı(parametre listesi)
      parametrelerin tip bildirimleri
      {
        Yerel değişkenlerin bildirimi
        ...
        fonksiyon içindeki deyimler veya diğer fonksiyonlar
        ...
        return geri dönüş değeri;
      }

Örneğin iki sayının toplamının hesaplayacak bir fonksiyon şöyle tanımlanabilir:
    /* klasik biçim */
    int topla(x, y)
    int x,y
    {
       int sonuc;
       sonuc = x + y;
       return sonuc;
    }
veya
    /* modern biçim */
    int topla(int x, int y)
    {
       int sonuc;
       sonuc = x + y;
       return sonuc;
    }
veya
    /* modern biçim */
    int topla(int x, int y)
    {
       return (x+y);
    }


Her üç program parçasında da return (geri dönüş) deyimi kullanılmaktadır. Bu deyim C programlama dilinin anahtar sözcüklerinden biridir ve fonksiyon içerisinde sonucu, kendisini çağıran yere göndemek için kullanılır. Yani topla fonksiyonu herhangi bir programın içerisinde kullanıldığında, fonksiyonun üreteceği sonuç return deyiminden sonra belirtilen değişken veya işlem olacaktır. Örneğin fonksiyon:
    ...
    int t;
    ...
    t = topla(9,6);
    ...
şeklinde kullanılırsa, t değişkenine 9+6=15 değeri atanır. topla() fonksiyonunun kullanımı ,

Fonksiyon bildiriminde, fonksiyona girdi olarak, kullanılan değişkenlere parametre denir.
Argüman ise fonksiyon çağrılırken gönderilen değere(lere) verilen addır.
Buna göre
    /* Fonksiyon bildiriliyor ... */
    int topla(int x, int y)  // Burada x ve y parametre
    {
       return (x+y);
    }
    .
    .
    /* Fonksiyon çağrılıyor ... */
    t = topla(9, 6);     // Burada 9 ve 6 argüman 


return anahtar sözcüğünün iki önemli işlevi vardır:
1.	fonksiyonun geri dönüş değerini oluşturur
2.	fonksiyonu sonlandırır
Bu deyiminden sonra bir değişken, işlem, sabit veya başka bir fonksiyon yazılabilir. Örneğin:
     return (a+b/c);         /* parantez kullanmak zorunlu değil */
     return 10;              /* değişken kullanmak mecbur değil */
     return topla(a,b)/2.0;  /* önce topla fonksiyonu çalışır */
Bir fonksiyonda birden çok geri dönüş değeri kullanılabilir. Fakat, ilk karşılaşılan return deyiminden sonra fonksiyon sonlananır ve çağrılan yere bu değer gönderilir. Örneğin aşağıdaki harf fonksiyonunda beş tane return deyimi kullanılmıştır.
     char harf(int not)
     {
        if( not>=0  && not<50 ) return 'F';
        if( not>=50 && not<70 ) return 'D';
        if( not>=70 && not<80 ) return 'C';
        if( not>=80 && not<90 ) return 'B';
        if( not>=90           ) return 'A';
     }
Bu fonksiyon kendisine parametre olarak gelen 0-100 arasındaki bir notun harf karşılığını gönderir. Aslında geri gönderilen değer bir tanedir. Eğer bu fonksiyon aşağıdaki gibi çağrılırsa:
     char harfim;
     ...
     harfim = harf(78);
     ...
harfim değişkenine 'C' değeri (karakteri) atanır.


Bir fonksiyonun her zaman geri dönüş değerinin olması gerekmez. Bu durumda return deyimi kullanılmayabilir. Eğer bu anahtar kelime yoksa, fonksiyon ana bloğu bitince kendiliğinden sonlanır. Böyle fonksiyonların tipi void (boş, hükümsüz) olarak belirtilmelidir. Bu tip fonksiyonlar başka bir yerde kullanılırken, herhangi bir değişkene atanması söz konusu değildir, çünkü geri dönüş değeri yoktur. Ancak, void fonksiyonlara parametre aktarımı yapmak mümkündür.
Program 8.3'de void fonksiyona örnek olarak bankamatik fonksiyonu ve kullanımı gösterilmiştir. Bu fonksiyon kendisine parametre olarak gelen YTL cinsinden para miktarını 20, 10 ve 5 YTL'lik birimler halinde hesaplar. Girilen miktar 5 YTL'nin bir katı değilse, ekrana uygun bir mesaj gönderir. bankamatik fonksiyonu bir dizi hesap yapmasına rağmen geriye hiç bir değer göndermez.


Fonksiyon parametreleri klasik ve modern olmak üzere iki türlü tanımanabilir. Örneğin aşağıdaki fonksiyon kendisine parametre olarak gelen tamsayının faktoriyelini gönderir. Bu fonksiyonun parametresi (n):
    int faktoriyel(n)      /* kalsik biçim */
    int n
    {
       int  i=1, f=1;

       while(i<=n) f *= i++;

       return f;
    }
şeklinde yada:
    int faktoriyel(int n)   /* modern biçim */
    {
       int  i=1, f=1;

       while(i<=n) f *= i++;

       return f;
    }
şeklinde yazılabilir.
Bir fonksiyona parametre aktarım yapılması zorunlu değildir. Parametresiz bir fonksiyon da tanımlamak mümkündür. Bu durumda, parametre kısmı ya boş bırakılır yada bu kısma void yazılır. Örneğin standard C'de stdlib.h kütüphanesinde tanımlı rand fonksiyonu şöyle tanımlanmıştır:
    int rand(void);
Son olarak, ne parametresi ne de geri dönüş değerine olan bir fonksiyon şöyle tanımlanabilir:
    void mesaj_yaz()
    {
       printf("Hata olustu !..\n");
    }
yada
    void mesaj_yaz(void)
    {
       printf("Hata olustu !..\n");
    }


Hiç yorum yok:

Yorum Gönder

Her yorum bilgidir. Araştırmaya devam...