[]

C'de return komutu?

return komutunun yaptığı işi anlamıyorum biri yardım etsin lütfen. sağda solda sürekli belirtilen değeri döndürür diyorlar ama nedir bu değeri döndürmek? dönünce ne oluyor dönmezse ne oluyor?

mesela main fonksiyonun içindeki return 0; değeri fonksiyonun bittiğini gösteriyor ama 0 ne alakadır nerden gelir kafama oturtamadım. sıfır'a dair bir şey yok önceki satırlarda nedir bu "0". 1 koysak nasıl çalışır mesela?

bide factorial fonksiyonun içindeki return'un yanına niye product geliyor? niye 0 gelmiyor?

çıldırdım lan :S


#include <stdio.h>

int factorial (int n);
int main()
{
int x;
printf("input an integer to find factorial:");
scanf("%d",&x);
printf("factorial of integer: %d\n",factorial(x));
return 0;
}

int factorial (int n)
{
int i, product = 1;
for (i = 2; i <= n; ++i)
product *= i;
return product;
}

 
programlama bildiginize emin misiniz? Eger yeni basliyorsaniz anlatayim ne ise yaradigini... Degilse bosuna yorulmayayim...


  • thunder thunder thunder thundercats  (26.11.10 21:47:25) 
return 0'a çok takıldıysan boşver yazma o zaman. ya da yazmayınca hata veriyorsa yaz. (ki genelde vermez ama compiler'ını bilemiyorum belli olmaz). o main fonksiyonunun sorunsuz bi şekilde tamamlandığını belirtiyor. return 0'ın üstünde çok düşünmeye gerek yok.
ve factorial da product'ı döndürücek tabii. çünkü fonksiyonun içinde faktoriyel işleminin sonucunu product'ta tutuyorsun ve main'in içinde "factorial(x)" yazarak bu fonksiyonu çağırdığında return'ün yanına yazdığın değer yani product dönücek ve ekrana sonucu yazıcak.

  • tepedeki psychedelic adam  (26.11.10 21:48:42 ~ 21:50:41) 
Yeni başladım sayılır. C dersi alıyorum yarın da vize var. diğer konularda bir sıkıntı yok ama return olayını anlayamadım gitti. şunu anlasam oturacak her şey.


  • trinitrotoluen  (26.11.10 21:49:25) 
ok uzuncana bir cevap yaziyorum simdi...


  • thunder thunder thunder thundercats  (26.11.10 21:51:28) 
Düşünün ki siz bir patronsunuz (programın main kısmı). Bir iş yapıyorsunuz, altınızda çalışan elemanlar (alt programlar) var. O elemanlara işin parçalarını veriyorsunuz, yapıyorlar, sonra yaptıkları işin sonucunu size raporluyorlar. Mesela birine "git borunun uzunluğunu ölç" dediniz. Adam gidip ölçüyor, sizin ilgilendiğiniz adamın o işi nasıl yaptığı filan değil, tek ilgilendiğiniz borunun uzunluğu. Adam size gelip "borunun uzunluğunu 10 cm olarak ölçtüm" diyor. Yani size (main program) 10 değerini return'lemiş oluyor. Siz bu alt programlardan gelen bilgilerle işinizi yapıyorsunuz. Ama sizin de bir üst patronunuz (CEO :) ) var, o üst patrona işin başarıyla bittiğini söylemenin adı main programı "return 0" ile bitirmek. "return 1" genelde programda hata olduğunu bildirir.


  • sourlemonade  (26.11.10 21:59:11) 
Çok teşekkürler. Sonunda anladım sanırım.


  • trinitrotoluen  (26.11.10 22:07:55) 
simdi her bir fonksiyonun bir sonucu vardir. mesela matematikte f(x)=x2 fonksiyonunu dusunelim. f(x) fonksiyonunun sonucu nedir? x2'dir dimi? iste return tam olarak budur... fonksiyonun sonuc olarak ne verecegidir...

fonksiyonu bir makine olarak dusunebiliriz. bir hammadde girer, bir urun cikarir...

mesela patates cipsi uretelim. y=f(x), patates cipsi ureten bir fonksiyon olsun.
burada x'imiz, yani girdimiz patates olmak zorunda. y'miz, yani ciktimiz ise cips oluyor. iste C ve diger programlama dillerinde de her fonksiyonun bir girdisi, bir de ciktisi vardir. ama bazen bir girdisi, bazen ciktisi, bazen de her ikisi birden olmak zorunda degildir. ornekler vereyim...

fonksiyonumuz kendisine verilen malzemelerden salata yapsin. bu fonksiyonda girdilerimiz domates, salatalik, marul vs'dir. ciktimiz ise salatadir.

salata salataYapmaFonksiyonu(salatalik x, domates y, marul z)
{
salata mySalata;
mySalata=karistir(kes(x),kes(y),kes(z));
return mySalata;
}

ama diyelim bir fonksiyonumuz bana rastgele bir sayi versin. bu fonksiyona girdi vermemize gerek yok. ama ciktisi nedir? rastgele sayimizdir.

int rastgeleSayiUretenFonksiyon(){
int randomSayi = random();
return randomSayi;}

diyelim ki fonksiyonumuz yerleri paspaslamak olsun. burada girdi de yoktur cikti da yoktur.

void yerleriPaspasla(){

paspasla()

}//dikkat ettiniz mi, void fonksiyonlarda return yazmiyoruz

ama eger sana bir sayi verecem, bunu ekrana yaz istegine cevap veren bir fonksiyon varsa bunun girdisi vardir ama ciktisi yoktur.

void ekranaSayiYaz(int x)
{
printf("%d",x);
}

bunun gibi sacma yahut anlasilmaz bir girizgah yaptik... neyse, devam edelim...

simdi beraber bir f(x)= x2 fonksiyonunu algoritma ile anlatalim...

yani bilgisayara diyecegiz ki:

kardesim, simdi sana yeni bir fonksiyon ogretecegim.
fonksiyonun adi kareleme olsun
bu bir tamsayiyi alip karesini verecek bana
bunun icin, once sana diyorum ki, bu "kareleme" adli fonksiyon bir tamsayiyi girdi olarak alir
sonra da diyorum ki sonuc olarak bir tamsayi verir
bu fonksiyonun icinde olan da $udur, girdi olarak aldigi tamsayinin karesini hesaplar.
sonra da bu kareyi sonuc olarak verir.

simdi C'de bunu nasil yapiyoruz gosterelim:

1.kardesim, simdi sana yeni bir fonksiyon ogretecegim.
fonksiyonun adi kareleme olsun:
kod:
.... kareleme(.......){
.......
}

2.bu bir tamsayiyi alip karesini verecek bana:
kod:
//this function takes an integer and returns to its square value
.... kareleme(.......){
......
}
3.bunun icin, once sana diyorum ki, bu "kareleme" adli fonksiyon bir tamsayiyi girdi olarak alir:
kod:
//this function takes an integer and returns to its square value
.... kareleme(int x){
.......
}
4.sonra da diyorum ki sonuc olarak bir tamsayi verir:
kod:
//this function takes an integer and returns to its square value
int kareleme(int x){
int y;
......
return y;
}

5.bu fonksiyonun icinde olan da $udur, girdi olarak aldigi tamsayinin karesini hesaplar.
sonra da bu kareyi sonuc olarak verir:

kod:
//this function takes an integer and returns to its square value
int kareleme(int x){
int y;
y = x * x;
return y;
}

boylece kodumuzu tamamlamis olduk....

simdi bu fonksiyonumuzu main fonksiyonu icinde cagiralim:

int main()
{
int girilenSayi;
int sonuc;
printf("bi tamsayi gir:");
scanf("%d",&girilenSayi);
sonuc=kareleme(girilenSayi);
printf("%d'nin karesi %d eder.",girilenSayi,sonuc);
return 0;
}

eger kareleme fonksiyonumuza return y yazmasaydik. bilgisayar y degerine girilen x degerinin karesini atardi ama bunu bize sonuc olarak vermezdi.
o zaman da sonuc=kareleme(girilenSayi) diyemezdik... cunki sonuc bir int degeri ve bir int degeri ile eslesmesi gerekiyor. oysa kareleme fonksiyonunun bir int degerine esit olmasi icin bir int degerini sonuc olarak kabul edip return type'i olan o sonuca esitlenmesi lazim...

yani bir pastaneye dort musteri gelsin ve dordu de ayni kek'ten istesin... o zaman bir kek fonksiyonumuz olsun:

kek elmaliKek (un x, sut y, seker z, elma q)
{
hamkek x1= karistir(x,y,z,q);
kek x2 = pisir(x1);//buradan anliyoruz ki pisir fonksiyonunun prototype'i [kek pisir(hamkek x)] olmali
return x2;
}

simdi main fonksiyonda 4 tane kekimiz olsun:

int main()
{
kek kek1;
kek kek2;
kek kek3;
kek kek4;

kek1 = elmaliKek(guzelUn,falanYag,tozSeker,5elma);
kek2 = kek1;
kek3 = kek1;
kek4 = kek1;

return 0;
}

olmus olur...

neden int main fonksiyonuna return 0 yaziyoruz diyorsaniz... main bir fonksiyondur. fonksiyonun isi ise programinizin basindan sonuna kadar ne yaparsaniz onu calistirmaktir. [int main()] bir int fonksiyondur. yani sonuc olarak bir tamsayi dondurur. bu tamsayi ise c compiler'imize bir sifre mahiyetindedir. compiler eger int main() sifir dondururse programimizi normal kapanacak sekilde derler... ama baska bir deger donerse (1, 2, 4593 gibi) programimizi kaparken baska seyler yap yahut su mesaji vererek kapa vs, gibi bir islem yapar. ne yazik ki her c compileri 0 degeri icin main fonksiyonunda programi normal sekilde kapatsa da sifir olmayan sonuclar icin belirli bir standart yoktur, compilerdan compilera degisir... evet, C dili her ne kadar standart bir dil olsa da piyasada cesitli farkli derleyiciler (compiler) mevcuttur. her biri programimizi kendi gereksinimlerine gore uretir. kimisi paralidir, kimisi belestir...

siz en iyisi int main() fonksiyonunu degil de void main() fonksiyonunu kullanin. o zaman return yazmaniz gerekmez... ornek:

#include <stdio.h>

void main()
{
printf("Welcome to C!\n");
}

//evet, hepsi bu kadar... return 0 yazmamiza gerek kalmadi...
  • thunder thunder thunder thundercats  (26.11.10 22:40:11) 
zorlastirmaya gerek yok, bir fonksiyonun ne donmesini istiyorsaniz onu return e yaziyorsunuz. mesela ben yas fonksiyonu yazdim:

int yasinNe(){
return 10;
}

burada ben kisinin yasini soruyorum ve onu bana dondurecek:
int main(){

int yas;
yas=yasinNe();
printf("yasiniz =%d",yas);
}

ya da isim fonksiyonu yazdim:

char* adinNe(){
return "trinitrotuluen";
}

gibi gider. anlamadiysan daha fazla dusunme ustunde, biraz ara ver dinlen uyu sonra tekrar bakarsin.
  • bipot  (26.11.10 22:42:31) 
benden once uzun uzun guzelce anlatilmis bu sebeple bir daha anlatmama gerek yok ama genelde bu fonksiyonlari-return olayini anlamamanin sebebi, degiskenler ile fonksiyonlari ayirmaktir. Ayri seyler gibi gormemek lazim. fonksiyon da bir degiskendir-degeri olabilir gibi bakmak gerekiyor olaya.


  • samfisher  (26.11.10 22:59:16) 
benim cevabin son paragrafinda neden main fonksiyonunda return 0 yazildiginin aciklamasi var. olur da tum cevabi okumaya usenenler (ki haklaridir) icin soyleyeyim...


  • thunder thunder thunder thundercats  (26.11.10 23:02:52) 
@thunder

adam emek vermiş adeta. sözlüğe yazmalık bilgi :D çok çok teşekkürler
  • trinitrotoluen  (27.11.10 01:00:42 ~ 01:02:03) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.