|
Bölüm 5 Fonksiyonlar Amaçlar
|
tarix | 25.01.2018 | ölçüsü | 765 b. | | #40655 |
|
Amaçlar
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
5.3 Matematik Kütüphanesindeki Fonksiyonlar Math kütüphanesindeki fonksiyonlar Ç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.3 Math. Kütüphanesinin Fonksiyonları
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ölme ve 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ımlama biçimleri - return-değer-tipi function-name( parametere-listesi ) { bildirimler ve ifadeler }
- Fonksiyon adı: herhangi geçerli tanımlayıcı
- Veri tipi döndürme: sonucun veri tipi (varsayılan int)
- 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ımlama biçimleri (devam) - return-değer-tipi function-name( parametere-listesi ) { bildirimler ve ifadeler }
- Bildirimler ve 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
- return ifade(geri dönecek değer);
fig05_03.c (Part 1 of 2)
fig05_03.c (Part 2 of 2) Program çıktısı
fig05_04.c (Part 1 of 2)
fig05_04.c (Part 2 of 2) Program çıktısı
5.6 Fonksiyon Prototipleri - Fonksiyon adı
- Parametreler – fonksiyonun içinde tuttuğu şeyler
- Return type – fonksiyonun veri dönüşü tipi (varsayılan int)
- 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.6 Fonksiyon Prototipleri
5.7 Öncü (Header) Dosyalar Öncü Dosyalar Ö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.7 Öncü Dosyalar
5.8 Fonksiyon çağırma: Değere Göre ve Referansa 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
- 0 ve RAND_MAX (en az 32767) arasında sayı “random” geri döndürme.
- 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
- rand() % n 0 ile n–1 arasında bir sayı döndürür
- 1 ile n arasında random sayıya 1 ekleme yapar.
- 1 + ( rand() % 6)
- 1 and 6 arasında sayı
5.9 Rasgele Sayılar Üretme srand fonksiyonu (rassallaştırma) - Farklı bir dizide rasgele sayılar oluşturulmasını sağlar
- Unsigned(işaretsiz) tipte bir tamsayıyı argüman olarak kullanır
- srand( time( NULL ) );/*yükle */
- time( NULL )
- Program çalıştırıldığı esnadaki saniye cinsinde oluşturur
- “(Randomizes) rasgele seçmeler" çekirdek
fig05_07.c
Program çıktısı 6 6 5 5 6 5 1 1 5 3 6 6 2 4 2 6 2 3 4 1
fig05_08.c (Part 1 of 3)
fig05_08.c (Part 2 of 3)
fig05_08.c (Part 3 of 3) Program Çıktısı
fig05_09.c (Part 1 of 2)
fig05_09.c (Part 2 of 2) Program Çıktısı
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.
fig05_10.c (Part 1 of 4)
fig05_10.c (Part 2 of 4)
fig05_10.c (Part 3 of 4)
fig05_10.c (Part 4 of 4)
Program Çıktısı 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
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
- 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
fig05_12.c (Part 1 of 3)
fig05_12.c (Part 2 of 3)
fig05_12.c (Part 3 of 3)
Program Output 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 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
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 sonunda temel 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;
5.13 Yineleme
fig05_14.c (Part 1 of 2)
fig05_14.c (Part 2 of 2)
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 );
- }
5.14 Yineleme kullanımına örnek: Fibonacci Serisi Yineleme Setinin Fibonacci fonksiyonunu çağırması
fig05_15.c (Part 1 of 2)
fig05_15.c (Part 2 of 2) Program Output
Program Output (continued) Enter an integer: 5 Fibonacci( 5 ) = 5 Enter an integer: 6 Fibonacci( 6 ) = 8 Enter an integer: 10 Fibonacci( 10 ) = 55 Enter an integer: 20 Fibonacci( 20 ) = 6765 Enter an integer: 30 Fibonacci( 30 ) = 832040 Enter an integer: 35 Fibonacci( 35 ) = 9227465
5.14 Yineleme kullanımına örnek: Fibonacci Serisi
5.15 Yineleme vs. Tekrar Tekrarlama - Tekrar : döngü yapısı
- Yineleme: tekrarlı fonksiyon çağırır
Sınır - Tekrar: döngü koşul şartı yanlış oluncaya..
- Yineleme: temel durum gerektirir
Her ikisi de sonsuz döngüye sahip olabilir Denge - İyi yazılım mühendisliği(yineleme) ve performans(tekrar) arasında seçim yapmak…
5.15 Yineleme vs. Tekrar
Dostları ilə paylaş: |
|
|