800 likes | 1.35k Views
6. Fonksiyonlar. 6.1 Giriş 6.2 C++ da program bileşenleri 6.3 Math Kütüphane Fonksiyonları 6.4 Çok parametreli Fonksiyon tanımlamaları 6.5 Fonksiyon prototipleri ve Parametre Zorlaması 6.6 C++ Standar t Kütüphanesi Öncü Dosyaları 6.7 Çalışma : Rastgele Sayı Üretimi
E N D
6 • Fonksiyonlar
6.1Giriş • 6.2C++ da program bileşenleri • 6.3 Math Kütüphane Fonksiyonları • 6.4Çok parametreli Fonksiyon tanımlamaları • 6.5Fonksiyon prototipleri ve Parametre Zorlaması • 6.6 C++ Standart Kütüphanesi Öncü Dosyaları • 6.7Çalışma: Rastgele Sayı Üretimi • 6.8Çalışma: Şans oyunu ve enum ‘un tanıtılması • 6.9Hafıza Sınıfları • 6.10Kapsam Kuralları • 6.11Fonksiyon çağrım yığını ve Kayıtları aktif hale getirme. • 6.12Boş parametre listesine sahip fonksiyonlar
6.13Sıralı Fonksiyonlar • 6.14Referanslar ve Referans Parametreleri • 6.15Varsayılan Parametreler • 6.16Kapsam Ayrıştırma Operatörü • 6.17Yerine Geçmeli Fonksiyonlar • 6.18Fonksiyon Şablonları
6.1 Giriş • Böl-Parçala-Yönet (Divide/Conquer) Tekniği • Ufak ve basit parçaları(Örn: bileşenler) birleştirerek büyük programların oluşturulması. • Fonksiyonlar • Büyük programların tasarımını, yapım sürecini ve bakımını kolaylaştırır. • C++ Standart Kütüphanesi Math fonksiyonları
6.2 C++ ‘da program bileşenleri • C++ Standart Kütüphanesi • Aşağıda belirtilen sık kullanılan işlemleri gerçekleştirmek için kullanılan fonksiyonları içerir. • Matematiksel Hesaplamalar • String üzerinde yapılan işlemler • Karakter üzerinde yapılan işlemler • Giriş/Çıkış işlemleri • Hata Kontrol işlemleri • C++ programlama ortamının bir parçasıdır.
6.2 C++ ‘da program bileşenleri (devamı) • Fonksiyonlar • Diğer dillerde metod, ya da prosedür(yordam) olarak adlandırılırlar. • Programcıların programlarının yapacağı işi anlamlı parçalara bölerek modülerlik kazandırmalarını sağlar. • Fonksiyon gövdesindeki ifadeler sadece bir kere yazılırlar. • Programın çeşitli yerlerinde tekrar kullanılabilirler. • Diğer fonksiyonlardan saklıdır. • Gereksiz yere tekrarlanan koddan kurtarır. • Böl-Parçala-Yut yaklaşımı kullanılır. • Diğer programlarda tekrar kullanılabilirler. • Programcı ya da kullanıcı tarafından tanımlanabilirler.
6.2 C++ ‘da program bileşenleri (devamı) • Fonksiyon (Devam.) • Fonksiyonlar, fonksiyon çağrımlarıyla işletilirler. • Çağrılmış olan bir fonksiyon ya geriye bir sonuç değeri döndürür ya da sadece çağrılan yere geri döner. • Fonksiyon çağrımları hiyerarşik ilişkiler oluştururlar.
6.3 Math Kütüphane Fonksiyonu • Genel Fonksiyonlar • Herhangi bir sınıfa ait değildirler. • Öncü dosyalarda prototipleri tanımlanmıştır. • Öncü dosyayı ekleyen her programda kullanılabilirler. • Örnek: <cmath>öncü dosyasındaki sqrt fonksiyonu • sqrt( 900.0 ) • <cmath>kütüphanesindeki fonksiyonlar genel fonksiyonlardır.
6.4 Çok-parametreli fonksiyon tanımlaması • Birden fazla parametre • Fonksiyonlar görevlerini yerine getirebilmek için genellikle birden fazla bilgiye ihtiyaç duyar. • Fonksiyon prototipinde ve fonksiyonun ilk satırında virgülle ayrılmış bir liste şeklinde belirtilirler.
6.5 Fonksiyon prototipleri ve Parametre Zorlaması • Fonksiyon Prototipi • Fonksiyon tanımlaması olarak da adlandırılır • Derleyiciye şu bilgileri verir: • Fonksiyonun adı • Fonksiyonun döndürdüğü verinin tipi • Parametre bilgileri • Parametre sayısı • Parametrelerin tipleri • Parametrelerin sırası
6.5 Fonksiyon prototipleri ve Parametre Zorlaması(devamı) • Fonksiyon İmzası • Fonksiyon prototipinin fonksiyon adını ve parametre tiplerini içeren bir parçası. • Fonksiyonun geriye dönüş tipini belirtmez. • Aynı kapsama alanındaki fonksiyonlar farklı imzaya sahip olmalıdırlar. • Bir fonksiyonun kapsama alanı, programın fonksiyonun tanıtıldığı ve fonksiyona ulaşılabilen bölgesidir.
6.5 Fonksiyon prototipleri ve Parametre Zorlaması(devamı) • Parametre Zorlaması • Parametre olarak verilen değerlerin, parametre tipine uygun olmasına zorlanması. • Örneğin, parametre tipi double olan bir fonksiyonunun bir int (tamsayı) ile çağrılması • Buna rağmen , fonksiyon doğru çalışacaktır.
6.5 Fonksiyon prototipleri ve Parametre Zorlaması(devamı) • C++ Tip değiştirme kuralları • Tipler arası değişimin veri kaybına uğramadan nasıl yapılacağını gösterir. • İki veya daha çok veri tipine sahip değerler içeren ifadelere uygulanır. • Bu tip ifadelere karışık-tipli ifadeler de denir. • İfadedeki her değer, ifadenin içindeki “en-yüksek” tipe yükseltilir. • İfadedeki her değer için geçici bir değer oluşturulur ve kullanılır. • Orjinal değerler değişmeden kalırlar.
6.5 Fonksiyon prototipleri ve Parametre Zorlaması(devamı) • C++ Tip değiştirme kuralları (Devamı) • Tip değişimi , fonksiyona gönderilen değerin tipi ile fonksiyonun parametre tipi farklı olduğunda da oluşur. • Tip değişimi, gönderilen değer parametre değişkene direkt olarak atanıyormuş gibi olur. • Bir değeri daha küçük bir veri tipine çevirme. Örn : long int int • Büyük ihtimalle veri kaybına yada yanlış sonuçlara yol açacaktır. • Ancak açıkça belirtilerek yapılabilir. • Bir değeri daha küçük bir veri tipindeki değişkene atayarak. (Bazı derleyiciler bu durumda uyarı vereceklerdir.) yada • Cast (Dönüşüm) operatörü kullanılarak.
6.6 C++ Standart kütüphane öncü dosyaları • C++ Standart kütüphane öncü dosyaları • Herbiri Standart kütüphanenin bir bölümünü içerir. • İlgili fonksiyonların prototipleri. • Çeşitli sınıf tipleri ve fonksiyon tanımlamaları. • Bu fonksiyonlar tarafından kullanılan sabitler. • Derleyiciye, kütüphane ve kullanıcı-tanımlı bileşenler arasında arabirimi nasıl sağlayacağına dair “komut” verin. • .h dosya uzantısına sahip öncü dosyalar. • Eski tip öncü dosyalar. • C++ Standart Kütüphanesinin öncü dosyaları ile tarih oldular.
Fig. 6.7| C++ Standart Kütüphanesi Öncü Dosyaları. (1.Bölüm)
Fig. 6.7| C++ Standart Kütüphanesi Öncü Dosyaları. (2.Bölüm)
Fig. 6.7| C++ Standart Kütüphanesi Öncü Dosyaları. (3.Bölüm)
Fig. 6.7| C++ Standart Kütüphanesi Öncü Dosyaları. (4.Bölüm)
6.7 Çalışma: Rastgele Sayı Üretme • C++ StandartKütüphane Fonksiyonu :rand • Rastgele sayı üretmek için kullanılır. • Örn: • i = rand(); • 0 ile RAND_MAX arasında işaretsiz bir tamsayı üretir. (RAND MAX: <cstdlib>öncü dosyasında tanımlanmış olan sembolik sabittir.) • Rand fonksiyonunun prototipi <cstdlib>içerisindedir.
6.7 Çalışma: Rastgele Sayı Üretme(Devamı) • Belirli bir aralıkta tamsayı üretmek için rand ile birlikte mod (%) operatörünü kullanın. • Örnek • rand() % 6; • 0 ile 5 arasında sayı üretir.(5 Dahil) • Bu işlem ölçeklendirme olarak adlandırılır, burada ölçeklendirme birimi 6 dır. • +1 eklenirse sayı aralığı bir sağa kaydırılarak 1ile 6 arası haline getirilir. • 1 + rand() % 6;
Outline fig06_08.cpp (1 of 2) #includeveusing : rand fonksiyonunu kullanabilmek için rand fonksiyonunun çağrılması.
Outline fig06_08.cpp (2 of 2)
Outline fig06_09.cpp (1 of 3) Rand fonksiyonu tarafından üretilen sayının kaydırılması ve ölçeklendirilmesi.
Outline fig06_09.cpp (2 of 3)
Outline fig06_09.cpp (3 of 3) Her sayı yaklaşık olarak 1,000,000 kere gelir.
6.7 Çalışma: Rastgele Sayı Üretme(devamı) • rand Fonksiyonu • Pseudorandom (aslında rastgele olmayan)sayılar üretir. • Program her çalıştırıldığında üretilen sayılar aynı kalır. • Rastgeleleştirme (Randomizing ) • Programın her çalıştırıldığında farklı sayılar üretmesini sağlar. • C++ Standart Kütüphane Fonksiyonusrand • Parametre olarak bir işaretsiz tamsayı değeri alır. • Bu sayı rand fonksiyonuna farklı rastgele sayılar üretmesi için bir kaynak olarak verilir.
Outline fig06_10.cpp (1 of 2) srandfonksiyonu içinusingifadesi unsigned tipi unsigned int ‘in kısaltılmış halidir. Programın her seferinde farklı rastgele sayılar üretmesi için kaynak değeri srand fonksiyonuna verilir.
Outline fig06_10.cpp (2 of 2) Program çıktısı her farklı kaynak değeri için farklı rastgele sayılar üretildiğini gösteriyor.
6.7 Çalışma: Rastgele Sayı Üretme(devamı) • Her seferinde farklı kaynak değerini el ile girme zorunluğu olmadan farklı rastgele sayıların üretilmesi. • srand( time( 0 ) ); • Bu ifade bilgisayarın kendi saatini okuyarak elde ettiği sayının kaynak olarak verilmesini sağlar. • Time Fonksiyonu (0 argümanı ile) • Greenwich Mean Time(GMT) ‘a göre 1 Ocak 1970, saat 00:00 tarihinden o ana kadar geçen saniye sayısını döndürür. • time fonksiyonunun prototipi <ctime> öncü dosyası içerisindedir.
6.7 Çalışma: Rastgele Sayı Üretme(devamı) • Rastgele sayıların kaydırılması ve ölçeklendirilmesi. • İstenilen aralıkta bir rastgele sayı elde edebilmek için aşağıdaki yapıyı kullanın, sayı = kaydırmaDeğeri + rand() % ölçek; • kaydırmaDeğeri istenilen tamsayı aralığının başlangıç sayısıdır. • ölçekistenilen tamsayı aralığının büyüklüğüdür. • Ya da istenilen tamsayı aralığındaki sayıların adedidir.
6.8 Çalışma: Şans Oyunu ve enum ‘un tanıtılması • Numaralandırma(Enumeration) • Tanımlayıcılar tarafından temsil edilen bir dizi tamsayı sabitidir. • Numaralandırma sabitleri –aksi belirtilmemiş ise- 0 dan başlar ve 1’er artar. • Enum daki tanımlayıcıların eşşiz olması gerekir.Fakat farkli enumlardaki sabitler aynı tamsayı değerini alabilir. • Numaralandırmanın kullanımı • enumanahtar kelimesi • Bir tip adı • Küme parantezleri içerisinde virgüller ile ayrılmış tanımlayıcılar listesi. • Örnek • enum Aylar { OCAK, SUBAT, MART, NISAN };
Outline fig06_11.cpp (1 of 4) timefonksiyonu için#includeveusing Oyun durumunu izlemek için numaralandırma. Kullanıcı-tanımlı numaralandırma tipinde bir değişken tanımlama. Rastgele sayı üretecisine o anın kaynak olarak verilmesi.
Outline fig06_11.cpp (2 of 4) Bir numaralandırma sabitinin oyunDurumu ‘na atanması. Enum tipindeki bir değişkenin bir numaralandırma sabiti ile karşılaştırılması.
Outline fig06_11.cpp (3 of 4) Zar atma görevini yerine getiren fonksiyon.
Outline fig06_11.cpp (4 of 4)
6.9 Bellek sınıfları (Devam) • İki çeşit statik bellek tanımlayıcısı vardır • Dış tanımlayıcılar • Bütün global değişkenler ve fonksiyon adları gibi • Statik bellek sınıfı olarak tanımlanmış yerel değişkenler • Global değişkenler • Sınıf veya fonksiyon tanımlamalarının dışında tanımlanan değişkenler • Program çalıştığı sürece değerlerini korurlar. • Fonksiyon bildirimleri ve kaynak dosya tanımlamalarında referans olarak kullanılabilirler.
6.9 Bellek sınıfları (Devam) • Statik yerel değişkenler • Sadece tanımlandıkları fonksiyon içinde kullanılırlar. • Fonksiyonun çağırıldığı noktaya dönüldüğünde değerlerini korurlar • Fonksiyon tekrar çağırıldığında, statik yerel değişken fonksiyonun en son çağırıldığındaki aldığı değeri taşır. • Statik bellek sınıfına ait sayısal değişkenler programcı tarafından bir değer atanmadıysa • O değişkenlere sıfır değeri atanır.
6.10 Kapsam kuralları • Kapsam • Bir programın tanımlayıcı kısmı • Bir tanımlayıcı için dört kapsam vardır. • Fonksiyon kapsamı • Dosya kapsamı • Blok kapsamı • Fonksiyon-prototip kapsamı
6.10 Alan kuralları (Devam) • Dosya kapsamı • Fonksiyon ve sınıf dışındaki tanımlayıcılar için • Bildirildiği noktadan dosya sonuna kadar,bütün fonksiyonlarca kullanılan tanımlayıcılar gibi • Global değişkenler,fonksiyon tanımlamaları ve fonksiyon prototipleri ,dosya kapsamına sahip fonksiyonların dışında yer alırlar. • Fonksiyon kapsamı • Etiketler (Sonu iki nokta üst üste ile biten tanımlayıcılar.start: gibi) sadece fonksiyon kapsamını tanımlar. • Fonksiyonların herhangi bir yerinde kullanılabilirler • Fonksiyon bünyesinin dışından referans edilemezler. • Etiketler, fonksiyonların birbirinden sakladıkları yürütmekte oldukları detaylardır.
6.10 kapsam kuralları (Devam) • Blok kapsamı • Bir blok kapsamına sahip blok içerisinde bildirilen tanımlayıcılar • Blok kapsamı tanımlayıcı bildirimiyle başlar. • Tanımlayıcının bildirildiği blokkapsamı (}) işareti ile sona erer. • Yerel değişkenler ve fonksiyon parametreleri blok kapsamına sahiptirler. • Fonksiyon bünyesi onların kütüğüdür. • Her blok değişken parametreleri içerebilir. • blok kapsamı dışındaki tanımlayıcılar,blok kapsamı içerisindeki tanımlayıcılarla aynı isme sahip olduklarında gizlenebilirler. • Programın çalışmaya başlamasından beri var olsalar bile yerel değişkenler blok kapsamına sahip statik olarak tanımlanırlar. • Bellek süresi tanımlayıcı kapsamını etkilemez
6.10 kapsam kuralları (Devam) • Fonksiyon-prototip kapsamı • Fonksiyon-prototip parametre listesinde sadece tanımlayıcılar kullanılır • Fonksiyon-prototipinde yer kapsam parametre isimleri derleyici tarafından dikkate alınmazlar. • Fonksiyon-prototip’de kullanılan tanımlayıcılar programın herhangi bir yerinde tekrardan kullanılabilir. • Bununla beraber, tek bir prototipte, özel bir tanımlayıcı yalnız bir kez kullanılır.
Outline fig06_12.cpp (1 of 4) Tüm sınıf ve fonksiyonların dışında genel değişken tanımlanması genel değişken x ‘i gizleyen yerel x degiskeni Blok icindeki x yerel degiskeni, kendisinden daha dis kapsamdaki x’in etkisini yok eder.
Outline fig06_12.cpp (2 of 4) yerelKullan fonksiyonu her cagrildiginda tekrar olusturulup ilk degeri verilen yerel degisken.