Her Yönüyle C
Would you like to react to this message? Create an account in a few clicks or log in to continue.
Her Yönüyle C

Hepsi Burada
 
AnasayfaAnasayfa  PortalliPortalli  GaleriGaleri  AramaArama  Latest imagesLatest images  Kayıt OlKayıt Ol  Giriş yapGiriş yap  

 

 FONKSYONLAR

Aşağa gitmek 
YazarMesaj
Admin
Admin
Admin


Erkek
Mesaj Sayısı : 804
Yaş : 35
Location : KoCaElİ
Kayıt tarihi : 29/10/07

Character sheet
Field:
FONKSYONLAR Left_bar_bleue100/100FONKSYONLAR Empty_bar_bleue  (100/100)

FONKSYONLAR Empty
MesajKonu: FONKSYONLAR   FONKSYONLAR Icon_minitimePtsi Kas. 12, 2007 2:43 am

Giriş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. C Dilini öğrenmek için ilk önce fonksiyon oluşturmayı ve onların diğerleri ile birlikte kullanılmasını öğrenmek gerekir. Bundan sonraki derslerde fonksiyonlar kullanılacaktır.

8.1 Fonksiyon Kavramı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 argumanları (bağımsız değişkenleri) vardır. Genel olarak bir fonksiyon Şekil 8.1'deki gibi bir kutu ile temsil edilir:
FONKSYONLAR Fonksiyon

Şekil 8.1:Bir fonksiyonun kutu gösterimi
Fonksiyonların girdilerine parametreler yada argumanlar denir. Bir fonksiyon bu parametreleri alıp bir işleme tabi tutar ve bir değer hesaplar. Bu değer çıktı, 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. Aşağıda bir ve iki girişli iki fonksiyonun kutu gösterimi verilmiştir.
Tek parametreli sqrt(x) fonksiyonu:



FONKSYONLAR Sqrt
İki parametreli F(x,y) = x*x + x*y fonksiyonu:



FONKSYONLAR F

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ı(argüman listesi)
argumanların 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: int topla(x,y) /* klasik biçim */
int x,y
{
int sonuc;
sonuc = x + y;
return sonuc;
}
veya int topla(int x,int y) /* modern biçim */
{
int sonuc;
sonuc = x + y;
return sonuc;
}
veya int topla(int x,int y) /* modern biçim */
{
return (x+y);
}
Bu örnekte, fonksiyonun kimlik kartı! ve kutu gösterimi şöyledir:







  • Fonksiyon tipi: int
  • Fonksiyon adı : topla
  • parametreler : x ve y
  • geri dönüş değeri: x+y

FONKSYONLAR ToplaHer üç 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ı Program 8.1'in üzerinde açıklanmıştır.

8.2 Fonksiyon BildirimiBir fonksiyonun bildirimi iki türlü yapılır:



  1. Ana programdan önce: ...
    int topla(int x,int y) /* fonksiyon */
    {
    ...
    }

    ...
    main()
    {
    ...
    }
  2. Ana programdan sonra: Bu durumda fonksiyon örneği (function prototype) ana programdan önce bildirilmelidir. ...
    int topla(int x,int y); /* fonksiyon prototipi */
    ...
    main()
    {
    ...
    }
    ...
    int topla(int x,int y) /* fonksiyon */
    {
    ...
    }

Bir C programı içinde, yazmış olduğunuz fonksiyonlar genellikle bu iki tipte kullanılır. İkinci kullanımda fonksiyon prototipi mutlaka bildirilmelidir. Aksi halde bir hata mesajı ile karşılaşılır. Fonksiyon prototipinde arguman isimlerinin yazılması zorunlu değildir. Sadece arguman tiplerini belirtmek de yeterlidir. Yukarıdaki topla fonksiyona ait prototip:
int topla(int x,int y);
şekinde yazılabileği gibi int topla(int,int);
şeklinde de yazılabilir. Buraya kadar anlatılanlar Program 8.1 üzeride özetlenmiştir.

Program 8.1: topla fonksiyonunun ana programda kullanılması




[color=gray] 1:
/* 08prg01.c: iki sayıyı toplar ve sonucu ekranda gösterir */
2:
3: #include
4:
5: int topla( int x,int y ); /*** fonksiyon prototipi ***/
6:
7: void main(void)
8: {
9: int toplam,a,b;
10:
11: printf("Iki sayi girin : ");
12: scanf("%d %d",&a,&b);
13:
14: /* fonksiyon çağırılıp, a ve b değerleri parametre olarak aktarılıyor.
15: topla(a,b) = a + b değeri toplam değişkenine atanması */

16: toplam = topla(a,b);
17:
18: printf("%d ve %d nin toplami %d dir.\\n", a,b,toplam);
19: }
20:
21: /*** fonksiyon tanımlanması ***/
22:
23: /* Bu fonksiyon iki tamsayıyı toplar */
24: int topla( int x, int y )
25: {
26: int sonuc;
27: sonuc = x + y;
28: return sonuc;
[color:ae49=gray:ae49]29: }
topla fonksiyonun prototipi 5. satırda, kendisi 23-29. satırlarda bildirilmiştir. Klavyeden okunan a ve b değişkenleri fonksiyonuna parametre olarak aktarılmıştır. Bu değişkenlerin isimleri ile topla fonksiyonunda kullanılan değişkenlerin (x ve y) isimleri aynı olması zorunlu değildir. Burara a ve b değişkenleri sırasıyla x ve y değişkenleri yerine konmuştur. 13. satırda toplam adlı tamsayı değişkenine topla fonksiyonunun dönüş değeri (a + b değeri) atanmıştır.

DERLEME ve ÇALIŞTIRMA



Turbo C (MS DOS)
GCC (Linux)

C:\\TC> tcc 08prg01.c
C:\\TC> 08prg01
$ gcc 08prg01.c -o 08prg01
$ ./08prg01

ÇIKTI




Iki sayi girin : 5 12
5 ve 12 nin toplami 17 dir.

8.3 Geri Dönüş Değerlerireturn 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>=50 && not<70>=70 && not<80>=80 && not<90>=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.
Program 8.2'de bildirilen artik_yil fonksiyonu kendisine parametre olarak gelen bir tamsayıyı yıl bilgisi olarak kabul eder. Eğer yıl artık yıl ise 1 aksi halde 0 gönderir. Programda iki tane return deyimi kullanıldığına dikkat ediniz. Artık yıl tanımı Ders 6: Karşılaştırma Deyimleri kısmında verilmişti.

Program 8.2: iki return deyimi kullanan bir fonksiyon




[color=gray] 1:
/* 08prg02.c: Bir fonksiyonda iki return deyimi */
2:
3: #include
4:
5: int artik_yil(int); /* fonksiyon prototipi */
6:
7: void main()
8: {
9: int yil;
10:
11: printf("Bir yil girin: ");
12: scanf("%d",&yil);
13:
14: if( artik_yil(yil) )
15: printf("%d artik yil\\n",yil);
16: else
17: printf("%d artik yil degil\\n",yil);
18: }
19:
20: /* yil artıl yıl ise 1 aksi halde 0 gönderir */
21: int artik_yil(int yil)
22: {
23: if( yil % 4 == 0 &&
24: yil % 100 != 0 ||
25: yil % 400 == 0 ) return 1;
26: else return 0;
[color:ae49=gray:ae49]27: }

DERLEME ve ÇALIŞTIRMA



Turbo C (MS DOS)
GCC (Linux)

C:\\TC> tcc 08prg02.c
C:\\TC> 08prg02
$ gcc 08prg02.c -o 08prg02
$ ./08prg02

ÇIKTI




Bir yil girin: 1996
1996 artik yil
Bir fonksiyonun her zaman geri dönüş değerinin olması gerekmez. Bu durumda return deyimi kullanılmaz. 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.

Program 8.3: void tipinde bir fonksiyon kullanımı




[color=gray] 1:
/* 08prg03.c: bankamatik simulasyonu.
[color=gray] 2:
İstenen para miktarını 20, 10 ve 5'lik birimlere böler
[color:ae49=gray:ae49]3: ve sonucu ekrana gösterir. */
4:
5: #include
6:
7: void bankamatik(int para)
8: {
9: int a,yirmilik,onluk,beslik;
10:
11: a = para;
12:
13: if(a%5==0)
14: {
15: yirmilik = a/20;
16: a -= yirmilik*20;
17:
18: onluk = a/10;
19: a -= onluk*10;
20:
21: beslik = a/5;
22: a -= beslik*5;
23:
24: printf("\\nYirmilik = %d",yirmilik);
25: printf("\\nOnluk = %d",onluk);
26: printf("\\nBeslik = %d\\n",beslik);
27: }
28: else
29: printf("Girilen miktar 5 YTL ve katlari olmali!\\a\\n");
30:
31: /* return deyimi yok !*/
32: }
33:
34: main()
35: {
36: int miktar;
37:
38: printf("Cekilecek para miktari (YTL) = ");
39: scanf("%d",&miktar);
40:
41: bankamatik(miktar); /* fonksiyon bir değişkene atanmamış ! */
[color:ae49=gray:ae49]42: }


DERLEME ve ÇALIŞTIRMA



Turbo C (MS DOS)
GCC (Linux)

C:\\TC> tcc 08prg03.c
C:\\TC> 08prg03
$ gcc 08prg03.c -o 08prg03
$ ./08prg03

ÇIKTI




Cekilecek para miktari = 135

Yirmilik = 6
Onluk = 1
Beslik = 1

ÇIKTI




Cekilecek para miktari = 456
Girilen miktar 5 YTL ve katlari olmali!
void anahtar sözcüğü C'ye sonradan dahil edilmiştir. Standart C'de (ANSI C) bu deyimin kullanılması zorunlu değildir. Ancak bu deyim okunabilirliği arttırmaktadır. Örneğin:
void bankamatik(int para) bankamatik(int para)
{ {
... ...
} }
şeklindeki kullanımlar geçerli ve aynı anlamdadır. Başka bir void fonksiyon örneği Program 8.4'de verilmiştir. Programdaki kutu_ciz fonksiyonu, iki for döngüsü kullanarak 'X' karakterlerinden oluşan basit bir kutu çizimi yapar.

Program 8.4: basit kutu çizen fonksiyon




[color=gray] 1:
/* 08prg04.c: Basit bir kutu çizen fonksiyon */
2:
3: #include
4:
5: void kutu_ciz(int,int);
6:
7: main()
8: {
9: kutu_ciz(8,35); /* 8 satır, 35 sütün */
10: }
11:
12: void kutu_ciz( int satir, int sutun )
13: {
14: int sut;
15: for ( ; satir > 0; satir--)
16: {
17: for (sut = sutun; sut > 0; sut--)
18: printf("X");
19:
20: printf("\\n");
21: }
[color:ae49=gray:ae49]22: }
Programda de sadece 18. satır defalarca işleme konur. Program çalıştırıldığında 8*35=280 adet 'X' karakteri ekrana bastırılır. 5. satırda kutu_ciz fonksiyonunun prototipi tanımlanmıştır. Bu fonksiyonun parametreleri (satir, sutun) ile çizilecek olan kutunun ebatları belirlenir. Bu fonksiyon 8 satır ve 35 sütun için main() fonsiyonundan 9. satırda çağırılmıştır. 15. satırda ilk for döngüsü çevrime başlar. Fakat bir başalangıç değeri belirtilmemiştir. Bu durumda satir değişkeni fonksiyondan buraya aktarılır. 17. satırda ikinci for döngüsü çevrime başlar ve sadece 18. satır bu döngünün içinde değerlendirilir. Yani satir değişkeninin herbir değeri için, bütün sutun değerleri tekrarlanır. İkinci döngü tamamlandığında 20. satırda alt satıra geçilir ve birinci çevrim yeni bir değer için yinelenir.
Sayfa başına dön Aşağa gitmek
https://cprogramlama.yetkin-forum.com
Admin
Admin
Admin


Erkek
Mesaj Sayısı : 804
Yaş : 35
Location : KoCaElİ
Kayıt tarihi : 29/10/07

Character sheet
Field:
FONKSYONLAR Left_bar_bleue100/100FONKSYONLAR Empty_bar_bleue  (100/100)

FONKSYONLAR Empty
MesajKonu: Geri: FONKSYONLAR   FONKSYONLAR Icon_minitimePtsi Kas. 12, 2007 2:43 am

8.4 Fonksiyon ParametreleriFonksiyon parametreleri (argümanları) 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):
long faktoriyel(n) /* kalsik biçim */
int n
{
int i=1;
long f=1;

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

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

while(ib ise a değerini aksi halde b değerini gönderir.

Program 8.6: Makro fonksiyon uygulaması




[color=gray] 1:
/* 08prg06.c: makro fonksiyon uygulaması */
2:
3: #include <stdio>
4:
5: #define buyuk(a,b) ((a>b)?a:b) /* makro fonksiyon */
6:
7: main()
8: {
9: int x,y,eb;
10:
11: printf("iki sayı girin: ");
12: scanf("%d,%d",&x,&y);
13:
14: eb = buyuk(x,y);
15:
16: printf("buyuk olan %d\n",eb);
[color:8b67=gray:8b67]17: }

DERLEME ve ÇALIŞTIRMA



Turbo C (MS DOS)
GCC (Linux)

C:\TC> tcc 08prg06.c
C:\TC> 08prg06
$ gcc 08prg06.c -o 08prg06
$ ./08prg06

ÇIKTI




iki sayı girin: 8,6
buyuk olan 8
Sayfa başına dön Aşağa gitmek
https://cprogramlama.yetkin-forum.com
 
FONKSYONLAR
Sayfa başına dön 
1 sayfadaki 1 sayfası

Bu forumun müsaadesi var:Bu forumdaki mesajlara cevap veremezsiniz
Her Yönüyle C :: C Programlama :: C Konu Anlatımları-
Buraya geçin: