DonanımHaber Mini sürüm 2 Ocak 2026 tarihi itibariyle kullanımdan kalkacaktır. Bunun yerine daha hızlı bir deneyim için DH Android veya DH iOS uygulamalarını kullanabilirsiniz.
Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
6
Cevap
247
Tıklama
0
Öne Çıkarma
problem
S
11 yıl (196 mesaj)
Teğmen
Konu Sahibi

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; }



W
11 yıl (1760 mesaj)
Binbaşı

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 >

S
11 yıl (196 mesaj)
Teğmen
Konu Sahibi

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ı >
Bu mesaja 1 cevap geldi.
S
11 yıl (222 mesaj)
Teğmen

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.


Bu mesaja 1 cevap geldi.
S
11 yıl (196 mesaj)
Teğmen
Konu Sahibi

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



< Bu ileti mobil sürüm kullanılarak atıldı >

W
11 yıl (1760 mesaj)
Binbaşı

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



S
11 yıl (222 mesaj)
Teğmen

@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);
}




Bu mesajda bahsedilenler: @welrocken , @sparcoysn
DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.