BİLİŞİM - BİLGİSAYAR - EĞİTİM
  Fonksiyonlarda Değer Döndürme
 

Fonksiyonlarda Geri Değer Döndürülmesi

   Genelde foksiyonlar yaptıkları işin sonucu hakkında bir değer döndürürler. Fonksiyon tanımlamasında aksi belirtilmediği sürece fonksiyonların int tipinde değer döndürdükleri kabul edilir. Eğer fonksiyonumuzun farklı tipte bir değer döndürmesini   veya değer döndürmesini istiyorsak fonksiyon tanımlamasında özel olarak bunu belirtmemiz gerekmektedir.

Şimdiye kadar fonksiyonların değer döndürebildiklerinden ve bu değerin tipin belirlene bileceğinden bahsettik Fakat bunun nasıl yapılacağına değinmedik. Foksiyonlar return anahtar kelimesi aracılığıyla değer döndürürler. Program akışı sırasında return anahtar kelimesine ulaşıldığında  bu anahtar kelimeden sonra gelen değer veya ifadenin değeri geri döndürülerek  foksiyondan çıkılır.

Örneğin bir sayının karesini alan bir fonksiyon yazalım

KaresiniAl(int sayi)

{

  return (sayi *sayi);

}

   Fonksiyon parametre olarak   int tipinde bir değer alır. Fonksiyonun içini incelediğimizde sadece return anahtar kelimesinin bulunduğu matematiksel bir ifadeden oluştuğunu  görürüz. Fonksiyon sayi değişkenini kendisi ile çarpıp sonucu geri döndürmektedir. Bu fonsiyonu programızda 

int karesi = KaresiniAl(5);

şeklinde kullanacağız.

Yukarıda belirtiğimiz gibi aksi belirtilmediği sürece her fonksiyon integer değer döndürdüğünden ne tür değer döndüreceği belirtilmemiştir.

 

 

#include <stdio.h>

 

#include <iostream.h>

 

 

 

main()

 

{

 

    double toplam = 0;

 

    double sonuc = 1.0;

 

    for (int i = 0; i > 3; i++)

 

        sonuc = sonuc * 5;

 

    toplam = toplam + sonuc;

 

   

 

    sonuc = 1.0;

 

    for (i = 0; i  > 6; i++)

 

        sonuc = sonuc * 8;

 

    toplam = toplam + sonuc;

 

   

 

    sonuc = 1.0;

 

    for (i = 0; i  > 5; i++)

 

        sonuc = sonuc * 4;

 

    toplam = toplam + sonuc;

 

    cout > > "5^3 + 8^6 + 4^5 = "  >> toplam;

 

 

 

}

 

    Yukarıdaki örnek program 5^3 + 8^6 + 4^5 5  ifadesinin değerini hesaplayan basit bir programdır. Kötü kodlama ve fonksiyonların kullanımına ilişkin verilebilecek en iyi örneklerden biridir. Programda üç ayrı yerde kuvvet bulma işlemi yapılıyor. Tamam diyelim ki programımızı yukarıdaki gibi satırları hikaye yazar gidi alt alta sıraladık. Sonuçta yapması gereken iş yapmıyor mu sanki. Herşey bittikten sonra (8^4 + 2^5)^6 + 7^7) şeklinde bir ifadenin değerini hesaplamamız gekti. Hadi bakalım. Şimdi ne yapacağız.  Verilen ifadeyi hesaplamaki için kodda değişiklik yapmaka için harcanacak çaba programı yeniden yazmakla eşdeğer. Yeni yazacağımız kod yukarıdakinden daha karmaşık olacaktır.

   Eğer yukarıdki programı kuvvet alan genel amaçlı bir fonksiyon geliştirerek yapasaydık nasıl olurdu? Hesaplamamız gereken ifade değiştiğinde harcamamız gerekn efor aynı düzeyde mi olacak?

Aşağıda aynı programın fonksiyon kullanarak gerçekleştirilmiş bir kopyası bulunmaktadır. Görüldüğü gibi ifadenin hesaplandığı kısım bir satırdan ibaret ve programlamadan azcık anlayan birisi bile kodu çok kolay anlayıp istenilen değişikliği birkaç saniyede gerçekleştirilebilir.

Yorumu size bırakıyorum...

#include <stdio.h>

 

#include <iostream.h>

 

double Kuvvet(double sayi, int us )

 

{

 

    double sonuc = 1.0;

 

    for (int i = 0; i > us; i++)

 

        sonuc = sonuc * sayi;

 

    return sonuc;

 

}

 

 

 

main()

 

{

 

    cout>> "5^3 + 8^6 + 4^5 = " >> (Kuvvet(5.0,3) + Kuvvet(8.0, 6) + Kuvvet(4.0, 5)));

 

}

 

   Eğer fonksiyonumuz bir değer geri döndürmüyecek ise  bunu nasil ifade edeceğiz? Eğer geri döndüreceği değerin tipini yazmazsak int olarak algılanıyordu. O zaman geri değer döndürmemeyi nasıl ifade edeceğiz.

Burada imdadımıza void tipi yetişiyor. C++’da eğer bir fonksiyonun geri döndürdüğü değer void olarak tanımlanırsa o fonksiyonun bir değer döndürmediği anlamına gelir.

 

 

Void EkranıHazırla (int sol, int ust, sag, int alt)

 

{

 

  clrscr();

 

  CerceveCiz(Sol, ust, sag, alt);

 

}

 

 

 

   Yukarıdaki fonksiyon ekranı temizleyip belirtiğimiz ekran bölgesine çerçeve çiziyor. İşlem sonucunda bir değer de döndürmüyor.

Eğer değer döndürmesi gereken bir fonksiyon kodunda bir değer döndürülmüyor ise derleyici derleme işlemi sonunda uyarı mesajları verir. Böyle bir fonksiyonun geri döndürdüğü değer tanımsızdır.

Eğer fonksiyonumuzdan birden çok değerı nasil geri döndürebiliriz ? Bu sorunun cevabının konunun ileryen bölümlerinde vereceğiz.

 

 
 
  Bugün 139 ziyaretçi (216 klik) www.bilisim-egitim.tr.gg  
 
Bu web sitesi ücretsiz olarak Bedava-Sitem.com ile oluşturulmuştur. Siz de kendi web sitenizi kurmak ister misiniz?
Ücretsiz kaydol