Fonksiyonlar - Functions. Örnek. Örneğin. C dilinde 5/13/2011. ENF-102 Jeoloji

Benzer belgeler
FONKSİYONLAR. Gerçek hayattaki problemlerin çözümü için geliştirilen programlar çok büyük boyutlardadır.

BMT 101 Algoritma ve Programlama I 11. Hafta. Yük. Müh. Köksal Gündoğdu 1

Dr. Fatih AY Tel:

MAK 1005 Bilgisayar Programlamaya Giriş. Fonksiyonlar. Prof. Dr. Necmettin Kaya

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-12 Fonksiyonlar. Yrd. Doç. Dr. Ümit ATİLA

Fonksiyonlar (Altprogram)

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

Hafta 13 Fonksiyonlar

ALGORİTMA VE PROGRAMLAMA I

ALGORİTMA VE PROGRAMLAMA I

Fonksiyonlar. Yrd.Doç.Dr.Bülent Çobanoğlu

Dr. Fatih AY Tel: fatihay@fatihay.net

BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ

HSancak Nesne Tabanlı Programlama I Ders Notları

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

BASİT C PROGRAMLARI Öğr.Gör.Dr. Mahmut YALÇIN

Bölüm 9. Altprogramlar ISBN

Diziler (Arrays) Çok Boyutlu Diziler

Programlama Dilleri 1. Ders 3: Rastgele sayı üretimi ve uygulamaları

NESNEYE YÖNELİK PROGRAMLAMA

Örnek: İki fonksiyondan oluşan bir program. Fonksiyon Tanımı

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

PROGRAMLAMAYA GİRİŞ DERS 2

Göstericiler (Pointers)

BİL-142 Bilgisayar Programlama II

Bilgisayar programlama III Fonksiyonlar

Programlamaya Giriş. Program : Belirli bir problemi çözmek için bir bilgisayar dili kullanılarak yazılmış deyimler dizisi.

GENEL GĐRĐŞ-ÇIKIŞ FONKSĐYONLARI. ENF102 Jeoloji 1. #include <stdio.h> printf Fonksiyonu ÖRNEK. printf

Özyineleme (Recursion)

FONKSIYONLAR(ISLEVLER)

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-1 Kapsama Kuralları & Rasgele Sayı Üretimi & Rekürsif (Özyinelemeli) Fonksiyonlar

Dr. Fatih AY Tel: fatihay@fatihay.net

Fonksiyonlar -Genel Test- A

Genel Programlama I Ders 6

Yrd. Doç. Dr. Caner ÖZCAN

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

ENF102 TEMEL BİLGİSAYAR BİLİMLERİ VE C/ C++ PROGRAMLAMA DİLİ. Gazi Üniversitesi Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü

Bir C programı C fonksiyonlarından oluşur. Bunlar arasında main() adı verilen ana fonksiyon daima olmalıdır. C fonksiyonları programı oluşturan

B02.6 Karar Verme, Eşitlik ve Bağıntı Operatörleri

Deney 7: Fonksiyon Tanımlama ve Parametre Aktarım Yöntemleri

C PROGRAMLAMA D İ L İ

ALGORİTMA VE PROGRAMLAMA II

10/17/2007 Nesneye Yonelik Programlama 3.1

C Programlama Dilininin Basit Yapıları

Bigisayar Programlama

Lambda İfadeleri (Lambda Expressions)

ALGORİTMA VE PROGRAMLAMA II

Pointer Kavramı. Veri Yapıları

/ C Bilgisayar Programlama Yıliçi Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

Temel Bilgisayar Bilimleri Ders Notu #4-2. kısım

HSancak Nesne Tabanlı Programlama I Ders Notları

Ders 5: Temel Kütüphane Fonksiyonlar

Bölüm 2 - C ile Programlamaya Giriş

Algoritma ve Programlamaya Giriş

Program Akış Kontrol Yapıları

C de Detaylı Üs Alma Programı. C# Dilinde Metot Tanımlama ve Yazdırma

C++ Dersi: Nesne Tabanlı Programlama

Sunum İçeriği. Programlamaya Giriş

C PROGRAMLAMA DİLİNE GİRİŞ

C# Metotlar ve Metot Tanımlama

BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ

sayi=3 harf=a reelsayi=8.72 Bellek durumu 5. İşaretç iler (pointers)

Sınav tarihi : Süre : 60 dak.

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

/ C Bilgisayar Programlama Final Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

Yrd. Doç. Dr. Caner ÖZCAN

ELN1001 BİLGİSAYAR PROGRAMLAMA I

Yrd. Doç. Dr. Caner ÖZCAN

Sınav tarihi : Süre : 60 dak. a) ABCDE b) BCDE c) ABCD d) kod hatalı e) BCD

2. Dereceden Denklemin Köklerini Bulan Program

Nesne Yönelimli Programlama

Program Nedir? Program, bir problemin çözümü için herhangi bir programlama dilinin kuralları ile oluşturulmuş komut kümesidir.

Yrd. Doç. Dr. Caner ÖZCAN

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-7 C Programlama Diline Giriş

C PROGRAMLAMA D İ L İ

Temel Giriş/Çıkış Fonksiyonları

7- Turbo Pascal Programlamada Alt Programlar (Procedure)

C dilinde if-else yapısı

Döngüler - Loops 4/9/2010. ENF-102 Jeoloji Giriş. Sayaç kontrollü bir döngüdeki temel öğeler. Sayaç (counter) Kontrollü Döngüler.

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 1 DERSİ LAB. ÖDEVİ

BİLGİSAYAR PROGRAMLAMA

int faktoriyel(int sayi) { int sonuc = 1; for(int i=sayi;i>0;i--) sonuc*=i; return sonuc; } int main() { int sayi = faktoriyel(5); }

Programlama Dilleri 1. Ders 4: Diziler

BÖLÜM 1b: C++ PROGRAMLAMANIN YAPISI. C++, hard diskte TC, BIN, INCLUDE, LIB gibi alt dizinlere yüklenir.

Üst düzey dillerden biri ile yazılmış olan bir programı, makine diline çeviren programa derleyici denir. C++ da böyle bir derleyicidir.

JAVA DÖNGÜ DEYİMLERİ. For Döngüsü

Döngüler - Loops 4/13/2011. ENF-102 Jeoloji Sayaç kontrollü bir döngüdeki temel öğeler. Sayaç (counter) Kontrollü Döngüler.

Toplama işlemi için bir ikili operatör olan artı işareti aynı zamanda tekli operatör olarak da kullanılabilir.

HSancak Nesne Tabanlı Programlama I Ders Notları

Giriş. ENF102 Jeoloji

ALGORİTMA VE PROGRAMLAMA I

Internet Programming II

BÖLÜM 7: DÖNGÜ KONTROL YAPILARI

ALGORİTMALAR. Turbo C Bilgisayarda Problem Çözme Adımları. Bilgisayarda Problem Çözme Adımları.

BLM 112- Programlama Dilleri II. Hafta 5 İşaretçiler (Pointers)

2) /* Kullanıcıdan alınan iki sayının obebini alt fonksiyon yardımı ile hesaplayan C programı*/

-A Grubu- MKT103 Görsel Programlama 2015/2016 Güz Dönemi Final Sınavı

3/3/2011. ENF-102 Jeoloji 1. Akış Diyagramı. Akış Diyagramı Şekilleri

MAK 1005 Bilgisayar Programlamaya Giriş C DİLİNE GİRİŞ. Prof. Dr. Necmettin Kaya

Algoritma ve Programlama: Karar Yapıları ve Döngüler

Transkript:

Fonksiyonlar - Functions Giriş 10 7 8 9 5 6 4 3 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. 2 1 2/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 Ö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ı Muhasebe Reklam Personel Gelir Gider 3/69 4/69 C dilinde 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. 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 parametrelerargümanlar(arguments) ile çağrılırlar. 5/69 6/69 ENF-102 Jeoloji 2011 1

Fonksiyonlar Eğer, argüman verilirse argümanlar üzerinde işlem yaparak ya da kendi içerisinde farklı işlemler gerçekleştirerek yaptıkları işin sonucunu kendilerini çağıran fonksiyona bildirirler. Bu değere geri dönen değer (return value) adı verilir. Fonksiyon ismi a=sqrt(x); Parametreleri Geri dönen değer x in kareköküdür 7/69 Girdi olarak parametre ile kendisine verilen değeri alır ve üzerinde işlemler yaparak sonuç değeri, yani geri dönecek olan değeri üretir. 8/69 main() fonksiyonu Fonksiyon Kullanmanın Faydaları Programın çalışması main () fonksiyonundan başlar. Bu fonksiyon diğer fonksiyonları çağırarak çalıştırır. Fonk4() Main() Fonk1() Fonk2() Fonk3() Fonk5() 9/69 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ın istenildiği kadar çalıştırılabilirler. Aynı kod parçası gereksiz yere birden fazla yazı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 isimlen bulunur. Detay işlemler fonksiyonların içinde halledilir. Bu programlama tekniğine prosedürel soyutlama (procedural abstraction) adı verilir. 10/69 Fonksiyon Kullanmanın Faydaları (devam) C dilinde fonksiyonlar Programın test edilmesini ve hataları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 test edilebilirler. Güncelleştirilebilir olmasını ve yeniden kullanabilme kolaylığı sağlar: Modüler olarak yazıldıklarında istenilen projelerde defalarca kullanılabilirler. 11/69 Standart fonksiyonlar Math (Matematik) kütüphanesi fonksiyonları, Standart kütüphane (stdlib) fonksiyonları, Kullanıcı tanımlı fonksiyonlar 12/69 ENF-102 Jeoloji 2011 2

Standart fonksiyonlar Math kütüphanesi fonksiyonları C dilinin geliştiricileri tarafından programcıların kullanmaları için, önceden yazılmış olan hazır fonksiyonlardır. Hazır fonksiyonlar teknik olarak C dilinin parç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şlemci direktifi ile bildirmek sureti ile kullanabilir. Fonksiyonların kendileri.lib kütüphane dosyaları içerisindedir. Bu kütüphane içerisinde, matematiksel işlemleri gerçekleştirmek için kullanılan fonksiyonlar bulunur. Bu kütüphane içerisindeki fonksiyonlar double türde değerler alır ve geriye double tipte değerler döndürürler. 13/69 14/69 Math kütüphanesi fonksiyonları 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) e x 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) floor(x) x i kendisinden büyük en küçük sayıya yuvarlar. x i kendisinden küçük en büyük sayıya yuvarlar. ceil(-9.8)=9.0 ceil(9.2)=10.0 floor(-9.8)=-10.0 floor(9.2)=9.0 Fonksiyon Açıklama Örnek pow(x,y) x y pow(2.0,3.0)=8.0 fmod(x,y) sin(x) cos(x) tan(x) x/y den kalanı verir. Radyan cinsinden x in sinüsü Radyan cinsinden x in kosinüsü Radyan cinsinden x in tanjantı fmod(13.657,2.333)= 1.1992 sin(0.0)=0.0 cos(0.0)=1.0 tan(0.0)=0.0 15/69 16/69 Standart kütüphane (stdlib) Bu kütüphane içerisinde tür dönüşümleri, hafıza yerleştirmeleri ve rastgele sayı üretme fonksiyonları ile yardımcı fonksiyonlar bulunur. Rand() 0 ile stdlib içerisinde tanımlı olan RAND_MAX (32.767) arasında rastgele bir sayı üretir. Bu sayıyı, belli bir başlangıç değeri üzerinde, bir dizi aritmetik operasyon gerçekleştirerek üretir. 17/69 18/69 ENF-102 Jeoloji 2011 3

a=rand( ) srand() Đfadesi çalıştığında 0 ile 32767 arasında rastgele bir değer üretilerek a değişkeni içerisine aktarılır. Đstenen aralıklarda değer üretmesi iç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şkenine aktarılır. 19/69 rand() fonksiyonu belli bir başlangıç değerinden itibaren bir dizi matematiksel iş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çin kullanılır. Unsigned tipte bir değer alır ve rastgele sayı üretecinin bu değerden başlayarak çalışmasını sağlar. 20/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ğeri olmaktadır. Her defasında yeni bir rastgele değer elde edilmek istenirse klavyeden sürekli değişik bir değer girilmelidir. 21/69 Her defasında rastgele değişik bir sayının üretilmesi istenirse sürekli değişen bir değeri srand ile başlangıç değeri olarak belirlemek gerekir. Bilgisayarda bulunan ve sürekli değişen değer sistem saatidir. Bunun için time () fonksiyonundan faydalanılabilir. Bu fonksiyon NULL parametresi ile çalıştırıldığında 01.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. 22/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 ); 23/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; 24/69 ENF-102 Jeoloji 2011 4

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ı silinirse programın her defasında aynı sayı serisini ürettiği görülecektir. Kullanıcı Tanımlı Fonksiyonlar Bu bölüme kadar üzerinde durulan fonksiyonlar C dilinde hazır olarak kullanılan standart fonksiyonlardır. Programcı kendi fonksiyonlarını oluşturarak kullanabilir. Bu tür fonksiyonlara kullanıcı tanımlı fonksiyonlar (user defined functions) denilir. 25/69 26/69 Fonksiyon tanımlanması [fonksiyon türü] <fonksiyon adı> ([parametreler]).;/*yapılacak işlemler*/.;.; Fonksiyon başlığı Fonksiyon bloğu Parametre ve geri dönüş değeri olmayan fonksiyonlar Bu tür fonksiyonlar, çağıran (caller) fonksiyondan ne bir değer alırlar ne de geriye bir değer döndürürler. Geriye dönüş değeri olmadığı için fonksiyonun türü kısmına void ifadesi yazılır. Fonksiyonun türü aynı zamanda geriye dönüş değerinin türüdür. 27/69 28/69 Parametre ve geri dönüş değeri olmayan fonksiyonlar Burada dikkat edilmesi gereken nokta, fonksiyon türü yazmak zorunlu olmadığı için hiçbir tür tanımlaması yapılmadığında fonksiyon türünün olmadığı ve geriye değer döndürmediği anlamına gelmediğidir. Fonksiyon türü yazılmadığında derleyici int olarak varsayar. Bu türde bir değer döndürmesini bekler. ÖRNEK: Ekrana "Merhaba" yazan fonksiyon void f (void) printf ( Merhaba ); ya da void f ( ) printf ( Merhaba ); 29/69 30/69 ENF-102 Jeoloji 2011 5

ÖRNEK: Ekrana aşağıdaki ev figürünü çizen fonksiyonları main() fonksiyonu ile birlikte yazınız. 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 31/69 32/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. Đkikenarciz() Main() Caticiz() Govdeciz() Yoluciz() Tabanciz() main fonksiyonu yani programın ana fonksiyonu 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 da ikikenarçiz ve tabanciz fonksiyonlarını çağıran fonksiyondur. 33/69 34/69 Adım adım programı yazalım 1. Adım adım programı yazalım 2. /*Gövdeyi çizen fonksiyon*/ void govde_ciz() /* 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"); printf(" / \\ \n"); printf("/ \\ \n"); printf(" \n"); printf("----------- \n"); /*Çatının tabanını çizen fonksiyon*/ void taban_ciz() /*Yolu çizen fonksiyon*/ printf("-----------\n"); void yolu_ciz() /*Çatıyı çizen fonksiyon*/ void cati_ciz() printf(" \\ \\ \n"); ikikenar_ciz(); printf(" \\ \\ \n"); taban_ciz(); 35/69 36/69 ENF-102 Jeoloji 2011 6

Adım adım programı yazalım 3. int main() cati_ciz(); govde_ciz(); yolu_ciz(); return 0; 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. 37/69 38/69 Derleyici, Program işleyişi bu satırı gördüğü anda çatıçiz fonksiyonuna dallanır, çatıçiz fonksiyonu içerisinde ise ikikenarçiz fonksiyonu çağrılmaktadır buradan da ikikenarç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ığı noktadan itibaren devam eder. Kalınan nokta ikikenarçiz çağrıldıktan sonraki nokta olan tabançiz fonksiyonun çağrılacağı satırdır. Bu ifadeyi gördükten sonra program işleyişi tabançiz fonksiyonuna dallanır. Bu fonksiyonun çalışması bittiğinde program işleyişi çağrılan noktaya geri döner. 39/69 40/69 Đşleyiş devam ettirilir ve çatıçiz fonksiyonu sona erer. Dönülmesi gereken nokta çatıçiz fonksiyonunun çağrıldığı ifadeden sonra gelen ifadedir. Burası main fonksiyonundaki gövdeçiz fonksiyonunun çağrıldığı satırdır. 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ı bittikten sonra program işleyişinin kendisini çağıran fonksiyonda kalınan noktadan devam etmesidir. 41/69 42/69 ENF-102 Jeoloji 2011 7

Fonksiyonların sağladığı en büyük avantajlardan biri de kodun gereksiz yere büyümesini engellemektir. Sıkça tekrarlanan işlemler için bir kere fonksiyon yazıldığında aynı kodlar tekrar yazılmaksızın istenildiği kadar çalıştırılabilirler. Aynı kod parçası gereksiz yere birden fazla yazılmamış olur. 43/69 44/69 Bir tane yerine beş tane ev çizmek gerekseydi, 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; 45/69 Fonksiyon tanımlamaları C programlama dilinde fonksiyon tanı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ğıran fonksiyonun üzerinde yazılmalıdır denebilir. Burada dikkat edilecek diğer bir nokta "bir fonksiyon içerisinde başka bir fonksiyon tanımlaması" yapılamayacağıdır. 46/69 Parametre Alıp Geriye Değer Döndürmeyen Fonksiyonlar Bu tür fonksiyonlar çağıran (caller) fonksiyondan bir ya da birden fazla parametre (argument) alır ve bunlar üzerinde çeşitli işlemler gerçekleştirirler. Burada çağıran fonksiyondan çağrılan fonksiyona doğru bilgi akışı söz konusudur. Gönderilen değer girdi parametresi (input argument) olarak değerlendirilir. Parametre Alıp Geriye Değer Döndürmeyen Fonksiyonlar Bu tür fonksiyonlar çağrılırken fonksiyona gönderilecek olan değerler ya da değerlen tutan değişkenler fonksiyon parantezinin içerisine yazılır. Bu değerleri karşılayan değişkenlerde fonksiyon tanımlama kısmında parantezler içerisinde belirtilir. Gönderilen değerler, karşılayan değişkenler içerisine kopyalanılırlar. 47/69 48/69 ENF-102 Jeoloji 2011 8

Parametre Alıp Geriye Değer Döndürmeyen Fonksiyonlar Değerler birebir olarak gönderilirler. Yani birinci sırada gönderilen değeri karşılayan değişken ilk sırada, ikinci gönderilen değişkeni karşılayan değişken ikinci sırada yazılmalıdır. Gönderilenler ile karşılayanların sayısı eşit olmalıdır. ÖRNEK : Kendisine gönderilen tamsayı değerin tek ya da çift olup olmadığını ekrana yazan fonksiyonu main () fonksiyonu ile beraber yazınız. Bu soruda anahtar kelimeler "kendisine gönderilen" kelimeleridir. Bunlar fonksiyonun parametre alacağını gösterir. Kaç adet parametre alacağı sorunun kendisinden çıkarılır. Burada parametre sayısı birdir. 49/69 50/69 Fonksiyona istenirse bir değişken istenirse de sabit bir değer gönderilebilir. Gönderilen değeri karşılayan fonksiyon tanımında parantezler içerisine yazılan sayi değişkenidir. 51/69 52/69 Program çalıştırıldığında çıktısı aşağıdaki gibi olur: Gönderilen değerler bu değişken içerisine kopyalanır, sayi değişkeninin içerisine önce klavyeden girilen i değişkeni içerisindeki değer gönderilir ve değişkenin içerisindeki değer sayi değişkeni içerisine kopyalanacaktır. Aynı şekilde gönderilen 5 değeri de ilk çağrılma bittikten sonra tekrar gönderilecektir. 53/69 54/69 ENF-102 Jeoloji 2011 9

Burada bilgi akışı şekildeki gibidir. Parametre Alıp Geriye Değer Döndüren Fonksiyonlar Bu tür fonksiyonlar çağıran (caller) fonksiyondan bir ya da birden fazla parametre (argument) alır ve bunlar üzerinde çeşitli işlemler gerçekleştirerek geriye bir değer döndürürler. Geriye değer döndürmek için kullanılan komut return komutudur. 55/69 56/69 Parametre Alıp Geriye Değer Döndüren Fonksiyonlar return [geridönüş değeri]; Genel kullanımda da görüldüğü gibi geri dönüş değeri isteğe bağlıdır, return komutu hem fonksiyonu sonlandırmak hem de geriye değer döndürmek amacı ile kullanılır. ÖRNEK: Kendisine gönderilen iki tamsayı değerin toplamını geri döndüren fonksiyonu örnek bir main fonksiyonu ile beraber yazınız. return komutu çalıştığı anda fonksiyon çalışması sonlanır. 57/69 58/69 Kod: Çıktı: 3 ve 5 sayıları topla fonksiyonuna gönderilir ve iki sayının toplamı sonuç değişkenine aktarılır. Sonuç değişkenin değeri de return komutu ile geri döndürülür. Bu fonksiyon aşağıdaki gibi de yazılabilir. 59/69 60/69 ENF-102 Jeoloji 2011 10

Parametre akış türleri Değerle çağır (call by value) Fonksiyonlara değerler gönderilirken iki adet yöntemle gönderilirler. Bu yöntemler şimdilik kısaca geçilecektir. Daha sonraki konularda kıyaslamalı olarak anlatılacaktır. 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. 61/69 62/69 Bağlantılı çağır (call by reference) Bu yöntemde değerlerin, kopyalandığı değişkenlerin değiştirilmesi orijinal değerleri etkiler. Fonksiyon prototipleri (Function Prototype) Bu bölüme kadar olan örnekler de fonksiyonlar, çağıran fonksiyonların üstünde olacak şekilde yazıldı. Çünkü derleyicinin, fonksiyon çağrılarında fonksiyonların geriye döndürecekleri değerlerin tiplerini çağrılma satırından önce bilmesi gerekir. 63/69 64/69 Fonksiyon prototipleri (Function Prototype) Fonksiyon prototipleri (Function Prototype) Derleme işlemi yukarıdan aşağı doğru yapıldığı için fonksiyonlar üste yazıldığında geri dönüş tipi önceden bilinir. Fakat fonksiyonlar, çağıran fonksiyonların altında da tanımlanabilir. 65/69 Programların yazımında önce main() fonksiyonunun yazılması ve daha sonra diğer fonksiyonların yazılması pratikte yazım kolaylıkları sağlar. Dolayısı ile fonksiyonu çağırmadan önce fonksiyonun aldığı parametreler ile geri dönüş değerini derleyiciye bildirmek amacı ile fonksiyon prototipleri kullanılır. 66/69 ENF-102 Jeoloji 2011 11

Fonksiyon prototipleri (Function Prototype) Fonksiyon prototiplerinde sadece fonksiyonun tipi, adı ve aldığı parametrelerin tipi yazılır. Parametre isimleri yazılmak zorunda değildir. Yazılırsa derleyici bu isimleri göz ardı eder. Đsim yazmak yalnızca okunabilirliği artırır. 67/69 68/69 Kaynakça: Programlamayı C ile öğreniyorum (2. Baskı), M. Yorulmaz, S. Yorulmaz, 2005, Ankara 69/69 ENF-102 Jeoloji 2011 12