Fonksiyonlar makale dizimizin ilk makalesinde C programlama dilinin temel taşlarından fonksiyonlara giriş yapıyoruz.
FONKSİYONLAR HAKKINDA
C orta seviye bir programlama dilidir. Düşük seviye dillerde Java, C# gibi dillerdir.Bu tanımdan şunu izah etmeye çalışıyorum ki; en düşük seviye dil en çok bilgisayar diline yakın olan dildir.Mesela C orta seviyedir bu yüzden fonksiyonlar bu programlama dilinin sağ ve sol elidir diye düşünebiliriz yani neredeyse tüm işi fonksiyonlara bıraktık gibi. Ama bir javada Classlar tüm işi götürmektedir. O zaman bu fonksiyonlar konusu çok önemlidir diyerek çok ince ince bu konuyu sizlere anlatmaya çalışacağım lütfen her kelimeme çok dikkat edin!
Bir bilgisayar programcısına neden matematik dersi verilir?
Çoğu insan bunu hep sorgular durur; gerçi bunu sorgulayan kişilere hep şaşkınlıkla bakarım, ama belki fonksiyonlar konusunu daha Sanalkurs için makale haline getirmediğimdendir.
Şimdi matematikteki bir fonksiyonlar konusunu hatırlamak gerekirse, f(x)=10x gibi en basit 1. dereceden bir fonksiyon görmüş oluruz ve f(x) fonksiyonunun değerinin bulunması için x'e bir değer verilir, ki bu X bir parametredir arkadaşlar. Bu kelime çok önemli: PARAMETRE.
X parametresi 1 için f(x) fonksiyonumuz 10 değerini alır ve fonksiyonun geri döndürdüğü değer 10'dur. GERİ DÖNDÜRDÜĞÜ DEĞER.
Arkadaşlar sizden ricam bu 2 kelimeyi ya da cümleciği çok iyi kavramanız:
-Parametre
-Geri Döndürdüğü Değer
Şimdi tüm bu anlatmaya çalıştığım kısmın bilgisayar programı olan C'de ne işe yaradığını göstermeye çalışacağım ve yukarıdaki kısımları çok iyi anladıysanız, fonksiyon konusunu çözdüğünüze inanın.
Şimdi bir C fonksiyonunun syntax'ını görelim de, siz de anlayın ki C'de fonksiyonları çok iyi anlamışsınız.
Döndürdüğü_değer_tipi fonksiyonun_ismi (parametre_listesi)
{
tanımlamalar ve komutlar
}
--Döndürdüğü_değer_tipi
Fonksiyonlar genelde başka bir fonksiyon içinden çağırılırlar (main (void) de bir fonksiyondur). Bu yüzden fonksiyonlar yapmaları gereken işi yaptıktan sonra kendilerini çağıran fonksiyona bir değer döndürürler ve bu yüzden Döndürdüğü_değer_tipi diye bir
Syntax görüyorsunuz ve bu int ,char , double gibi veri tipleridir.
--Fonksiyonun_ismi
Tanımladığımız fonksiyona verdiğimiz isimdir. Program içerisinde fonksiyonumuza bu isimle ulaşacağız. Bu ismin fonksiyonun yaptığı işlevi açıklayıcı nitelikte olması tercih edilir. Mesela faktoriyel hesabı kullanacağım zaman fak() diye bir isim yazarım sizde bu şekilde belirleyici isimler kullanabilirsiniz tabi üşenmezseniz tüm ismi yazın fark eden bir şey hiçbir şekilde olmayacaktır ne zaman farkı nede başka bir sorun çıkmaz yeter ki Türkçe karakter kullanmayın.
--Parametre_listesi
Yukarıda matematikte parametreleri kullanırken gördüğümüz şekilde mesela x parametresi için bir değer atayacaksak program içindede aynı şekilde bazı değişkenlerimiz olacak mesela x olabilir ki bu değişkeni çağırdığımız fonksiyonda kullanmak için işte bu parametre listesinde yazmamız gerekir şöyle de açıklayıcı bir örnek veriyim daha iyi anlaşılsın.
İnt faktoriyel(int x,int y);
Burada döndürülecek değer yani sonucumuz int yani integer(tamsayı) olmalıdır neden? Çünkü faktoriyel isimli fonksiyonumuzdan önce int yazıyor. Sonra parametre kısmına bakıyorum (int x,int y) demek ki 2 tane değişken gönderiyoruz çağırdığımız fonksiyona x ve y hemde integer veri tipinde yani tamsayı. Belki şu kısıma takılan olur diye belirtmeden geçemeyeceğim.Tam sayı derken mesela 3 mesela 5 , double veri tipinde olsaydı 3.4 , 5.0 evet 5.0 da bir double tip yani ondalık sayı bundan şunu anlayabilirsiniz sonuçlarınız tam sayı olduğu halde virgüllü ,0 halinde çıksın isterseniz double tipine çevirmeniz yeterli olur.
Fonksiyonları biz programlamada kolaylık olsun diye kullanıyoruz aslında mesela bir birinden farklı sayıların mesela 100 farklı sayının faktoriyelini almaya çalışan bir program yazacağımız zaman 100 kere aynı kodu yazmak yerine bir kere faktoriyel fonksiyonunu yazarım işim düşüncede o fonksiyonu çağırırım nasıl kulağa hoş geliyor değil mi ?
Çok daha fazlası var mesela bir kere faktoriyel fonksiyonunu yazdınız diyelim ki oda 5 satırlık basit bir kod 100 kere çağırın aynı fonksiyonu eğer 5 satır kod içinde hatanız yoksa sorun olmaz peki ya 5x100 500 satırda acaba kaç kere hataya düşersiniz.
O yüzden hatalarınız azalsın programlarınız hız kazansın diye fonksiyonlarınızı oluşturun ihtiyacınız oldukça bol bol çağırın o fonksiyonları.
Bahsettin bahsettin vermedin şu faktoriyel hesabını demeyin, diye onu da veriyorum:
Bu normal fonksiyonsuz hali:
#include <stdio.h>
int main()
{ int x,i,j=1;
printf("faktoriyelini hesaplatmak istediginiz sayiyi giriniz";
scanf("%d",&x);
for(i=1;i<=x;i++)
{
j=i*j;
}
printf("istediginiz sayinin faktoriyelini hesaplayip %d bulduk",j);
getchar();getchar();
return 0;
}
Buda fonsiyonla çağırılmış hali:
#include <stdio.h>
int faktoriyel(int a)
{ int i,j=1;
for(i=1;i<=a;i++)
{
j=i*j;
}
printf("istediginiz sayinin faktoriyelini hesaplayip %d bulduk",j);
}
int main()
{ int x;
printf("faktoriyelini hesaplatmak istediginiz sayiyi giriniz";
scanf("%d",&x);
faktoriyel(x);
getchar();getchar();
return 0;
}
fonksiyonlu halinde yazan faktoriyel(x); kısmını kaç kere kullanırsanız o kadar çok faktoriyelini almış olursunuz.
100 kere şu kodları yazacağıma:
#include <stdio.h>
int main()
{ int x,i,j=1;
printf("faktoriyelini hesaplatmak istediginiz sayiyi giriniz";
scanf("%d",&x);
for(i=1;i<=x;i++)
{
j=i*j;
}
printf("istediginiz sayinin faktoriyelini hesaplayip %d bulduk",j);
getchar();getchar();
return 0;
}
100 kere faktoriyel(x); yazarım! Nasıl ama?
Diğer yazımda görüşmek dileğiyle anlamadığınız kısımları geçmeyin, mutlaka sorun...