سلام دوستان
من تو قسمتی از یه برنامه می خوام عددی رو که از کاربر گرفته شده به صورت حروفی چاپ کنم. خودم هر چی فکر می کنم نمی دونم چه جوری باید این کارو بکنم. می شه اگه چیزی به ذهنتون می رسه یه ذره راهنماییم کنید.( در ضمن تو ++c ):20:
Printable View
سلام دوستان
من تو قسمتی از یه برنامه می خوام عددی رو که از کاربر گرفته شده به صورت حروفی چاپ کنم. خودم هر چی فکر می کنم نمی دونم چه جوری باید این کارو بکنم. می شه اگه چیزی به ذهنتون می رسه یه ذره راهنماییم کنید.( در ضمن تو ++c ):20:
3561 رو در نظ بگیرید
حالا از راست جلو برید. تو اولین گام دو تا رقم بردارید: 61 و بنویسید shasto yek
حالا به ترتیب جلو برید (توجه کنید باید شمارۀ رقم رو داشته باشید. مثلاً 5 توی مکان سومه پس صدگانه)
بنویسید: Punsad o
بعد برین دو رقم بعدی: 03 در هزارگان. میشه Se Hezaro
توجه کنید که باید سه رقم یه بار دو تایی بخونیم. چون مثلاً اگه 17 بود و ما یکی یکی می خوندیم اشتباه می شد.
13514
chardah
punsad o
sizdah hezar o
باید برای هر index رقم یک تابع جداگانه بنویسید (احتمال زیاد توی صورت مسئله قید شده که طول عدد محدوده)
سلام...
بزار حرفهای حمید رضا رو کامل تر کنم...
ابتدا عددت رو به رشته تبدیل کن (تا بتونی بفهمی هر عدد تو چه مرتبه ای هست)
بعد یه حداکثری واسه عددت تعیین کن... (مثلا بگو تا صدگان..)
بعد باید عدد حروفی رو برای هر مرتبه تعیین کنی ... مثلا
همین جوری با استفاده از enum دهگان و یکان رو تعریف کن...کد:
enum SADGAN { SAD , DEVIST , SISAD , CHAHARSAD , ...etc }; l
بعد از سمت راست با استفاده از عدد مربوطه و مرتبه آن ، از مرتبه مورد نظر که با استفاده از enum تعریف شد عدد حروفی مربوطه رو بنویس...
تو یه حلقه این کار رو بکن و آخر حلقه یه 'O' یعنی حرف 'و' بزار اگر به یکان نرسیدی... اگه یکان بود به اون نیازی نیست...
بازم اگه تو کدش مشکل داشتی بگو..
موفق باشی
خیلی ممنونم از راهنماییاتون،
ببیید من باید بزرگ ترین عددم 8 رقم باشه و عدد رو از کاربر بگیرم و بعد حروفیش کنم. با توجه به توضیحاتتون باید اول یه آرایه داشته باشم که اعداد 1 تا 9 رو حروفی توش ذخیره کنم و بعد یه آرایه که اعداد 11 تا 19 رو و بعد یه آرایه که اعداد 10 تا 90 رو و یه آرایه که اعداد 100 تا 900 رو و به همین ترتیب.
بعد مثلا اگه کاربر وارد کرد 9876 چون عدد 4 رقمیه اول باید تقسیمش کنم به 1000 که خارج قسمت بشه 9 و بنویسم 9 به همرا یه دونه هزار و یه دونه O و بعد باقیمانده رو به 100 تقسیم کنم که بشه 8 و به همراه یه دونه صد و یه دونه O بنویسمش و به همین ترتیب.
ولی اولا عدد که همیشه چهار رقمی نیست که من اول به 1000 و بعد به 100 و ... تقسیمش کنم. ثانیا هم وقتی حاصل تقسیم اول شد 9 من چه حوری باید بفهمم که الان باید عضو نهم از آرایه ای که اعداد تک رقمی توش ذخیره شدن رو باید استفاده کنم؟ و یا ترتیب گذاشتن این هزار و صد و اینا به صورت حروفی رو باید از کجا بفهمم؟
بازم ممنونم که کمکم می کنید.:11:
سلام...نقل قول:
خواهش میکنم...
گفتی بزرگترین عددت 8 رقمیه پس در نتیجه کوچکتر از اون هم می تونه باشه، برای اینکه بفهمی عددت چند رقمیه باید
از این فرمول استفاده کنی >> 1+[ Log l n l ]
بعد که فهمیدی عددت چند رقمیه اون رو تقسیم بر ( 1- تعداد ارقام ) ^ 10 =L میکنی رقم اول از سمت راست رو بدست میاری و با توجه به اینکه الان رو کدوم مرتبه داری کار میکنی ( از طریق L جاری ) و رقم بدست اومده (از طریق تقسیم عددت بر L ) به آرایه ای از رشته ها که اعداد اون مرتبه رو ذخیره کردی (یا با استفاده از enum ) حروف عدد مربوطه رو مینویسی ... بعد یه "O" میزاری به شرط اینکه L=!1 باشه... بعد L=L/10 ... کلا این کارو تو یه حلقه میکنی...
در ضمن همون طور که گفتم شما باید عدد حروفی هر مرتبه رو ذخیره کنی یا با استفاده از enum یا با استفاده از آرایه ای از رشته ها...
به این صورت که... برای یکان (از یک تا نه) برای دهگان ( ده ، بیست ، سی ،... ،نود) تا مرتبه 8
سلام و تشکر دوباره
شرمنده من یه مقدار آی کیوم پایینه.
ببینید من این جوری نوشتم:(البته بعضی رخط ها ربطی به حروفی کردن نداره.)کد:int *str1;
//int size=9;
str1=new int[9];
int str2[9]={'yek','doo','se','chahar','panj','shesh','haft','hasht','noh'};
int str3[9]={'dah','bist','sii','chehel','panjah','shast','haftad','hashtad','navad'};
//int str4[9]={'sad','divist','sisad','chaharsad','pansad','sheshsad','haftsad','hashtsad','nohsad'};
for(int i=0;i<6;i++)
{
cout<<"\nenter youre check number:\n";
cin>> *str1;
int l=(log(fabs(str1))-1);
cout<<"\n";
cout.setf(ios::right,ios::adjustfield);
// cout.fill('*');
cout<<setw(9)<<setfill('*')<<str1[i];
int k=10^(l-1);
cout<<str2[k]<<"hezar"<<"o"<
}
ولی خوب متوجه نشدم. مثلا عدد من هست 56789 و من به دست آوردم که 5 رقمه و حالا اونو تقسیم کردم بر 10 به توان 4 که شده 5 ولی این که الان چه جوری باید بفهمم باید بنویسم پنجاه و بعد O (از طریق l جاری که شما گفتید رو نفهمیدم.میشه این قسمتو یه مقدار بیشتر توضیح بدید.
سلام و خسته نباشید...
ببخشید که حرفام رو توضیحی مینویسم ، واسه همینه شما سخت متوجه شدید... آخه دوست داشتم کدش رو شما بنویسد ، حالا اونجایی که شما متوجه نشدید یا اصلاحیه ی کدی که نوشتید رو کد میکنم...
اولا آرایه ای از اشاره گرها یاید نوشته بشه بدین صورت :
به همین صورت تا هر مرتبه ای که حداکثر شماست...کد:
const char *YEKAN[9] = { "YEK", "DO", "SE",..., "NOH" }; l
حالا پارت اصلی برنامه ...
بازم شما trace ش کن ، اگه سوال یا مشکلی بود بپرس...کد:
int n; // Your number
cout << " please enter a number\n"; // prompt
cin >> n; // read an integer
L = floor( log10( abs(n))) + 1 ; // This is length of number
K = pow(10,L-1); // initialize K
int figure; l
while ( K=! 0 ) // Condition
{
figure = n / K; // first figure of number
n %= K; // for calculate next figure
if (figure =!0) // to omit ziro
{
swich ( K ) // to find cardinality
case 1 :
cout << YEKAN [figure-1]; l
case 10 :
cout << DAHGAN [figure-1] <<" o "; l
case 100 :
cout << SADGAN [figure-1] <<" o "; l
case 1000 :
.
.
.
.
.
}
K = K / 10; l
}
موفق باشی
(خیلی سعی کردم ماژولار باشه... ولی تو پست بهم میریزه... ببخشید)
کد:http://forum.p30world.com/showthread.php?t=120723
البته این برنامه واسه 11 تا 19 مشکل داره که قبل Swich میتونی یه if بزاری ، خیلی راحت حل میشه... اگه نتونستی بگو بنویسم واست