1 / 55

Bölüm 5 - F onksiyonlar

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

yepa
Download Presentation

Bölüm 5 - F onksiyonlar

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

  3. 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)

  4. 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. 5.2 C de Program Modülleri Fig. 5.1 Patron/İşçi arasındaki hiyerarşin ilişki

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

  7. 5.3 Math. Kütüphanesinin Fonksiyonları

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

  9. 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)

  10. 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);

  11. fig05_03.c (Part 1 of 2)

  12. fig05_03.c (Part 2 of 2)Program çıktısı 1 4 9 16 25 36 49 64 81 100

  13. fig05_04.c (Part 1 of 2)

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

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

  16. 5.6 Fonksiyon Prototipleri

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

  18. 5.7 Öncü Dosyalar

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

  20. 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ı

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

  22. fig05_07.c

  23. 6 6 5 5 6 5 1 1 5 3 6 6 2 4 2 6 2 3 4 1 Program çıktısı

  24. fig05_08.c (Part 1 of 3)

  25. fig05_08.c (Part 2 of 3)

  26. fig05_08.c (Part 3 of 3)Program Çıktısı Face Frequency 1 1003 2 1017 3 983 4 994 5 1004 6 999

  27. fig05_09.c (Part 1 of 2)

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

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

  30. fig05_10.c (Part 1 of 4)

  31. fig05_10.c (Part 2 of 4)

  32. fig05_10.c (Part 3 of 4)

  33. fig05_10.c (Part 4 of 4)

  34. 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ı

  35. 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;

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

  37. 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.)

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

  39. fig05_12.c (Part 1 of 3)

  40. fig05_12.c (Part 2 of 3)

  41. fig05_12.c (Part 3 of 3)

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

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

  44. 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;

  45. 5.13 Yineleme

  46. fig05_14.c (Part 1 of 2)

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

  48. 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 ); }

  49. 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ı

  50. fig05_15.c (Part 1 of 2)

More Related