Tam Sürümünü Görmek İçin : Sayinin tersini yazmak
zeynepyaprak
23/04/2007, 19:21
esas ben teşekkür ederim arkadaşlar, sağolun çok güzel açıklamışsn ancak önemli olan bu teorik bilgileri kod lara dökebilecekmiyim :)
1-2 gün uğraşayım size buradan kodları yine yazarım.
Bu arada şöyle bir fonksiyona ihtiyacım oldu. input olarak girilen sayının tersini yazmam gerekiyor. örn :
2319 --> 9132
4500 --> 54
henüz internette araştırmadım ama işin uzmanları ip ucu verebilir mi ? nasıl yapabilirim bunu ?
zeynepyaprak
23/04/2007, 19:56
İnternette biraz araştırma yapınca aşağıdaki programı buldum, program çalışıyor ve tam benim istediğimi yapıyor ancak benim böyle bir programı function ile yapmam gerekiyor :(
#include <iostream>
#include <cstdlib>
int reverse_num (int n,int m) ;
using namespace std;
int main()
{
int n;
int m=0;
cout<<"enter number to reverse :";
cin>>n;
cout<<reverse_num(n,0)<<endl; //calling the function
system("pause") ;
return 0;
}
int reverse_num(int n,int m)
{
if(n==0)
return m; //base (exit condition)
m*=10;
m+=n%10;
return reverse_num(n/10,m); //recursive call
}
------------------------------------------------------------------
Function ile de ilgili aşağıdak programı buldum ancak çalışmıyor, kaldı ki ben yazılanların bir kısmını anlayabildim. Off ya nasıl öğrenicem ben bu C++ ı ?
#include <iostream>
/* FUNCTIONS ================================================= */
int ReverseInt(int num)
// PRE : Takes an int
// POST: Returns int reversed
// DESC: Recursively reverses ints
{
int i = 10;
if (num < 10)
return num;
else
{
for(i; num%i != num; i *= 10);
return ((num%10) * i/10) + ReverseInt(num/10);
}
}
// --------------------------------------------------------------------------------
/* MAIN PROGRAM ================================================== = */
int main()
{
int num;
do
{
cout << "Enter a postive number to reverse (neg or 0 exits):" << endl;
cin >> num;
cout << ReverseInt(num) << endl;
} while (num > 0);
return 0;
}
acehreli
23/04/2007, 20:02
zeynepbayrak, bu sorunun sonuna ekledigin diger konuyla bir ilgisi olmadigi icin ayri bir konu actim.
Forumda konularin listelendigi ekranda yukarida 'Yeni Konu Ac' diye bir dugme var; bundan sonra onu kullanabilirsin.
Ali
hasanyasin
23/04/2007, 20:05
Öğrenmek için doğru şeyleri yapmıyorsunuz. Kod aramamak yerine çözüm geliştirmeye çalışmalısınız. Birilerinin yazdığı bir şeylere bakmak zihni tembelliğe götürür...
Şimdi bu kodları silip atın ve dikkatlice düşünün, bir sayıyı tersine çevirmek nasıl yapılabilir?
1234 ile 4321 arasındaki ilişki nedir? Bunun üzerine odaklanmalısınız...
Bir problemi çözmek kadar bunu güzelce kodlamak da önemli tabii. Bu yetiyi geliştirme konusunda da hazır kodları inceleme alışkanlığı başarınıza sürekli ket vuracak. Kendiniz yazmayı deneyin, sıfırdan, boş bir sayfada çalışan minimum program kodunu yazıp sonra da işlevleri ekleyerek kodunuzu ilerletin...
zeynepyaprak
23/04/2007, 20:20
Yeni başlık için tşk ederim Ali Bey, bende yazı nereye gitti diyordum :)
hasanyasin --> sizde dediklerinizde haklı olabilirsiniz ancak bende örnek programlardaki uygulamaların nasıl çalıştıklarını inceleyerek öğrenmeye çalışıyordum.
kod yazmak gibi bir niyetim yok. hasan yasin arkadaşımızın dediğine katılıyorum. algoritma önereceğim.
1 sayıyı al
2 sayının 10 a bölümünden kalanı bul
3 ona bölümünden kalanı ekrana yaz
4 sayıyı 10 a böl
5 bölüm 10 dan küçükse yazdır ve çık
6 bölüm 10 dan büyükse 2. adıma geri dön
kolay gelsin
hasanyasin
23/04/2007, 23:25
İnanın yeni bir şeyler üretmek, üretilmiş bir şeyleri incelemekten çok daha kolay. İşim gereği bazen mevcut sistemler üzerinde çalışmam gerekiyor ve en çok baş ağrısını böyle işlerde yaşıyorum. Bunun yanında, 15. yılına girdiğim programcılık deneyimim ve bu süreçte birlikte çalıştığımız bir sürü öğrenci arkadaşla yaşadığım tecrübelere dayanarak size yukarıdaki öneride bulundum.
Başta gerçekten biraz zor geliyor, ilk adımlar öğrencileri zorluyor; ama sonra öyle tatmin edici bir öğrenme süreci başlıyor ki, başlarken yaşanan tüm zorluklar damakta bıraktığı baklavamsı tatla hatırlanıyor...
Şimdi sorumuza dönelim ve buyrun birlikte bakalım:
ABCD ve DCBA sayılarını nasıl birbirine çevirebiliriz? A için değişen şey nedir? A, baştaki hâlinden nasıl bir değişiklik geçirerek sondaki hâline ulaşmış?
ABCD'yi nasıl tek tek rakam rakam ele alabiliriz? Önce A'yı almak istesek? ABCD'nin 1000'e bölümünün tam sayı kısmı A'yı verir; ama 1000'i nasıl bulacağız? AB...CD şeklinde uzunluğunu bilmediğimiz bir sayıda, A'yı nasıl alabiliriz? Peki D'yi almak istesek? AB...CD'nin 10'a bölümünden kalan D'yi verir bize değil mi? Ohhh, elimize bir sayı geldi çok şükür. Peki ya devamında? AB...CD'den D'yi çıkarınca AB...C0 kalır ve bunu da 10'a bölünce bir sonraki basamağa ulaşmış oluruz. İşte elimizde bir döngü var artık hehee...
a=AB...CD # Bu bizim cici güzel biricik sayımız olsun.
c=0 # Buna da ters çevrilmiş sayımızı koyarız.
a>10 olduğu sürece:
b=a%10
c=c*10+b
a=(a-b)/10
c=c*10+a
İşte bu kadar... Şimdi de bunu kodlamam gerekiyor kullandığım dilde... O da çok basit tabii. Yapamayacağım bir şey olursa nereye bakacağım? Yazılmış kodlara mı? KESİNLİKLE HAYIR! Peki ya nereye? Dökümanlara...
[Yazmıştım; ama göndermeden masamdan kalkıp gitmem gerekti. Dönünce de gördüm ki xlegend daha önce cevap vermiş. Bazen biri bir şeyi güzelce açıkladıktan sonra altında o açıklamayla kıyas bile edilemeyecek minicik ve önceki açıklamadan sonra hiçbir değeri kalmayan bir mesaj görüp bunu anlamsız ve çocukça bulduğum için, bu açıklamayı yapayım ki anlamsız ve çocukça bulunmayayım dedim...]
hasanyasin arkadaşımızın da çözümü farklı bir bakış açısı getirdi. teşşekkür ederiz.
uzun bir aradan sonra bu konuya yeniden dönmek istedim. ilgilenmek isteyen arkadaşlar için ve de rekürsif programlamaya ilgi duyan arkadaşlar için daha önce yazdığım ve şimdi düzenlediğim c ile yazılmış kodu eklemek istedim.
#include<stdio.h>
#include<conio.h>
void ters_yaz(int n)
{
printf("%d",n%10);
if(n<10) return;
else ters_yaz(n/10);
}
int main()
{
int n;
scanf("%d",&n);
ters_yaz(n);
getch();
return 0;
}
ilgilenen ve kendini geliştirmek isteyenler ise bu kodu anladıktan sonra bir sayının sayı değer olarak tersine eşitmi değilmi olduğunu ekrana yazdırabilirler.
örneğin;
123321 --> true
77 --> true
1002 --> false
kolay gelsin
quasimodo
29/03/2008, 12:36
Olumune recursive :P
#include <stdio.h>
int main()
{
int sayi = getchar();
if ((sayi != '\n') && (sayi != '\r')) {
main();
putchar (sayi);
}
}
myavuzselim
29/03/2008, 14:25
quasimodo, bu guzeldi :) Stack'in asli varken yapaylariyla ugrasmamak gerek (!).
[QUOTE=quasimodo;368960]Olumune recursive :P
katılıyorum
golgepapaz
31/03/2008, 04:35
STL diye birsey duymusmuydunuz.?
#include <string>
#include <iostream>
#include <algorithm>
#include <sstream>
int revnumber(int a)
{
std::stringstream ss;
ss << a;
std::string str=ss.str();
std::reverse(str.begin(),str.end());
ss.str(str);
int result=0 ;
ss>> result;
return result;
}
int main()
{
std::cout <<revnumber(3546);
}
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.