560 likes | 933 Views
Bölüm 5 - F onksiyonlar. index 5.1 Giriş 5.2 C de Program Modülleri 5.3 Math Kütüphanesindeki F onksiyonlar 5.4 Fonksiyonlar 5.5 Fonksiyon Tanımlamaları 5.6 Fonksiyon Prototipleri 5.7 Öncü (Header) Dosyalar 5.8 Fonksiyonları Çağırma : Değere Göre ve R efer ansa Göre çağırmak
E N D
Bölüm 5 - Fonksiyonlar index 5.1 Giriş 5.2 C de Program Modülleri 5.3 Math Kütüphanesindeki Fonksiyonlar 5.4 Fonksiyonlar 5.5 Fonksiyon Tanımlamaları 5.6 Fonksiyon Prototipleri 5.7 Öncü (Header) Dosyalar 5.8 Fonksiyonları Çağırma: Değere GöreveReferansa Göre çağırmak 5.9 Rastgele Sayılar Üretme 5.10 Örnek: Şans Oyunu 5.11 Depolama Sınıfları 5.12 Faaliyet Alanı Kuralları 5.13 Yineleme 5.14 Yineleme kullanımına örnek: Fibonacci Serisi 5.15 Yineleme vs. Tekrar
Amaçlar • Bu bölümde öğreneceklerimiz: • Fonksiyon adı verilen, küçük parçalarla modüler programların nasıl oluştuğunu anlamak.. • C standart kütüphanesinde yaygın olarak kullanılan matematik fonksiyonlarını tanıma • Yeni Fonksiyonlar oluşturabilme. • Fonksiyonlar arası bilgi geçişi için kullanılan mekanizmaları(yöntemleri) anlama. • Rastgele sayı üreterek similasyon tekniklerini tanıma • Kemdi kendini çağıran fonksiyonları yazmak ve nasıl kullanılacaklarını anlamak.
5.1 Giriş • Böl ve Zaptet (Parçalara ayırma (bölme)ve Bütün elde etme) • Çok küçük parçalardan veya bileşenlerden bir program oluşturma • Bu çok küçük parçalar modüller olarak adlandırılır • Her bir parça orjinal programa göre daha kolay yönetilebilir (programın bütününe göre)
5.2 C de Program Modülleri • Fonksiyonlar • C de modüller • Programlar kullanıcı tarafından tanımlanmış fonksiyonlar ile kütüphanedeki fonksiyonları birleştirir • C’nin standart kütüphanesi fonksiyonların geniş türlerine sahiptir • Fonksiyon çağrıları • Fonksiyon çağrıları • Fonksiyon adı ve arguments (Veri) tedarik eder • Fonksiyon operasyonları veya işlemleri gerçekleştirir • Fonksiyon sonucu döndürür. • Function call analogy:????? • Patron işçiye görevini tamamlamasını söyler (bitip bitmediğini sorar) • İşçi bilgileri alır, görevini yapar ve sonucu patrona döndürür • Bilgi gizlidir: Patron bilginin detaylarını bilmez (yapılan işin)
5.2 C de Program Modülleri Fig. 5.1 Patron/İşçi arasındaki hiyerarşin ilişki
5.3 Matematik Kütüphanesindeki Fonksiyonlar • Math kütüphanesindeki fonksiyonlar • Yaygın olarak kullanılan matematiksel hesaplamalar • #include <math.h> • Çağrılan Fonksiyonları biçimlendirme • FonksiyonAdı( argüman ); • Eğer çoklu argüman varsa listeleri virgül kullanarak ayır • printf( "%.2f", sqrt( 900.0 ) ); • Sqrt fonksiyonunu çağırır,girilen değerin karekök’ünü geriye döndürür • Bütün Matematik fonk.verileri“double”olarak geri döndürür. • Argümanlar sabit, değişken veya ifade olabilir
5.4 Fonksiyonlar • Foksiyonlar • Programı modüler hale getirir • Yerel değişkenler, fonksiyonların içerisinde tanımlanır. • Sadece tanımlandığı fonksiyon tarafından bilinir • Parametreler • Fonksiyonlar arasındaki bilgi alışverişi • Yerel değişkenler • Fonksiyonların yararları • Bölmeve Zaptetme • Yönetilebilir program geliştirme • Yazılımı yeniden kullanabilme • Varolan fonksiyonları yeni programlar için blok olarak inşa etme • Soyutlama – içsel detayları gizleme (kütüphane fonksiyonları) • Kodları tekrar yazmayı engelleme
5.5 Fonksiyon Tanımları • Fonksiyon Tanımlamabiçimleri return-değer-tipi function-name( parametere-listesi ){bildirimlerve ifadeler} • Fonksiyon adı: herhangi geçerli tanımlayıcı • Veri tipi döndürme: sonucun veri tipi (varsayılanint) • void–fonksiyonlar geriye değer döndürmez • Parametre-listesi: parametreleri belirtilmiş, virgülle ayrılmış listedir • A type must be listed explicitly for each parameter unless, the parameter is of type int • Her parametre için parametre tipleri ayrı ayrı belirtilmelidir (eğer tipleri int değilse)
5.5 Fonksiyon Tanımlama • Fonksiyon Tanımlamabiçimleri (devam) return-değer-tipi function-name( parametere-listesi ){bildirimlerve ifadeler} • Bildirimlerve ifadeler: fonksiyonun gövdesi • Değişkenler blokların içinde tanımlanabilir (kısıtlanabilir) • Fonksiyonlar diğer fonksiyonların içinde tanımlanamaz. • Geri dönüş kontrolu • Eğer boş değer geri dönüyorsa (hiç bir değer dönmüyorsa) • return; • veya, sağ paranteze ulaşıncaya kadar • Eğer bir değer geri dönüyorsa • returnifade(geri dönecek değer);
fig05_03.c (Part 2 of 2)Program çıktısı 1 4 9 16 25 36 49 64 81 100
fig05_04.c (Part 2 of 2)Program çıktısı Enter three integers: 22 85 17 Maximum is: 85 Enter three integers: 85 22 17 Maximum is: 85 Enter three integers: 22 17 85 Maximum is: 85
5.6 Fonksiyon Prototipleri • Fonksiyon prototipi • Fonksiyon adı • Parametreler–fonksiyonun içinde tuttuğu şeyler • Return type –fonksiyonun veri dönüşü tipi (varsayılanint) • Fonksiyonları onaylamakta kullanılır • Eğer fonksiyon prototipi programın içerisinde yer almazsa, prototipe ihtiyaç duyulur • Prototip ile fonksiyonlar int maksimum( int x, int y, int z ); • 3 ints içerir • int değeri döndürür • Geçişkuralları ve dönüşümler • Kendinden küçük tiplere dönüşümler hata oluşturabilir
5.7 Öncü (Header) Dosyalar • Öncü Dosyalar • Kütüphane fonksiyonları için fonksiyon prototipleri içerir • <stdlib.h> , <math.h> , vs... • Yükleme...#include <filename> #include <math.h> • Öncü dosya düzenleme • Fonksiyonlarla dosya oluşturma • filename.h olarak kayıt etme. • #include "filename.h“ile başka dosyalara yükleme • Fonksiyonları tekrar kullanma.
5.8 Fonksiyon çağırma: Değere GöreveReferansa Göre • Değere göre • Argümanın kopyası fonksiyona gönderir. • Kopyayı değiştirmek, orijinal değişkenin değerini etkilemez • Fonksiyonun argüman’ı değiştirmeye ihtiyaç duymadığı zaman kullanılmalıdır. • Önemli sorunların oluşmasını engeller • Referansa göre • Orijinal argümanı gönderir. • Argümanı değiştirmek, orijinal değişkenin değerini etkiler • Sadece güvenilir fonksiyonlar ile kullanılmalı • Şimdi, değere göre çağırmaya bakalım
5.9 Rasgele Sayılar Üretme • rand fonksiyonu • yükle<stdlib.h> • 0veRAND_MAX (en az32767) arasında sayı “random” geri döndürme. i = rand(); • Pseudorandom • “random” sayıların önceden ayarlanmış dizisi • Her fonksiyon çağrılmasında aynı dizi tekrar eder. • Derecelendirme (Scaling) • 1 ile n arasında random sayı alma 1 + ( rand() % n ) • rand() % n0ilen–1 arasında bir sayı döndürür • 1ilenarasında random sayıya 1 ekleme yapar. 1 + ( rand() % 6) • 1 and 6arasında sayı
5.9 Rasgele Sayılar Üretme • srand fonksiyonu (rassallaştırma) • <stdlib.h> • Farklı bir dizide rasgele sayılar oluşturulmasını sağlar • Unsigned(işaretsiz) tipte bir tamsayıyı argüman olarak kullanır srand( seed ); • srand( time( NULL ) );/*yükle <time.h> */ • time( NULL ) • Program çalıştırıldığı esnadaki saniye cinsinde oluşturur • “(Randomizes) rasgele seçmeler" çekirdek
6 6 5 5 6 5 1 1 5 3 6 6 2 4 2 6 2 3 4 1 Program çıktısı
fig05_08.c (Part 3 of 3)Program Çıktısı Face Frequency 1 1003 2 1017 3 983 4 994 5 1004 6 999
fig05_09.c (Part 2 of 2)Program Çıktısı Enter seed: 67 6 1 4 6 2 1 6 1 6 4 Enter seed: 867 2 4 6 1 6 1 1 3 6 2 Enter seed: 67 6 1 4 6 2 1 6 1 6 4
5.10 Örnek: Şans Oyunu • Barbut(craps) similasyonu • Kurallar • İki zar atılır • İlk atışta 7 veya 11 (top.), oyuncu kazanır. • İlk atışta 2, 3, veya 12 (top.), oyuncu kaybeder. • İlk atışta 4, 5, 6, 8, 9, 10 – oyuncunun puanı • Kazanmak için kendi puanını 7 gelmeden önce tekrar atması gerekir.
Player rolled 5 + 6 = 11 Player wins Player rolled 4 + 1 = 5 Point is 5 Player rolled 6 + 2 = 8 Player rolled 2 + 1 = 3 Player rolled 3 + 2 = 5 Player wins Player rolled 1 + 1 = 2 Player loses Player rolled 1 + 4 = 5 Point is 5 Player rolled 3 + 4 = 7 Player loses Program Çıktısı
5.11 Depolama Sınıfları • Depolama sınıfı belirteçleri • Depolama süresi–objenin hafızada kalma süresi • Faaliyet alanı–objenin programda referans edildiği yer • Bağlama –objenin hangi kaynak dosyada geçerli olacağını belirler (dahası bölüm 14’de) • Otomatik depolama • Objeler bildirildikleri bloklar içerisinde oluşturulur ve yok edilir • auto:yerel değişkenler için varsayılan auto double x, y; • register:yerel deişkenleri yüksek hızdaki register’lara koymaya çalışır. • Otomatik değişkenler için kullanılabilir register int counter = 1;
5.11 Depolama Sınıfları • Statik Depolama • Bütün programın işlenmesi esnasında varolan değişkenler • Varsayılan değeri sıfırdır • static:fonksiyonun içinde tanımlanan yerel değişkenler • Fonksiyondaki işlem bittikten sonra değerini saklar • Sadece ait olduğu fonksiyon tarafından bilinir • extern:global değişkenler ve fonksiyonlar için varsayılan • Herhangi bir fonksiyon tarafından bilinir
5.12 Faaliyet Alanı Kuralları • Dosya faaliyet alanı • Fonksiyonun dışında tanımlanmış tanıtıcı tüm fonksiyonlar tarafında bilinir • Global değişkenler, fonksiyon tanımları ve fonksiyon prototipleri için kullanılır • Fonksiyon faaliyet alanı • Fonksiyonun gövdesi içerisin referans edilebilir • Sadece etiketler için kullanılabilir (start:, case: , etc.)
5.12 Scope Rules • Blok faaliyet alanı • Tanıtıcı bloğun içerisinde tanımlanır • Blok faaliyet alanı tanımlamada başlar, küme parantezine(}) ulaşıldığında sona erer. • Değişkenler(fonksiyon parametreleri, yani fonksiyonların yerel değişkenleri) için kullanılır • Dıştaki bloktaki tanıtıcı içteki bloktaki tanıtıcıyla aynı isme sahip ise dış bloktaki tanıtıcı iç blok sona erene kadar saklanır • Fonksiyon prototipi faaliyet alanı • Parametre listesinde tanıtıcılar için kullanılır
local x in outer scope of main is 5 local x in inner scope of main is 7 local x in outer scope of main is 5 local x in a is 25 after entering a local x in a is 26 before exiting a local static x is 50 on entering b local static x is 51 on exiting b global x is 1 on entering c global x is 10 on exiting c local x in a is 25 after entering a local x in a is 26 before exiting a local static x is 51 on entering b local static x is 52 on exiting b global x is 10 on entering c global x is 100 on exiting c local x in main is 5 Program Output
5.13 Yineleme • Yineleme Fonksiyonları • Kendi kendini çağıran fonksiyonlar • Temel durumda çözülebilir • Bir problemi parçalara ayırır • Ne yapacağını bildiği parça • Ne yapacağını bilmediği parça • What it cannot do resembles original problem • Ne yapacağını bilmediği parça orijinal probleme benzer • Fonksiyon ne yapacağını bilmediği parçayı çözmek için kendisinin bir kopyasını başlatır. • En sonundatemel durum çözülür • Tıkalı yerleri yakalar, yukarı doğru çalışır ve bütün problemi çözer
5.13 Yineleme • Örnek: faktoriyel • 5! = 5 * 4 * 3 * 2 * 1 • Dikkat!!! • 5! = 5 * 4! • 4! = 4 * 3! ... • Faktoriyel yineleme ile de cözülebilir • Temel durumu çöz (1! = 0! = 1) sonra yerine koy • 2! = 2 * 1! = 2 * 1 = 2; • 3! = 3 * 2! = 3 * 2 = 6;
fig05_14.c (Part 2 of 2) 1! = 1 2! = 2 3! = 6 4! = 24 5! = 120 6! = 720 7! = 5040 8! = 40320 9! = 362880 10! = 3628800
5.14 Yineleme kullanımına örnek: Fibonacci Serisi • Fibonacci serisi: 0, 1, 1, 2, 3, 5, 8... • Her sayı kendinden önceki iki sayının toplamıdır • Yinelemeyle çözülebilir: • fib( n ) = fib( n - 1 ) + fib( n – 2 ) • fibonacci fonksiyonu için kod long fibonacci( long n ) { if (n == 0 || n == 1) // base case return n; else return fibonacci( n - 1) + fibonacci( n – 2 ); }
f( 3 ) return f( 2 ) + f( 1 ) return f( 1 ) f( 0 ) return 1 + return 1 return 0 5.14 Yineleme kullanımına örnek: Fibonacci Serisi • Yineleme Setinin Fibonaccifonksiyonunu çağırması