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
6
Cevap
246
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; }

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



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.