Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

C PROGRAMLAMA FONKSİYONLAR Adres ile Fonksiyon Çağırma Pointer (İşaretçiler) ile Fonksiyon Çağırma Rekürsif Fonksiyonlar.

Benzer bir sunumlar


... konulu sunumlar: "C PROGRAMLAMA FONKSİYONLAR Adres ile Fonksiyon Çağırma Pointer (İşaretçiler) ile Fonksiyon Çağırma Rekürsif Fonksiyonlar."— Sunum transkripti:

1 C PROGRAMLAMA FONKSİYONLAR Adres ile Fonksiyon Çağırma Pointer (İşaretçiler) ile Fonksiyon Çağırma Rekürsif Fonksiyonlar

2 Adres (referans) ile fonksiyon çağırma Bu çağırmada gönderilecek olan verilerin değerleri değil, değerlerin bulunduğu bellek gözünün adresi gönderilir. Bu şekilde kullanımda, fonksiyon kendisine gelen gerçek değeri alıp kullanır ve istenirse sonucu doğrudan o adrese yazabilir.

3 void fonksiyon_ismi (int *t) Fonksiyon ismi tanımlama aynıdır Parametre kısmı ise farklı tanımlanır Fonksiyon Tanımlama:  Referans ile fonksiyon çağrılacağı zaman tanımlanan fonksiyonda fonksiyonun ismi normal fonksiyon ismi tanımlama ile aynı şekilde gerçekleştirilir. Burada farklı olarak fonksiyonun argümanları tanımlanırken değişken isminden önce işaretçi kullanılmasıdır. int *t ifadesinin anlamı adresi “t” olan değişken demektir. Adres (referans) ile fonksiyon çağırma

4 Fonksiyon Çağırma:  Fonksiyon_ismi() fonksiyonundaki argümanlarda int *t tanımlaması kullanılmaktadır. Bu t değişkeninin int tipli bir değişkenin adresini tuttuğunu göstermektedir. Parametrelerin gönderilmesinde ise x’in adresi fonksiyona fonksiyon_ismi(&x ) ifadesi ile gönderilmiştir.  &x ifadesi x değişkeninin bellek adresini verir x y 00F3 00F500F5 x = 10 &x = 00F3 Adres (referans) ile fonksiyon çağırma

5 Örnek: Bu örnekte adres ile çağrılan yerdegis() fonksiyonu içerisinde iki ayrı adres alanı a ve b argümanları tarafından tutulmuştur. Bu adreslerde tutulan değerler yeni bir t değişkeni yardımı ile yer değiştirmişlerdir. Fonksiyon adres ile çağrılırken değerlerin kendileri değil, bu değerleri tutan bellek adresleri yerdegis(&x, &y) ifadesi ile gönderilmiştir.

6 Adres (referans) ile fonksiyon çağırma Örnek: Bu örnekte adres ile çağrılan degerArttir() fonksiyonunun return ifadesi ile bir değer döndürmediğine dikkat ediniz. İşlemler bellek üzerinde gerçekleştirildiğinden değer değişimi tüm programa yansımaktadır.

7 fonksiyon çağırmada iki yaklaşım birden Örnek: Bu örnekte hesapla() fonksiyonu içerisinde argüman olarak hem değişkenler hem de bellek adresleri tanımlanmıştır.

8 Fonksiyonların İşaretçiler ile Çağrılması 8  Tanımlanmış bir fonksiyon genellikle adıyla çağrılır. Önceki örneklerde üç sayının ortalamasını alan fonksiyonu “ortalama” ismi ile tanımlanmış ve kullanılırken bu isimle kullanmıştık. k = ortalama(20,10,5);  Fonksiyonlarda diğer değişkenler gibi belleğe yüklenirler. Fonksiyonlarında bir başlangıç adresleri vardır ve bu adresin başlangıcı fonksiyonun adı tarafından turulur. Eğer bir fonksiyonun bellekteki başlangıç adresi bir değişkene aktarılırsa, bu değişkeni kullanılarak da bu fonksiyon çağrısı yapılabilir.  Fonksiyonu gösterecek olan pointer değişkenin tanımı şu şekilde yapılır ; tip (*degiskenadi)(argumantipleri)

9 Örnek olarak; int topla(int, int) fonksiyonu pointer olarak tanımlanırsa; int (*islem)(int, int) ifadesi ile yazılır.  Bu gösterici sadece yukarıdaki şekilde tanımlanan fonksiyonları gösterebilir. Yani, iki adet int tipli parametre alan ve geriye int tipli bir değişken döndüren fonksiyonları gösterebilir. Fonksiyonların İşaretçiler ile Çağrılması

10 Örnek: Bu örnekte topla() ve carp() adında iki farklı fonksiyon tanımlanmıştır. Ayrıca bu fonksiyon yapısına uygun olan bir pointer main ana fonksiyonunun altında gerçekleştirilmiştir. islem pointer’ı int tipinde iki ayrı integer argüman alabilecek tüm fonksiyonları göstermek için kullanılabilir. islem pointer’ının hangi fonksiyonu göstereceği ya da bir başka değişle hangi fonksiyonun işlevini yerine getireceği işlem’e tanımlı fonksiyonlardan birisinin ismi atanarak değiştirilir.

11 Fonksiyonların İşaretçiler ile Çağrılması 11 f argümanı olarak int alan ve geriye değer döndürmeyen fonksiyonları gösteren 3 göstericinin dizisidir.

12 fonksiyonların başka fonksiyonlara parametre olarak gönderilmesi  Fonksiyonlar, göstericiler ile temsil edilebildiğinden ve göstericilerde birer değişken olduğundan başka fonksiyonlara parametre olarak gönderilebilirler.  Gönderilecek olan fonksiyonda argümanlar fonksiyon işaretçisi şeklinde tanımlanmalıdır.

13 fonksiyonların başka fonksiyonlara parametre olarak gönderilmesi Örnek: Dizi elemanlarını seçime bağlı olarak artan ya da azalan sıralama yapan program

14 Özyineleme (Recursion) Bir fonksiyonun kendisini çağırarak çözüme gitmesine özyineleme (recursion), böyle çalışan fonksiyonlara da özyinelemeli (recursive) fonksiyonlar denilir. Özyineleme, iterasyon (döngüler, tekrar) yerine geçebilecek çok güçlü bir programlama tekniğidir. Özyinelemeli algoritmalarda, tekrarlar fonksiyonun kendi kendisini kopyalayarak çağırması ile elde edilir. Bu kopyalar işlerini bitirdikçe kaybolur. Bir problemi özyineleme ile çözmek için problem iki ana parçaya ayrılır.  1 – cevabı kesin olarak bildiğimiz kesin durum (base case)  2 – cevabı bilinmeyen ancak cevabı yine problemin kendisi kullanılarak bulunabilecek durum.

15 Recursive fonksiyon - Faktöriyel hesabı  Bu yönteme en uygun örnek faktöriyel problemidir.  Faktöriyelin tanımı şöyle yapılır; sıfır dışındaki herhangi bir doğal sayının faktöriyeli 1 den başlayarak, o sayıya kadarki tüm doğal sayıların çarpımını almak yolu ile elde edilir. 0 sayısının faktöriyeli 1 olarak tanımlanır. Matematiksel gösterimi ise:  Çarpım dizisindeki sonuncu terim olan N’i ayırdığınızda diğer sayıların çarpımı (N- 1)! olmaktadır.  Yukarıdaki tanım ile son yapılan tanım arasındaki fark, açıklanan problemin tanımında yine problemin kendisinin olmasıdır.  Burada cevabı kesin olarak bilinen 0! durumu temel durum olacaktır. Diğer durumlar ise cevabı bilinmeyen ancak problemin kendisi kullanılarak bulunabilecek durumlardır.

16 Recursive fonksiyon - Faktöriyel hesabı Faktöriyel hesabı özyinelemeli fonksiyon ile aşağıdaki mantıkla çalışır. Bu durumda faktöriyel hesabı yapan fonksiyonu recursive (özyinelemeli) olarak tekrar düşündüğümüzde aşağıdaki gibi olacaktır.

17 Recursive fonksiyon - Faktöriyel hesabı

18 Recursive fonksiyon - Fibonacci Serisi Fibonacci serileri yinelemeli olarak aşağıdaki biçimde tanımlanabilir: fibonacci(0)=0 fibonacci(1)=1 fibonacci(n)=fibonacci(n-1)+fibonacci(n-2)

19 Ödev 1. 1 ile kullanıcı tarafından girilen N arasındaki asal sayıların toplamını hesaplayan fonksiyonu recursive olarak yazınız. 2. mesafe () isminde, girilen iki ayrı noktanın, (x1, y1) ve (x2, y2), arasındaki mesafeyi bulan bir fonksiyon yazınız. Bu fonksiyon referans yoluyla çağrılacaktır. Programda kullanacak bütün sayılar ve fonksiyonun döndüreceği değer float türündedir.


"C PROGRAMLAMA FONKSİYONLAR Adres ile Fonksiyon Çağırma Pointer (İşaretçiler) ile Fonksiyon Çağırma Rekürsif Fonksiyonlar." indir ppt

Benzer bir sunumlar


Google Reklamları