giriş - eembdersler.files.wordpress.com file5/13/2011 enf-102 jeoloji 2011 1 fonksiyonlar...

12
5/13/2011 ENF-102 Jeoloji 2011 1 Fonksiyonlar - Functions 2/69 Giriş • Büyük programlar yazmanın en kolay yolu onları küçük parçalar halinde yazıp sonra birleştirmekten geçer. • Buna “Böl ve fethet”-”divide and conquer” denir. 10 7 8 9 5 6 4 3 2 1 3/69 Örnek • Herhangi bir sektörde çalışan büyük bir işletme düşününüz. • Bu işletmede bütün işleri gören tek bir bölüm yoktur. • Bütün işler uygun bölümlerin sorumluluğundadır. • Bütün bu bölümlerde patron tarafından çalıştırılır. Patron Muhasebe Reklam Personel Gelir Gider 4/69 Örneğin Đkinci dereceden bir bilinmeyenli bir denklemin köklerinin hesaplanması işleminde yapılması gerekenler: 1. Diskriminantın hesaplanması, 2. Diskriminantın sonucuna bakarak kök olup olmadığına karar verilmesi 3. Duruma göre köklerin bulunması 5/69 • Bu bölüme kadar olan yöntemlerle tasarımı yine aynı şekilde düşünülürse bütün çözüm parçacıkları main() fonksiyonu içerisine yazılmalıdır. • Böyle olduğunda ana program bloğumuz problemin büyüklüğüne göre uzar, okunabilirliliği azalır, müdahale etmek zorlaşır. • Bu türlü büyük programları kendi içerisinde, her biri verilen bir işi çözmek için tasarlanmış alt program (sub program) parçacıklarından yani modüllerden oluşturmak daha mantıklı olacaktır. 6/69 C dilinde • Bu modüllere fonksiyon (function) adı verilir. • Diğer kaynaklarda "işlev" yada " alt yordam" adı ile de kullanılırlar. • Fonksiyonu çalıştırma işine çağırma (function call) denir. • Her fonksiyon, ismi (function name) ve kendisinden istenen işi gerçekleştirmek için gerekli olan değerler yani parametreler- argümanlar (arguments) ile çağrılırlar.

Upload: others

Post on 10-Sep-2019

10 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Giriş - eembdersler.files.wordpress.com file5/13/2011 ENF-102 Jeoloji 2011 1 Fonksiyonlar -Functions 2/69 Giriş • Büyük programlar yazmanın en kolay yolu onları küçük parçalar

5/13/2011

ENF-102 Jeoloji 2011 1

Fonksiyonlar - Functions

2/69

Giriş

• Büyük programlaryazmanın en kolayyolu onları küçükparçalar halindeyazıp sonrabirleştirmektengeçer.

• Buna “Böl vefethet”-”divideand conquer”denir.

10

7 8 9

5 6

4

3

2

1

3/69

Örnek

• Herhangi bir sektörde çalışan büyük bir işletmedüşününüz.

• Bu işletmede bütün işleri gören tek bir bölümyoktur.

• Bütün işler uygun bölümlerinsorumluluğundadır.

• Bütün bu bölümlerde patron tarafındançalıştırılır.

Patron

Muhasebe Reklam Personel

Gelir Gider

4/69

Örneğin

• Đkinci dereceden bir bilinmeyenli birdenklemin köklerinin hesaplanmasıişleminde yapılması gerekenler:1. Diskriminantın hesaplanması,

2. Diskriminantın sonucuna bakarak kökolup olmadığına karar verilmesi

3. Duruma göre köklerin bulunması

5/69

• Bu bölüme kadar olan yöntemlerle tasarımıyine aynı şekilde düşünülürse bütün çözümparçacıkları main() fonksiyonu içerisineyazılmalıdır.

• Böyle olduğunda ana program bloğumuzproblemin büyüklüğüne göre uzar,okunabilirliliği azalır, müdahale etmekzorlaşır.

• Bu türlü büyük programları kendi içerisinde,her biri verilen bir işi çözmek için tasarlanmışalt program (sub program) parçacıklarındanyani modüllerden oluşturmak daha mantıklıolacaktır.

6/69

C dilinde

• Bu modüllere fonksiyon (function) adıverilir.

• Diğer kaynaklarda "işlev" yada " altyordam" adı ile de kullanılırlar.

• Fonksiyonu çalıştırma işine çağırma(function call) denir.

• Her fonksiyon, ismi (function name) vekendisinden istenen işi gerçekleştirmek içingerekli olan değerler yani parametreler-argümanlar (arguments) ile çağrılırlar.

Page 2: Giriş - eembdersler.files.wordpress.com file5/13/2011 ENF-102 Jeoloji 2011 1 Fonksiyonlar -Functions 2/69 Giriş • Büyük programlar yazmanın en kolay yolu onları küçük parçalar

5/13/2011

ENF-102 Jeoloji 2011 2

7/69

• Eğer, argüman verilirse argümanlarüzerinde işlem yaparak ya da kendiiçerisinde farklı işlemlergerçekleştirerek yaptıkları işinsonucunu kendilerini çağıranfonksiyona bildirirler.

• Bu değere geri dönen değer (returnvalue) adı verilir.

Geri dönen değer x in kareköküdür

a=sqrt(x);

Fonksiyon ismi Parametreleri

8/69

Fonksiyonlar

• Girdi olarakparametre ilekendisine verilendeğeri alır veüzerinde işlemleryaparak sonuçdeğeri, yani geridönecek olandeğeri üretir.

9/69

main() fonksiyonu

• Programın çalışması main ()fonksiyonundan başlar.

• Bu fonksiyon diğer fonksiyonları çağırarakçalıştırır.

Main()

Fonk1() Fonk2() Fonk3()

Fonk4() Fonk5()

10/69

Fonksiyon Kullanmanın Faydaları

• Kodun gereksiz yere büyümesini engeller:– Sıkça tekrarlanan işlemler için bir kere fonksiyon

yazıldığında aynı kodlar tekrar yazılmaksızınistenildiği kadar çalıştırılabilirler.

– Aynı kod parçası gereksiz yere birden fazlayazılmamış olur.

• Okunabilirliği artırarak algılamayıkolaylaştırır:– main fonksiyonu içerisinde, birbirinden ayrılmış

sadece kendi işlerini yapan fonksiyonların isimlenbulunur.

– Detay işlemler fonksiyonların içinde halledilir.

– Bu programlama tekniğine prosedürel soyutlama(procedural abstraction) adı verilir.

11/69

Fonksiyon Kullanmanın Faydaları (devam)

• Programın test edilmesini vehataların bulunmasını kolaylaştırır.– Hata araştırılırken aranılması gereken alt

program bloğuna bakılır.

– Yalnız başlarına da istenirse testedilebilirler.

• Güncelleştirilebilir olmasını veyeniden kullanabilme kolaylığısağlar:– Modüler olarak yazıldıklarında istenilen

projelerde defalarca kullanılabilirler.12/69

C dilinde fonksiyonlar

• Standart fonksiyonlar

– Math (Matematik) kütüphanesi fonksiyonları,

– Standart kütüphane (stdlib) fonksiyonları,

• Kullanıcı tanımlı fonksiyonlar

Page 3: Giriş - eembdersler.files.wordpress.com file5/13/2011 ENF-102 Jeoloji 2011 1 Fonksiyonlar -Functions 2/69 Giriş • Büyük programlar yazmanın en kolay yolu onları küçük parçalar

5/13/2011

ENF-102 Jeoloji 2011 3

13/69

Standart fonksiyonlar

• C dilinin geliştiricileri tarafındanprogramcıların kullanmaları için, öncedenyazılmış olan hazır fonksiyonlardır.

• Hazır fonksiyonlar teknik olarak C dilininparçası değillerdir.

• Yalnızca standart hale getirilmişlerdir.• Programcı, kullanmak istediği hazır

fonksiyon prototiplerinin bulunduğu başlık(header) dosyalarını include önişlemcidirektifi ile bildirmek sureti ile kullanabilir.

• Fonksiyonların kendileri .LIB kütüphanedosyaları içerisindedir.

14/69

Math kütüphanesi fonksiyonları

• Bu kütüphane içerisinde, matematikselişlemleri gerçekleştirmek için kullanılanfonksiyonlar bulunur.

• Bu kütüphane içerisindeki fonksiyonlardouble türde değerler alır ve geriye doubletipte değerler döndürürler.

15/69

Math kütüphanesi fonksiyonları

Fonksiyon Açıklama Örnek

sqrt(x) x’in karakökünü alır sqrt(900.0)=30.0

exp(x) ex exp(1.0)=2.718282

log(x) Doğal algoritma log(2.718282)=1.0

log10(x)10 tabanına göre x’in logaritması

Log10(1.0)=0.0

fabsx(10) x’in mutlak değeri fabs(-5.0)=5.0

ceil(x) x’i kendisinden büyük en küçük sayıya yuvarlar.

ceil(-9.8)=9.0

ceil(9.2)=10.0

floor(x)x’i kendisinden küçük en büyük sayıya yuvarlar.

floor(-9.8)=-10.0

floor(9.2)=9.0

16/69

Math kütüphanesi fonksiyonları

Fonksiyon Açıklama Örnek

pow(x,y) xy pow(2.0,3.0)=8.0

fmod(x,y) x/y den kalanı verir.fmod(13.657,2.333)=1.1992

sin(x) Radyan cinsinden x’in sinüsü

sin(0.0)=0.0

cos(x)Radyan cinsinden x’in kosinüsü

cos(0.0)=1.0

tan(x)Radyan cinsinden x’in tanjantı

tan(0.0)=0.0

17/69

Standart kütüphane (stdlib)

• Bu kütüphane içerisinde türdönüşümleri, hafıza yerleştirmelerive rastgele sayı üretme fonksiyonlarıile yardımcı fonksiyonlar bulunur.

18/69

Rand()

• 0 ile stdlib içerisinde tanımlı olanRAND_MAX (32.767) arasında rastgelebir sayı üretir.

• Bu sayıyı, belli bir başlangıç değeriüzerinde, bir dizi aritmetik operasyongerçekleştirerek üretir.

Page 4: Giriş - eembdersler.files.wordpress.com file5/13/2011 ENF-102 Jeoloji 2011 1 Fonksiyonlar -Functions 2/69 Giriş • Büyük programlar yazmanın en kolay yolu onları küçük parçalar

5/13/2011

ENF-102 Jeoloji 2011 4

19/69

a=rand( )

• Đfadesi çalıştığında 0 ile 32767arasında rastgele bir değer üretilereka değişkeni içerisine aktarılır.

• Đstenen aralıklarda değer üretmesiiçin mod (% ) işlemi kullanılır.

• a= 1 + rand( )%6• ifadesinde 1 ile 6 arasında rastgele

bir değer üretilerek a değişkenineaktarılır.

20/69

srand()

• rand() fonksiyonu belli bir başlangıçdeğerinden itibaren bir dizi matematikselişlem sonucu rastgele bir değer üretir.

• Fakat programın her çalışmasında aynıbaşlangıç değerini kullanır.

• Dolayısı ile programın her çalışmasında aynıdeğer ya da değerler ortaya çıkar.

• srand() fonksiyonu rand() fonksiyonununüreteç başlangıç değerini belirlemek içinkullanılır.

• Unsigned tipte bir değer alır ve rastgelesayı üretecinin bu değerden başlayarakçalışmasını sağlar.

21/69

Örneğin;

scanf("%d",&a); srand(a);

a= 1 + rand() % 6;• Yukarıdaki kod parçasında klavyeden

girilen bir değer rastgele sayıüretecinin başlangıç değeriolmaktadır.

• Her defasında yeni bir rastgele değerelde edilmek istenirse klavyedensürekli değişik bir değer girilmelidir.

22/69

• Her defasında rastgele değişik bir sayının üretilmesiistenirse sürekli değişen bir değeri srand ilebaşlangıç değeri olarak belirlemek gerekir.

• Bilgisayarda bulunan ve sürekli değişen değer sistemsaatidir.

• Bunun için time () fonksiyonundan faydalanılabilir.

• Bu fonksiyon NULL parametresi ile çalıştırıldığında01.01.1970 ten günümüze kadar olan zamanın,saniye cinsinden değerini geri döndürür.

• Bu fonksiyon time kütüphanesi içerisindedir.

23/69

ÖRNEK: 1 ile 6 arasında rastgele 5 adet sayı üretip ekrana yazdıran programı yazınız.

/*l-6 arasında 5tane rastgele sayi üreten program */#include <stdio.h>#include <stdlib.h>#include <time.h>void main( ){

int x, i;srand(time(NULL));for( i=1 ; i<=5 ; i++ ) {

x=1 + rand() %6;printf(“%d, ", x );

}

24/69

1 ile 49 arasında ekrana rastgele 6 adet sayıyazan program.

/*1-49 arasında 6 tane rastgele sayi üreten program */#include <stdio.h>#include <stdlib.h>#include <time.h>int main( ){

int x, i;

srand(time(NULL));for( i=1 ; i<=5 ; i++ ){

x=1 + rand()% 49;printf(“%d, ”,x);

}return 0;

}

Page 5: Giriş - eembdersler.files.wordpress.com file5/13/2011 ENF-102 Jeoloji 2011 1 Fonksiyonlar -Functions 2/69 Giriş • Büyük programlar yazmanın en kolay yolu onları küçük parçalar

5/13/2011

ENF-102 Jeoloji 2011 5

25/69

Ekran Çıktısı

• 6, 1, 4, 1, 5,

• Çıktıda görüldüğü gibi çıkan bir sayıtekrar çıkabilir.

• Eğer programdaki srand satırı silinirseprogramın her defasında aynı sayıserisini ürettiği görülecektir.

26/69

Kullanıcı Tanımlı Fonksiyonlar

• Bu bölüme kadar üzerinde durulanfonksiyonlar C dilinde hazır olarakkullanılan standart fonksiyonlardır.

• Programcı kendi fonksiyonlarınıoluşturarak kullanabilir.

• Bu tür fonksiyonlara kullanıcı tanımlıfonksiyonlar (user definedfunctions) denilir.

27/69

Fonksiyon tanımlanması

[fonksiyon türü] <fonksiyon adı> ([parametreler]){

……………….;/*yapılacak işlemler*/……………….;……………….;

}

Fonksiyon başlığı

Fonksiyon

bloğu

28/69

Parametre ve geri dönüş değeri olmayan fonksiyonlar

• Bu tür fonksiyonlar, çağıran (caller)fonksiyondan ne bir değer alırlar ne degeriye bir değer döndürürler.

• Geriye dönüş değeri olmadığı içinfonksiyonun türü kısmına void ifadesiyazılır.

• Fonksiyonun türü aynı zamanda geriyedönüş değerinin türüdür.

29/69

Parametre ve geri dönüş değeri olmayan fonksiyonlar

• Burada dikkat edilmesi gereken nokta,fonksiyon türü yazmak zorunlu olmadığı içinhiçbir tür tanımlaması yapılmadığındafonksiyon türünün olmadığı ve geriye değerdöndürmediği anlamına gelmediğidir.

• Fonksiyon türü yazılmadığında derleyici intolarak varsayar.

• Bu türde bir değer döndürmesini bekler.

30/69

ÖRNEK: Ekrana "Merhaba" yazan fonksiyon

void f (void) {

printf (“Merhaba”);

}

void f ( ) {

printf (“Merhaba”);

}

ya da

Page 6: Giriş - eembdersler.files.wordpress.com file5/13/2011 ENF-102 Jeoloji 2011 1 Fonksiyonlar -Functions 2/69 Giriş • Büyük programlar yazmanın en kolay yolu onları küçük parçalar

5/13/2011

ENF-102 Jeoloji 2011 6

31/69

ÖRNEK: Ekrana aşağıdaki ev figürünü çizenfonksiyonları main() fonksiyonu ile birlikteyazınız.

32/69

PROBLEM PARÇALARI

1. Çatının çizilmesi 1.1. Đki kenarın çizilmesi

1.2. Tabanın çizilmesi

2. Gövdenin çizilmesi

3. Yolun çizilmesi

33/69

• Çatı çizme karışık bir iş olarak düşünülüp iki adet işparçasına bölünmüştür.

• Çatının çizilmesi için ikizkenar çiziminin ve tabançizme işlemlerinin gerçekleşmesi gerekir.

• Diyagram olarak aşağıdaki gibi gösterilebilir.

Main()

Caticiz() Govdeciz() Yoluciz()

Đkikenarciz() Tabanciz()

34/69

• main fonksiyonu yani programın anafonksiyonu problemi çözecek olan üçfonksiyonu çağıracaktır.

• Böylece ev figürü ekrana çizilmiş olacaktır.

• Burada main fonksiyonu çağıran (caller),diğer üç fonksiyon ise main tarafındançağrılan (called) fonksiyondur.

• Aynı şekilde çatıçiz fonksiyonu daikikenarçiz ve tabanciz fonksiyonlarınıçağıran fonksiyondur.

35/69

Adım adım programı yazalım – 1.

/* Bu program ekrana bir ev figürü çizer*/#include <stdio.h>/*Çatının iki kenarını çizen fonksiyon*/void ikikenar_ciz(){

/*Bir adet \ yazmak için \\ yazılması gerekir*/printf(" /\\ \n"); printf(" / \\ \n");printf("/ \\ \n");

}/*Çatının tabanını çizen fonksiyon*/void taban_ciz(){

printf("-----------\n");}/*Çatıyı çizen fonksiyon*/void cati_ciz(){

ikikenar_ciz();taban_ciz();

} 36/69

Adım adım programı yazalım – 2.

/*Gövdeyi çizen fonksiyon*/void govde_ciz(){

printf("----------- \n");printf("| | \n");printf("| | \n");printf("----------- \n");

}/*Yolu çizen fonksiyon*/void yolu_ciz(){

printf(" \\ \\ \n");printf(" \\ \\ \n");

}

Page 7: Giriş - eembdersler.files.wordpress.com file5/13/2011 ENF-102 Jeoloji 2011 1 Fonksiyonlar -Functions 2/69 Giriş • Büyük programlar yazmanın en kolay yolu onları küçük parçalar

5/13/2011

ENF-102 Jeoloji 2011 7

37/69

Adım adım programı yazalım – 3.

int main(){

cati_ciz();govde_ciz();

yolu_ciz();return 0;

}

38/69

Derleyici,

• derleme esnasında programı yukarıdan aşağı doğru derler.

• Fakat program main fonksiyonundan itibaren çalışmaya başlar, main fonksiyonunun ilk çağırdığı fonksiyon çatıçiz fonksiyonudur.

39/69

Derleyici,

• Program işleyişi bu satırı gördüğü andaçatıçiz fonksiyonuna dallanır, çatıçizfonksiyonu içerisinde ise ikikenarçizfonksiyonu çağrılmaktadır buradan daikikenarçiz fonksiyonuna dallanır,ikikenarçiz fonksiyonu blok sonu işaretine( }) kadar çalışır.

• Fonksiyon bittiğinde, program işleyişiçağıran fonksiyonun kaldığı noktadanitibaren devam eder.

40/69

• Kalınan nokta ikikenarçiz çağrıldıktan sonrakinokta olan tabançiz fonksiyonun çağrılacağısatırdır.

• Bu ifadeyi gördükten sonra program işleyişitabançiz fonksiyonuna dallanır.

• Bu fonksiyonun çalışması bittiğinde programişleyişi çağrılan noktaya geri döner.

41/69

• Đşleyiş devam ettirilir ve çatıçiz fonksiyonusona erer.

• Dönülmesi gereken nokta çatıçizfonksiyonunun çağrıldığı ifadeden sonra gelenifadedir.

• Burası main fonksiyonundaki gövdeçizfonksiyonunun çağrıldığı satırdır.

42/69

• Diğer fonksiyonlarda aynı şekilde çağrılıpçalıştırılır.

• Burada dikkat edilmesi gereken nokta herçağrılan fonksiyonun çalışması bittiktensonra program işleyişinin kendisini çağıranfonksiyonda kalınan noktadan devametmesidir.

Page 8: Giriş - eembdersler.files.wordpress.com file5/13/2011 ENF-102 Jeoloji 2011 1 Fonksiyonlar -Functions 2/69 Giriş • Büyük programlar yazmanın en kolay yolu onları küçük parçalar

5/13/2011

ENF-102 Jeoloji 2011 8

43/69 44/69

• Fonksiyonların sağladığı en büyükavantajlardan biri de kodun gereksizyere büyümesini engellemektir.

• Sıkça tekrarlanan işlemler için birkere fonksiyon yazıldığında aynıkodlar tekrar yazılmaksızın istenildiğikadar çalıştırılabilirler.

• Aynı kod parçası gereksiz yere birdenfazla yazılmamış olur.

45/69

Bir tane yerine beş tane ev çizmekgerekseydi,

• Yapılacak iş ev çizen fonksiyonlarıaşağıdaki gibi 5 kere çağıran yapıyıkurmak olacaktır:

int main(){ int i;

for (i=1;i<=5;i++){cati_ciz();govde_ciz();yolu_ciz();}return 0;

}

46/69

Fonksiyon tanımlamaları

• C programlama dilinde fonksiyontanımlamaları istenilen yerde yapılabilir,main () üstünde olmuş ya da altında olmuşönemli değildir.

• Bu tanımlama biçimini görene kadarşimdilik çağrılan fonksiyon çağıranfonksiyonun üzerinde yazılmalıdır denebilir.

• Burada dikkat edilecek diğer bir nokta "birfonksiyon içerisinde başka bir fonksiyontanımlaması" yapılamayacağıdır.

47/69

Parametre Alıp Geriye Değer DöndürmeyenFonksiyonlar

• Bu tür fonksiyonlar çağıran (caller)fonksiyondan bir ya da birden fazlaparametre (argument) alır ve bunlarüzerinde çeşitli işlemler gerçekleştirirler.

• Burada çağıran fonksiyondan çağrılanfonksiyona doğru bilgi akışı söz konusudur.

• Gönderilen değer girdi parametresi (inputargument) olarak değerlendirilir.

48/69

Parametre Alıp Geriye Değer DöndürmeyenFonksiyonlar

• Bu tür fonksiyonlar çağrılırkenfonksiyona gönderilecek olandeğerler ya da değerlen tutandeğişkenler fonksiyon parantezininiçerisine yazılır.

• Bu değerleri karşılayan değişkenlerdefonksiyon tanımlama kısmındaparantezler içerisinde belirtilir.

• Gönderilen değerler, karşılayandeğişkenler içerisine kopyalanılırlar.

Page 9: Giriş - eembdersler.files.wordpress.com file5/13/2011 ENF-102 Jeoloji 2011 1 Fonksiyonlar -Functions 2/69 Giriş • Büyük programlar yazmanın en kolay yolu onları küçük parçalar

5/13/2011

ENF-102 Jeoloji 2011 9

49/69

Parametre Alıp Geriye Değer DöndürmeyenFonksiyonlar

• Değerler birebir olarak gönderilirler.

• Yani birinci sırada gönderilen değerikarşılayan değişken ilk sırada, ikincigönderilen değişkeni karşılayandeğişken ikinci sırada yazılmalıdır.

• Gönderilenler ile karşılayanlarınsayısı eşit olmalıdır.

50/69

ÖRNEK :

• Kendisine gönderilen tamsayı değerin tek yada çift olup olmadığını ekrana yazanfonksiyonu main () fonksiyonu ile beraberyazınız.

• Bu soruda anahtar kelimeler "kendisinegönderilen" kelimeleridir.

• Bunlar fonksiyonun parametre alacağınıgösterir.

• Kaç adet parametre alacağı sorununkendisinden çıkarılır.

• Burada parametre sayısı birdir.

51/69 52/69

• Fonksiyona istenirse bir değişkenistenirse de sabit bir değergönderilebilir.

• Gönderilen değeri karşılayanfonksiyon tanımında parantezleriçerisine yazılan sayi değişkenidir.

53/69

• Gönderilen değerler bu değişken içerisinekopyalanır, sayi değişkeninin içerisine önceklavyeden girilen i değişkeni içerisindekideğer gönderilir ve değişkenin içerisindekideğer sayi değişkeni içerisinekopyalanacaktır.

• Aynı şekilde gönderilen 5 değeri de ilkçağrılma bittikten sonra tekrargönderilecektir.

54/69

Program çalıştırıldığında çıktısı aşağıdaki gibi olur:

Page 10: Giriş - eembdersler.files.wordpress.com file5/13/2011 ENF-102 Jeoloji 2011 1 Fonksiyonlar -Functions 2/69 Giriş • Büyük programlar yazmanın en kolay yolu onları küçük parçalar

5/13/2011

ENF-102 Jeoloji 2011 10

55/69

Burada bilgi akışı şekildeki gibidir.

56/69

Parametre Alıp Geriye Değer Döndüren Fonksiyonlar

• Bu tür fonksiyonlar çağıran (caller)fonksiyondan bir ya da birden fazlaparametre (argument) alır ve bunlarüzerinde çeşitli işlemler gerçekleştirerekgeriye bir değer döndürürler.

• Geriye değer döndürmek için kullanılankomut return komutudur.

57/69

Parametre Alıp Geriye Değer Döndüren Fonksiyonlar

• return [geridönüş değeri];

• Genel kullanımda da görüldüğü gibi geridönüş değeri isteğe bağlıdır, return komutuhem fonksiyonu sonlandırmak hem de geriyedeğer döndürmek amacı ile kullanılır.

• return komutu çalıştığı anda fonksiyonçalışması sonlanır.

58/69

ÖRNEK:

• Kendisine gönderilen iki tamsayıdeğerin toplamını geri döndürenfonksiyonu örnek bir main fonksiyonuile beraber yazınız.

59/69

Kod:

60/69

Çıktı:

• 3 ve 5 sayıları topla fonksiyonuna gönderilirve iki sayının toplamı sonuç değişkenineaktarılır.

• Sonuç değişkenin değeri de return komutuile geri döndürülür.

• Bu fonksiyon aşağıdaki gibi de yazılabilir.

Page 11: Giriş - eembdersler.files.wordpress.com file5/13/2011 ENF-102 Jeoloji 2011 1 Fonksiyonlar -Functions 2/69 Giriş • Büyük programlar yazmanın en kolay yolu onları küçük parçalar

5/13/2011

ENF-102 Jeoloji 2011 11

61/69

Parametre akış türleri

• Fonksiyonlara değerler gönderilirkeniki adet yöntemle gönderilirler.

• Bu yöntemler şimdilik kısacageçilecektir.

• Daha sonraki konularda kıyaslamalıolarak anlatılacaktır.

62/69

Değerle çağır (call by value)

• Bu yöntemle çağıran fonksiyondan gönderilen değerler, çağırılan fonksiyondaki parametrelerin içerisine kopyalanırlar.

• Kopyaların değiştirilmesi orijinal değerleri etkilemez.

• Şu ana kadar verilen bütün fonksiyon örneklerinde kullanılan yöntem budur.

63/69

Bağlantılı çağır (call by reference)

• Bu yöntemde değerlerin, kopyalandığıdeğişkenlerin değiştirilmesi orijinaldeğerleri etkiler.

64/69

Fonksiyon prototipleri (Function Prototype)

• Bu bölüme kadar olan örnekler defonksiyonlar, çağıran fonksiyonlarınüstünde olacak şekilde yazıldı.

• Çünkü derleyicinin, fonksiyonçağrılarında fonksiyonların geriyedöndürecekleri değerlerin tipleriniçağrılma satırından önce bilmesigerekir.

65/69

Fonksiyon prototipleri (Function Prototype)

• Derleme işlemi yukarıdan aşağı doğruyapıldığı için fonksiyonlar üsteyazıldığında geri dönüş tipi öncedenbilinir.

• Fakat fonksiyonlar, çağıranfonksiyonların altında datanımlanabilir.

66/69

Fonksiyon prototipleri (Function Prototype)

• Programların yazımında önce main()fonksiyonunun yazılması ve dahasonra diğer fonksiyonların yazılmasıpratikte yazım kolaylıkları sağlar.

• Dolayısı ile fonksiyonu çağırmadanönce fonksiyonun aldığı parametrelerile geri dönüş değerini derleyiciyebildirmek amacı ile fonksiyonprototipleri kullanılır.

Page 12: Giriş - eembdersler.files.wordpress.com file5/13/2011 ENF-102 Jeoloji 2011 1 Fonksiyonlar -Functions 2/69 Giriş • Büyük programlar yazmanın en kolay yolu onları küçük parçalar

5/13/2011

ENF-102 Jeoloji 2011 12

67/69

Fonksiyon prototipleri (Function Prototype)

• Fonksiyon prototiplerinde sadecefonksiyonun tipi, adı ve aldığıparametrelerin tipi yazılır.

• Parametre isimleri yazılmak zorundadeğildir.

• Yazılırsa derleyici bu isimleri göz ardı eder.

• Đsim yazmak yalnızca okunabilirliği artırır.

68/69

69/69

Kaynakça:

• Programlamayı C ile öğreniyorum (2. Baskı), M. Yorulmaz, S. Yorulmaz, 2005, Ankara