Konuyu görüntüle
IUCODERS FORUM > Programlama > C / C++ > stringi tersten yazd?rma
Yazar
bilgeadam61


avatar
trabzon
Kayıt: 31.01.2006
13.03.2007-18:55 #18144
evet ooo ama kodu ben yazmadın alıntı vede nasıl çaliştıgını da anlamadım aslında ama neden öyle çaliştıgını anlamadım koda bakınca ilk olarak kontrol yapcak if(sptr[0]=='') ile bakcak ki dogru deil sonra else geccek ters(&sptr[1]) kodu ile ters fonsiyonu cağırcak sonra sptr[0]= olcak sptr[1]e sora ve de putchar(sptr[0]) kodu ile de girdiğimiz stringin ilk karakteri yazdırılcak gibi gelio bana... ama öle olmuyoo nedeni de anlayaöadım bi türlü///





geldim gördüm yendim...
Yazar
bilgeadam61


avatar
trabzon
Kayıt: 31.01.2006
13.03.2007-19:00 #18145
void ters(const char * const sptr){
if(sptr[0]=='')
return;
else
ters(&sptr[1]);
putchar(sptr[0]);
}


fonksiyon bu şekilde de çalişıo





geldim gördüm yendim...
Yazar
clairvoyant


avatar
Antalya
Kayıt: 05.05.2006
13.03.2007-19:11 #18148
bilgeadam61 yazdi
 
evet ooo ama kodu ben yazmadın alıntı vede nasıl çaliştıgını da anlamadım aslında ama neden öyle çaliştıgını anlamadım koda bakınca ilk olarak kontrol yapcak if(sptr[0]=='') ile bakcak ki dogru deil sonra else geccek ters(&sptr[1]) kodu ile ters fonsiyonu cağırcak sonra sptr[0]= olcak sptr[1]e sora ve de putchar(sptr[0]) kodu ile de girdiğimiz stringin ilk karakteri yazdırılcak gibi gelio bana... ama öle olmuyoo nedeni de anlayaöadım bi türlü///

Sen sanırım rekürsif mantığını anlamamışsın henüz. Fonksiyon kendini çağırdıkça içe girer. Yani kendini çağırdığı noktadan devam etmez. Çünkü daha içteki kod çalışmamıştır. Bu şekilde fonksiyon return ifadesini görene kadar içe girmeye devam eder. return ifadesi bir dıştaki çağırma (en son referans) noktasına döndürür işlemi.

Düşün ki;
void ters(const char * const sptr){
if(sptr[0]=='\0') 
return; 
else { 
if(sptr[1]=='\0')
return;
else {
if(sptr[2]=='\0')
return;
else {
.....
.....
.....
putchar(sptr[2]); 
}
putchar(sptr[1]);
}
putchar(sptr[0]);
}
}

şeklinde çalışıyor program. OK? smile





Let`s make this world a better place to live !

Yazar
engineer58


avatar

Kayıt: 16.03.2006
13.03.2007-20:54 #18152
burda derleyici str[0] gibi bir ifadeyle karşlaşınca bunu *(str + 0) (str str[0] ın adresidir) olarak yorumluyo daha sonra rekürsif olarak içe doğru gittikçe str değişkeni 1 artırılıyo str bir arttırılıyo bu noktada str değerine eriştiğinde artmış değere erişirsin. Aynı şekilde burdaki kodda rekürsif fonksiyon NULL karaktere kadar gider sonra her seferde str[0] ı erana yazdırır.

örneğin 5 harflik bi kelimeyi yazdırıyo olalım herseferinde str[0] aslında en son artmış değer olur yani
*(str+3)
*(str+2)
*(str+1)
*(str+0) ı yazdırıp çıkar





Yazar
bilgeadam61


avatar
trabzon
Kayıt: 31.01.2006
13.03.2007-23:38 #18182
anlaşılmıştır teşşekkür ederim...
zaten eskiden beri sevmem bu rekürsifleri demekki çalişmasını cok iyi anlayamamışım..
nese yardımlar için tekrar teşşekkür ederim...





geldim gördüm yendim...
Yazar
reccae


avatar
istanbul
banlandı
Kayıt: 15.02.2006
13.03.2007-23:44 #18184
sorun rekürsif olması değil
fonksiyon ypacağı işlemleri bitirmeden kendisini çağırması sorun olabiliyor

fonksiyon işinin bitirip return diyince daha önceki yapmadığı işlemlerin hepsini yapar. bunun içinde tersten çalışıyormuş gibi görünür

clairvoyant çok iyi bi şekilde özetlemiş zaten senin fonksiyonun nasıl çalıştığını. ona bakarsan durumu anlarsın





insa ettigim binanin cimentosu kelâm

1 2
Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb