Uzun zamandan sonra C derslerine kaldığımız yerden devam ediyoruz. Bu derste C’de fonksiyon tanımlamayı ve kullanmayı öğreneceğiz.
Fonksiyon nedir?
Fonksiyon, belirli bir işlevi yapan kod kesimidir. Yani örneğin iki sayıyı toplayıp sonucunu döndüren (return), bir sayı alıp onun faktöriyelini döndüren (return) alt programlardır. Mesela bir program yazıyoruz, bir kaç yerde üs almamız gerekecek, örneğin bir yerde sayının 4.üssünü alacağız, başka bir yerde karesini, başka bir yerde küpünü, bunun için her sefer üs alan kodu kodlamak çok mantıksız olurdu. Bunun için bir sefer üs alan bir fonksiyon tanımlarız ve gereken her yerde bunu kullanırız.
Şimdi çok temel bir fonksiyon tanımlayalım:
int topla(int a, int b){
int sonuc = a + b;
return sonuc;
}
int main(){
int sayi1, sayi2, sonuc;
printf("İlk sayıyı giriniz: ");
scanf("%d",&sayi1);
printf("İkinci sayıyı giriniz: ");
scanf("%d",&sayi2);
cevap=topla(sayi1,sayi2);
printf("Cevap: %d",sonuc);
return 0;
}
Şimdi bu programı inceleyelim. Programımızın ana kesiminin, yani main’in üzerinde fonksiyonumuzu tanımladık.
int topla(int a, int b)
Burada int topla kısmında, int bizim fonksiyonumuzun return type‘ıdır. Yani bu fonksiyon bir int değer döndürecek demektir. topla kısmı bizim fonksiyonumuzun adıdır. (int a, int b) kısmında ise fonksiyonumuza iki adet parametre yollayacağımızı belirtiyoruz ve ikisi de int veri tipini taşıyan parametrelermiş. Sonra fonksiyonun içinde yapmak istediklerimizi yapıyoruz ve en sonunda ise return sonuc diyerek fonksiyonun döndüreceği değeri döndürüyoruz. Dikkat ederseniz fonksiyon a+b işleminin sonucunu taşıyan sonuc adında bir değişkeni döndürüyor.
sonuc değişkenimizin türü dikkat ederseniz int. Biz zaten fonksiyonumuzu tanımlarken int değer döndüreceğimizi belirtmiştik.
Şimdi mainin içine girdiğimizde
sonuc=topla(sayi1,sayi2); satırına geldiğimizde, program işlemeye fonksiyonumuzun içinden devam edecek. Yani fonksiyonumuzun içindeki işleri yapıp, fonksiyondan return komutu ile dönmeden aşağıdaki satıra yani printf(“Cevap: %d”,sonuc); satırına geçmeyecek.
Bu arada fonksiyonu nasıl kullandığımıza dikkat edin:
cevap=topla(sayi1,sayi2); topla fonksiyonunu çağırıyoruz, sayi1 ve sayi2 adında iki tane int değer yolluyoruz. Hatırlarsanız fonksiyonu tanımlarken iki adet int değer alacağını belirtmiştik. Fonksiyondan dönen değeri de sonuc adlı int değişkenimize atıyoruz. Bunu da fonksiyonumuzu tanımlarken belirtmiştik.
Fonksiyonun içindeki return sonuc; satırından dönen değeri, yani sonuc değişkeninin değerini cevap adlı değişkene atıyoruz.
Burada şunu bilmenizde fayda var. Yeni başlayanlar genelde karıştırrıyorlar çünkü. Fonksiyonun içinde (int a,int b) diye iki değişken tanımladık ve bunları parametre olarak alacağımızı gösterdik. Bu değişkenler fonksiyonumuzun yerel değişkenleri oldu. Yani bu değişkenler main’in içinden görülemezler. Biz main fonksiyonumuzun içinde
printf(“%d”,a);
gibi bir komut verirsek derleyici bize hata verir, a adlı bir değişken tanımlı değil diye. Ama printf(“%d”,a); kodunu fonksiyonumuzun içinde yazarsak hata almayız, çünkü bu değişkenler fonksiyonumuzun içinde tanımlı. Yerel değişken deriz bunlara. Fonksiyondan çıkınca program, bu değişkenleri tanıyamaz ve bellekten silinir bu değişkenler.
Şimdi daha işe yarar bir fonksiyon tanımlayalım ve üs alalım. İster girilen sayının karesini, ister küpünü, istersek 100. üssünü bile alabileceğimiz bir fonksiyon olsun:
int us_al(int us, int sayi){
int i=0,sonuc=1;
for (i=0;i<us;i++){
sonuc=sayi*sonuc;
}
return sonuc;
}
int main(){
int sayi, us, sonuc;
printf("Üssünü almak istediğiniz sayıyı girin: ");
scanf("%d",&sayi);
printf("Alınmasını istediğiniz üs derecesini girin: ");
scanf("%d",&us);
sonuc=us_al(us,sayi);
printf("Cevap: %d",sonuc);
return 0;
}
Bu fonksiyon sayesinde istediğimiz sayının istediğimiz üssünü alabiliriz. Burada dikkat edin, hem fonksiyondaki hemde maindeki değişken isimlerini aynı tuttum. Bir önceki örnekte ise farklıydı. Ama hiç farketmez, çünkü her değişken kendi fonksiyonu içinde tanımlıdır.
Ayrıca
sonuc=us_al(us,sayi);
yerine
sonuc=us_al(sayi,us);
yazsaydık ne olurdu? Bu sefer sayi değişkeninin üssünü almasını beklediğimiz program üs değişkeninin sayi’nci üssünü alırdı. Burdan şunu anlıyoruz ki fonksiyona yolladığımız birinci parametre, fonksiyon tanımındaki birinci parametre ile, fonksiyona yollanan ikinci parametre, fonksiyonun tanımındaki ikinci parametre ile eşleşir. 3. 4. vs. parametreler içinde aynı şekilde geçerlidir. Yani bir fonskiyona yollanan değişkenler ile fonksiyonda tanımlı değişkenlerin adı önemli değil fakat sırası önemlidir.
Şimdi siz de belirli geometrik şekillerin alanlarını bulan fonksiyonları yazmayı deneyin.
#include
// Fonksiyonlar burada tanımlanacak
// kare_alan
// dikdortgen_alan
// daire_alan
// ucgen_alan
int main(){
int sekil_kodu=0,sonuc=0,a=0,b=0;
while(sekil_kodu!=5){
printf("\n Üssünün alınmasını istediğiniz şeklin kodunu girin:\n1. Kare\n 2. Dikdörtgen\n 3. Daire\n 4. Üçgen\n Çıkmak için 5 girin: ");
scanf("%d",&sekil_kodu);
if(sekil_kodu==1){
printf("Karenin bir kenarını girin: "),
scanf("%d",&a);
sonuc=kare_alan(a);
printf("Karenin alanı: %d",sonuc);
}
else if(sekil_kodu==2){
printf("Dikdortgenin bir kenarını girin: "),
scanf("%d",&a);
printf("Dikdortgenin diğer kenarını girin: "),
scanf("%d",&b);
sonuc=diktorgen_alan(a,b);
printf("Dikdörtgenin alanı: %d",sonuc);
}
else if(sekil_kodu==3){
printf("Dairenin yarıcapını girin: "),
scanf("%d",&a);
sonuc=daire_alan(a);
printf("Dairenin alanı: %d",sonuc);
}
else if(sekil_kodu==4){
printf("Üçgenin taban boyunu girin: "),
scanf("%d",&a);
printf("Üçgenin yüksekliğini girin: "),
scanf("%d",&b);
sonuc=ucgen_alan(a,b);
printf("Üçgenin alanı: %d",sonuc);
}
else if(sekil_kodu==5){
printf("Güle güle");
}
else{
printf("Hatalı giriş yaptınız tekrar deneyin");
}
}
return 0;
}
Girildi: C Programlama | Etiketlendi: alptgay, C dili, C Programlama, dj.turkmaster, fonksiyon tanımlama, fonksiyonlar | 1 Yorum »




