Fonksiyonun Tan�mlanma Bi�imi    Fonksiyonun Prototipi     �zyineleme (Recursive) Fonksiyonlar

Problem ��zmenin ilkelerinden biri problemi m�mk�n oldu�u kadar �ok par�aya b�lmektir. Daha sonra bu par�alar ba��ms�z olarak d���n�l�p ��z�mleri elde edilebilir. C'de bu b�lme i�lemi fonksiyon kullanarak yap�l�r.

�rnek : Bir tamsay�n�n fakt�riyelini hesaplayan fonksiyon

main()

{

int i;

prinf(�Say�y� giriniz �); scanf(�%d�, &i);

printf(�%d\n�, fakt(i));

}

long fakt ( int n)

{

int j;

long f = 1;

for ( j = 2; j < =n; j = j + 1),

f = f * j;

return f;

}

1. Fonksiyonun Tan�mlanma Bi�imi

d�n��_tipi fonksiyon_ad�(parametreler)

{

yerel tan�mlamalar

deyimler

}

d�n��_tipi: E�er fonksiyon bir de�er geri g�nderecek ise de�erin tipini belirtir. Belirtilmez ise int kabul edilir. E�er fonksiyon de�er g�ndermeyecek ise d�n��_tipi yerine void yaz�l�r.

fonksiyon_ad�: Fonksiyon �a��r�l�rken kullan�lacak ad (belirleyici).

parametreler: Fonksiyon i�in gerekli de�erleri i�erir. Her parametre de�i�ken tan�mlar gibi tan�mlan�r. Her birinin aras�nda ',' kullanmak gerekir.

yerel tan�mlamalar: Bu fonksiyonu �zg�(de�i�ken,sabit) tan�mlamalar.

E�er fonksiyon bir de�er g�nderecek ise bu return deyimi ile yap�l�r.

return de�er;

2. Fonksiyonun Prototipi

Tan�mlana bir fonksiyonun ana mod�l i�erisinde prototipinin yaz�lmas� gerekir. Prototip ile fonksiyonun d�n�� de�eri ve ald��� parametrelerin tipleri tan�mlan�r. Bu bilgiye g�re C derleyicisi fonksiyon �a��r�ld���nda de�erlerin uygun oldu�unu s�nar.

int kub(int) kub fonksiyonu int bir de�eri al�r ve yine int bir de�er �retir.

�rnek : �� say�dan en b�y���n� veren fonksiyon.

Girdi : �� tane tamsay�

��kt� : girdilerin en b�y���

int max(int s1, int s2, int s3)

{

if (s1>s2 && s1>s2)

return s1;

else

if (s2>s3)

return s2;

else

return s3;

}

Bu fonksiyonu kullanan bir program

#include <stdio.h>

main()

{

int max(int, int, int);

clrscr();

printf("%d \n", max(1,2,3));

printf("%d \n", max(14,8,12));

printf("%d \n", max(1,6123,3123));

}

...

fonksiyonun tan�m blo�u

...

Genel (global) de�i�ken : Her yerde (main ve di�er fonksiyonlar) ge�erlidir, de�erine eri�ilebilir. Program�n en ba��nda, main fonksiyonunun d���nda tan�mlan�r.

Yerel (local) de�i�ken : Sadece tan�mland��� mod�lde ge�erlidir, de�erine eri�ilebilir. Mod�l i�inde tan�mlan�r.

int a; /*t�m fonksiyonlardan de�erine eri�ilebilir, de�eri de�i�tirilebilir. (global) */

main()

{

int b; /* sadece main fonksiyonu i�erisinden eri�ilebilir (local ) */

......

}

3. �zyineleme (Recursive) Fonksiyonlar

Kendini �a��ran fonksiyonlard�r.

�rnek: Faktoriyel hesab�

long fakt(long i) /* fakt = i! */

{

if (i<2)

return 1;

else

return i*fakt(i-1);

}

�rne�in n=4 i�in fonksiyonun kendisini �a��rd��� sat�r ��yledir:

4 * fakt(3), 3 * fakt(2), 2 * Fakt(1)--------------- 24 = 4 * 6 <-- 3 * 2 <-- 2 * 1