BİLİŞİM - BİLGİSAYAR - EĞİTİM
  Fonksiyonu Değer ile Çağırma
 

Değer İle Çağırma

   Bu çağırma şeklinde fonksiyon parametre değerleri yerel değişkenlere kopyalanır. Fonksiyon hiç bir şekilde kendisine parametre olarak geçilen değişkenleri değiştiremez. Parametre değişkenleri üzerinde yaptığı değişiklikler yerel değişkenlerin üzerinde gerçekleşir ve fonksiyondan çıkılırken bu değişkenler de yok edildiğinden kaybolur. Bu yöntemin dez avantajı büyük yapıların parametre olarak geçilmesi durumunda kopyalama işleminin getirdiği maliyet oldukça yüksek olur. Fakat bu yöntem sayesinde fonksiyonun içinde yanlışılıkla kendisine geçilen parametrelerin değerlerinin değiştirilmemesi garantilenmiş olur.

 

 

#include <stdio.h>

 

#include <iostream.h>

 

 

 

double Kuvvet(double sayi, int us )

 

{

 

    double sonuc = 1.0;

 

    for (; us > 0; us--)

 

        sonuc = sonuc * sayi;

 

    return sonuc;

 

}

 

 

 

main()

 

{

 

    double x;

 

    int y;

 

    cout<<"(x^y)^y ifadesini hesaplamak için x, ve y de?erlerini sysasy ile giriniz." << endl;

 

    cout <<" ? x =";

 

    cin >>x;

 

    cout <<" ? y =";

 

    cin &ft>y;

 

    cout<< "("<< x <<"^"<< y << ")^"<< y <<" ="<< (Kuvvet(Kuvvet(x,y), y)) << endl;

 

}

 

   Yukarıdaki örnek programda Kuvvet Kuvvet fonksiyonun parametreleri değer ile geçiliyor.. Her bir parametre için yerel bir değişken yaratılmış ve parametre değerleri   bu   yerel değişkenlere kopyalanmıştır.. Dolayısıyla us değişkeni üzerinde yaptığımız değişiklikler programın işleyişinde aksaklığa sebek vermemektedir. Programın çıktısı aşağıdaki gibidir.

 

 

(x^y)^y ifadesini hesaplamak için x, ve y değerlerini sırası ile giriniz.

 

? x =2

 

? y =3

 

(2^3)^3 =512

 

Press any key to continue

 

 

 

 

 

   Şimdi program üzrendi ufak bir değişiklik yapalım. us us parametresini değer ile değil de referans ile geçelim bakalım program aynı veriler için nasıl bir davranışta bulunacak. Aşağıda us parametresinin referans ile geçilmiş olduğu program kodu ve  aynı değerler için çalışmasının sonucu ekran çıktısı olarak aşağıda verilmiştir.

   Ekran çıktısında da görüldüğü gibi program düzgün çalışmamaktadır. Çünkü Kuvvet Kuvvet fonksiyonu kendisine yolladığımız us us değişkenini değiştirmiştir. Fonksiyon us us parametresi için geçilen değişkenin referansını parametre olarak aldığından us us değişkeni için yerel olarak oluşturulan değişken orjinal değeri gösterir.

 

   Kodu dikkatle incelersek. Kuvvet fonksiyonu iki kez ard arda çağrılıyor. Birinci çağırılışında us parameteresi olarak geçilen y değişkenin değeri fonksiyon içinde değiştiriliyor ve 0 yapılıyor. Fonksiyon birinci çağırılışında düzgün çalışıyor. Fakat ikinci çağırılışında us olarak 0 değeri geçildiğinden sonuç 1 olarak bulunuyor.

Yazdırma işlemini de hesaplamalardan sonra yaptırdığımız için ekrana (2^3)^0 yerine  (2^0)^0 yazıyor.

 

 

#include <stdio.h>

 

#include <iostream.h>

 

 

 

double Kuvvet(double sayi, int &us )

 

{

 

    double sonuc = 1.0;

 

    for (; us > 0; us--)

 

        sonuc = sonuc * sayi;

 

    return sonuc;

 

}

 

 

 

main()

 

{

 

    double x;

 

    int y;

 

    cout<<"(x^y)^y ifadesini hesaplamak için x, ve y değerlerini sırası ile giriniz." << endl;

 

    cout <<" ? x =";

 

    cin >>x;

 

    cout <<" ? y =";

 

    cin >>y;

 

    cout<< "("<< x <<"^"<< y << ")^"<< y <<" ="<< (Kuvvet(Kuvvet(x,y), y)) << endl;

 

}

 

(x^y)^y ifadesini hesaplamak için x, ve y değerlerini sırası ile giriniz.

 

? x =2

 

? y =3

 

(2^0)^0 =1

 

Press any key to continue

 

 

Çok büyük boyuttaki yapıları değer ile geçmek performansı düşürür.

 

Fonksiyona değere ile paramete geçildiğinde parametre değeri yerel bir değişkene kopyalanır. Yapılan değişiklikler yerel değişken üzerindedir. Fonksiyondan çıkınca kaybolur.

 
 
  Bugün 116 ziyaretçi (168 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