Şimdi Ara

problem

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
7
Cevap
0
Favori
247
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
Öne Çıkar
0 oy
Sayfa: 1
Giriş
Mesaj
  • KTÜ'nün 2012 final sorularınada şöyle bir soruya rastladım ve cevabıda 75 fakat ben 60 buluyorum.Acaba hatamının nerede hata yapıyorum
     
    //ekran çıktısı ne olur
    int x=15;
    int fun(int y);
    void main() {
        printf("%d", (fun(x+x)+30)+x);
    }
    int fun(int y)
     {   
     y=y+x;
         x=y-­x; 
        y=y­-x;      
       return y; }



    _____________________________
  • quote:

    Orijinalden alıntı: sparcoysn

    KTÜ'nün 2012 final sorularınada şöyle bir soruya rastladım ve cevabıda 75 fakat ben 60 buluyorum.Acaba hatamının nerede hata yapıyorum
     
    //ekran çıktısı ne olur
    int x=15;
    int fun(int y);
    void main() {
        printf("%d", (fun(x+x)+30)+x);
    }
    int fun(int y)
     {   
     y=y+x;
         x=y-­x; 
        y=y­-x;      
       return y; }


    fonksiyonun callı;
    fun((15+15)+30)
    return değeri;
    y.
    Fonksiyona gelen parametre değişkeni referans olmadığı için (bildiğim kadarıyla) üzerinde yaptığın değişiklikler işlemiyor.
    Fonksiyonun içinde yalnızca x değişiyor. Y değişseydi sonuç şöyle olurdu;
    y = 60 + 15 //y 75 oldu
    x = 75 - 15 //x 60 oldu
    y = 75 - 60 //y 15 oldu
    //return 15
    Çıktı da 30 olurdu.
    Edit;
    Fonksiyon call'ını yanlış görmüşüm;
    fun(30) olacak
    Yani y 30
    return değeri yine 30
    print edilirken;
    30 + 30 + 15



    < Bu mesaj bu kişi tarafından değiştirildi welrocken -- 16 Kasım 2014; 10:44:35 >
    _____________________________




  • maalesef tam kavrayamadim.int x=15;ile zaten x degiskeni global hale getirilmis.neden fonksiyonda degismesin ki? burayi biraz daha acarsan sevinirim.

    < Bu ileti mobil sürüm kullanılarak atıldı >
    _____________________________
  • x global olduğundan fonksiyon içerisinde değişir, y fonksiyon içerisinde değişir zira bir parametre fonksiyonun local variable'ı haline gelir, ama globalde bir anlamı yok.

    fonksiyon parametresinin local variable olarak kullanılması ile ilgili şurayı okuyabilirsin;
    http://stackoverflow.com/questions/2753494/using-function-arguments-as-local-variables


    fonksiyon f(x+x) ile çağrılmış yani f(30)

    fonksiyon içerisideki satırlarda
    y=y+x; burada y 45 olur
    x=y-­x; burada x 30 olur
    y=y­-x; burada y 15 olur

    sonuçta fonksiyon global olan x'i 30'a set eder ve geriye 15 döner.

    (fun(x+x)+30)+x satırında f(x) yerine 15, global x için de 30 koyarsak 15+30+30 ile 75 sonucu oluşur.

    umarım faydalı olmuştur.
    _____________________________




  • harika anlatmışsın.teşekkur ederim.

    < Bu ileti mobil sürüm kullanılarak atıldı >
    _____________________________
  • quote:

    Orijinalden alıntı: selman_82

    x global olduğundan fonksiyon içerisinde değişir, y fonksiyon içerisinde değişir zira bir parametre fonksiyonun local variable'ı haline gelir, ama globalde bir anlamı yok.

    fonksiyon parametresinin local variable olarak kullanılması ile ilgili şurayı okuyabilirsin;
    http://stackoverflow.com/questions/2753494/using-function-arguments-as-local-variables


    fonksiyon f(x+x) ile çağrılmış yani f(30)

    fonksiyon içerisideki satırlarda
    y=y+x; burada y 45 olur
    x=y-­x; burada x 30 olur
    y=y­-x; burada y 15 olur

    sonuçta fonksiyon global olan x'i 30'a set eder ve geriye 15 döner.

    (fun(x+x)+30)+x satırında f(x) yerine 15, global x için de 30 koyarsak 15+30+30 ile 75 sonucu oluşur.

    umarım faydalı olmuştur.

    Güzel sallamışım bilmiyordum o şekilde çalışabildiğini (Şansa bala aynı sonucu aldım :D).
    İlk başta aklımı karıştıran şey şu olmuştu; fonksiyona parametre olarak bir sayı girildiğinde şöyle bir hal alıyordu;
    def : f(x)...
    call : f(1)
    daha sonra fonksiyonda herhangi bir yerde x'e assignment yapıldığında x ne ki? diye sorasım geliyordu.
    Linkteki olay tüm olayı oturttu. Teşekkürler paylaşım için
    _____________________________




  • @sparcoysn rica ederim;

    @welrocken sanırım Call by value ve Call by reference olaylarını karıştırmışsın. aşağıdaki kod wiki'den alınma, açıklayıcı olur.

    http://en.wikipedia.org/wiki/Evaluation_strategy

     
    void Modify(int p, int * q, int * o)
    {
    p = 27; // passed by value - only the local parameter is modified
    *q = 27; // passed by value or reference, check call site to determine which
    *o = 27; // passed by value or reference, check call site to determine which
    }
    int main()
    {
    int a = 1;
    int b = 1;
    int x = 1;
    int * c = &x;
    Modify(a, &b, c); // a is passed by value, b is passed by reference by creating a pointer,
    // c is a pointer passed by value
    // b and x are changed
    return(0);
    }
    _____________________________




  • Yapay Zeka’dan İlgili Konular
    İlginç Bir Reset Sorunu
    14 yıl önce açıldı
    sorun halledildi..
    20 yıl önce açıldı
    Daha Fazla Göster
    
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.