Bölüm 5 Fonksiyonlar Amaçlar



Yüklə 765 b.
tarix25.01.2018
ölçüsü765 b.


Bölüm 5 - Fonksiyonlar


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 prototipi

    • 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
  • 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.
        • 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() % 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( seed );
    • srand( time( NULL ) );/*yükle */


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
        • 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


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 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



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ş:


Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2017
rəhbərliyinə müraciət

    Ana səhifə