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.
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 >
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.
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 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
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); }
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 >
< Bu ileti mobil sürüm kullanılarak atıldı > Bu mesaja 1 cevap geldi. Cevapları Gizle
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. Cevapları Gizle
< Bu ileti mobil sürüm kullanılarak atıldı >
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
@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
Bu mesajda bahsedilenler: @welrocken , @sparcoysn