Title: Fonksiyonlar
1Fonksiyonlar
2Fonksiyon nedir?
- Fonksiyon, belirli sayida verileri kullanarak
bunlari isleyen ve bir sonuç üreten komut
grubudur. - Her fonksiyonun bir adi ve fonksiyona gelen
degerleri gösteren degiskenleri (argümanlari)
vardir. Genel olarak bir fonksiyonun görevi
asagidaki sekilde gösterilmistir. -
3Fonksiyon tanimlama
- Fonksiyonlarin girdilerine parametreler yada
argumanlar denir. Bir fonksiyon bu parametreleri
alip bir isleme tabi tutar ve bir deger hesaplar.
Bu deger, çikti veya geri dönüs degeri (return
value) olarak adlandirilir. Bir fonksiyonun kaç
girisi olursa olsun sadece bir çikisi vardir. - C dilinde hazirlanan bir fonksiyonun genel yapisi
söyledir - DönüsTipi FonksiyonAdi(argüman listesi)
- argümanlarin tip bildirimleri
-
- Yerel degiskenlerin bildirimi ...
- fonksiyon içindeki deyimler veya diger
fonksiyonlar ... - return geri dönüs degeri
-
4Fonksiyon Tanimlama-2
- Dönüs_tipi fonksiyon tarafindan döndürülen
degerin tipini belirtir. Bu, int, double gibi bir
aritmetik tip veya gösterge olabilir. Dönüs_tipi
olarak void anahtar sözcügü kullanildiginda,
fonksiyondan hiçbir deger döndürülmeyecegi
belirtilmis olur. void fonksiyonlar FORTRANdaki
SUBROUTINEler veya Pascaldaki procedurelarin
karsiligidir. - Fonksiyon_adi bir tanitici sözcüktür.
- Argüman Listesi virgülle ayrilmis ve önüne
tipleri yazilmis biçimsel argüman veya parametre
isimleri listesidir. Diger bir fonksiyon
tarafindan çagrildiginda bu fonksiyona
geçirilecek olan argümanlarin sayisini, sirasini
ve tipini belirtir. Ayni zamanda, parametrelere,
sadece fonksiyonun gövdesini olusturan blokun
içinde anlamli olan, isimler verir. Hiç
parametresi olmayan bir fonksiyon da olabilir. Bu
durum, parantezler içine void yazilarak açikça
gösterilir. - Return Kontrolün çagirana geri dönmesini saglar.
return deyiminden sonra gelen deyimler yerine
getirilmez ve fonksiyon hemen çagrildigi yere
geri döner.
5Tanimlama Örnegi
- Örnegin iki sayinin toplamini hesaplayacak bir
fonksiyon söyle tanimlanabilir - / 1. yöntem/
- int topla(x,y)
- int x,y
-
- int sonuc
- sonuc x y
- return sonuc
/ 2. yöntem/ int topla(int x,int y) int
sonuc sonuc x y return sonuc
/ 3.yöntem/ int topla(int x,int y) return
(xy)
int topla( int x, y ) seklindeki yazim hata
verir.
6Fonksiyon Çagrilmasi
- Bir fonksiyonu ana programdan çagirmak için
genellikle bir degiskene deger döndürme seklinde
yapilir.Örnegin öndeki slaytta yer alan
fonksiyonu ana programdan çagirmak için söyle bir
tanimlama yapilabilir. - toplamtopla(5,4)
- Bu islem satirinda fonksiyona 5 ve 4 degerleri
gönderiliyor. Geri dönen sonuç ise toplam
degiskenine aktariliyor.
7Fonskiyon Çagirma sekli
8Fonksiyon bildirimi
- Bir fonksiyonun bildirimi iki türlü yapilir
- Ana programdan önce
- ...
- int topla(int x,int y) / fonksiyon /
- ...
- ...
- main()
- ...
- Ana programdan sonra Bu durumda fonksiyon
prototipi ana programdan önce bildirilmelidir. - .. int topla(int x, int y) / fonksiyon örnegi
- ... main()
- ...
- ...
- int topla(int x, int y) / fonksiyon /
- ...
int topla(int, int) seklinde de yazilabilir.
9Örnek 2 sayinin toplanip ekrana yazdirilmasi
isleminin fonksiyon yardimiyla yapilmasi.
- include ltstdio.hgt
- int topla(int, int) / fonksiyon prototipi
/ - main()
- int toplam,a,b
- printf("Iki sayi girin ")
- scanf("d d",a,b)
- / fonksiyon çagirilip, a ve b degerleri
parametre olarak aktariliyor./ - toplam topla(a,b)
- printf("d ve d nin toplami d dir.\n",
a,b,toplam) - getchar()
- getchar()
-
- / fonksiyon tanimlanmasi /
- / Bu fonksiyon iki tamsayiyi toplar /
- int topla( int x, int y )
- int sonuc
- sonuc x y
- return sonuc
Programda, klavyeden okunan a ve b degiskenleri
fonksiyonuna parametre olarak aktarilmistir. Bu
degiskenlerin isimleri ile topla fonksiyonunda
kullanilan degiskenlerin (x ve y) isimleri ayni
olmasi zorunlu degildir. Burada a ve b
degiskenleri sirasiyla x ve y degiskenleri yerine
konmustur.
10Örnek Faktöriyeli fonksiyonda hesaplayan program.
- include ltstdio.hgt
- int fakt (int n)
-
- int i 1,top1
- while (iltn)
-
- top i
- i
-
- return top
-
- main()
- int sayi 4
- printf("d! d\n", sayi, fakt(sayi))
- getchar()
-
Fonksiyon asagidaki sekilde de yazilabilir. int
fakt (int n) int i n while (--n) i n
return i
11Dizinin Fonksiyona Gönderilmesi
- Fonsiyonun bildirimi
- int fonk(int a5) //yada int fonk(int a)
- islemler
- Dizinin gönderilmesi
- int dizi5
- fonk(dizi)
125 elemanli bir dizinin elamanlarinin toplamini
fonksiyon yardimiyla hesaplayan program
Eger dizinin boyutu fonksiyona gönderilmeyip,
fonksiyonda boyutu hesaplanirsa kod asagidaki
gibi yazilir. include ltstdio.hgt int topla (int
sayi) int toplam0,i for(i0iltsizeof(sa
yi)i) toplamsayii return
toplam main() int sayi5
4,3,2,5,6 printf("d", topla(sayi))
getchar()
- include ltstdio.hgt
- int topla (int sayi,int eleman_sayi)
-
- int toplam0,i
- for(i0ilt5i)
- toplamsayii
- return toplam
-
- main()
- int sayi5 4,3,2,5,6
- int eleman_sayi5
- printf("d", topla(sayi,eleman_sayi))
- getchar()
13Örnek
- 5 elemanli bir dizi içindeki en büyük elemani bir
fonksiyon yardimiyla, en küçük elemani baska bir
fonksiyon yardimiyla bulup, bulunan bu en büyük
ve en küçük elemanlari da 3. bir fonksiyon
yardimiyla ekrana yazan program.
14Cevap
- main()
- int sayi5 4,3,2,5,6
- int eb,ek
- ebenb(sayi)
- ekenk(sayi)
- yaz(eb,ek)
-
- getchar()getchar()
-
- include ltstdio.hgt
- int enb(int sayi)
-
- int bulsayi0,i
- for(i1ilt5i)
- if(bulltsayii)
- bulsayii
- return bul
-
- int enk(int sayi)
-
- int bulsayi0,i
- for(i1ilt5i)
- if(bulgtsayii)
- bulsayii
- return bul
-
- int yaz(x,y)
15Özyinemeli(Recursive) Fonksiyonlar
- Fonksiyonlar tekrarlama yapilarina göre temel
olarak iki türlü düsünülebilir. Buna göre bir
fonksiyonun içinde yine kendisinden bir parça
bulunuyorsa bu fonksiyonlara özyinelemei
(recursive) fonksiyon denilirken, fonksiyonun
kendisini tekrar etmemesi durumunda döngülü
(iterative) fonksiyon ismi verilir.Teorik olarak
bütün döngülü (iterative) fonksiyonlar
özyinelemeli (recursive) fonksiyon olarak
yazilabilir (tersi de dogrudur).
16Özyinemeli(Recursive) Fonksiyonlar
- En basit açiklama yöntemi olarak faktoriyel
hesaplama fonksiyonu gösterilebilir.faktoriyel()
x0 ise sonuç sifirdirx1 ise sonuç birdirxn
için ise sonuç n çarpi fonksiyon(n-1) dir.Bu
örnekteki gibi girilen deger sifir yada bir
olmadigi sürece fonksiyon sifir yada bir ile
karsilasana kadar düzenli olarak n sayisindan bir
çikartarak kendisini çagirmaktadir.
17Klavyeden girilen sayiya kadar olan sayilari
recursive fonksiyon yardimiyla toplayan program
- includeltstdio.hgt
- includeltconio.hgt
- int topla(int a)
- if(a1)
- return 1
- return a topla(a-1)
-
- main()
-
- int sayi
- printf("sayi giriniz")
- scanf("d",sayi)
- printf("sayilarin toplamid",topla(sayi))
- getchar() getchar()
-
18Bir sayinin faktöriyelini recursive fonksiyon ile
bulan program
- int fakt(int n)
-
- if (n0)
- return 1
- return nfakt(n-1)
-
- main()
- int sayi4
- printf("d", fakt(sayi))
- getchar()
19ÖrnekKendini çagiran fonksiyon kullanarak,
kullanicidan alinan bir sayi kadar tek sayilarin
toplamini bulan program. Örnegin kullanici 4
girerse 1 3 5 7 nin toplamini bulup ekrana
yaziyor.
- includeltstdio.hgt
- includeltconio.hgt
- int topla(int n)
- return ((n1) ? 1 (2n-1)topla(n-1))
- main()
-
- int sayi
- printf("sayi giriniz")
- scanf("d",sayi)
- printf("Tek sayilarin toplamid",topla(sayi
)) - getchar() getchar()
-
20Klavyeden girilen bir metin içerisindeki büyük
harfleri recursive fonksiyon ile yazan program
- includeltstdio.hgt
- includeltconio.hgt
- includeltstring.hgt
- recursive (char,int,int)
- main()
-
- char dizi40,ptr
- int i,adet,x
- ptrdizi
- printf("\n Bir Karakter Katari Giriniz \n\n
") - gets(ptr)
- adetstrlen(ptr)
- x0
- printf("\n\n Girilen Metindeki Buyuk Harfler
gt ") - recursive(ptr,adet,x)
- getch()
-
recursive(char ptr_1,int adet1,int i )
if(adet10) return 1
if(isupper(ptr_1i)) printf("c",ptr_1i
) recursive(ptr_1,adet1-1,i1)