مشاهده نسخه کامل
: کمک درباره ی الگوریتم تبدیل عدد با رقم به حروف
سلام دوستان
من تو قسمتی از یه برنامه می خوام عددی رو که از کاربر گرفته شده به صورت حروفی چاپ کنم. خودم هر چی فکر می کنم نمی دونم چه جوری باید این کارو بکنم. می شه اگه چیزی به ذهنتون می رسه یه ذره راهنماییم کنید.( در ضمن تو ++c ):20:
hamidreza_buddy
14-07-2007, 15:30
3561 رو در نظ بگیرید
حالا از راست جلو برید. تو اولین گام دو تا رقم بردارید: 61 و بنویسید shasto yek
حالا به ترتیب جلو برید (توجه کنید باید شمارۀ رقم رو داشته باشید. مثلاً 5 توی مکان سومه پس صدگانه)
بنویسید: Punsad o
بعد برین دو رقم بعدی: 03 در هزارگان. میشه Se Hezaro
توجه کنید که باید سه رقم یه بار دو تایی بخونیم. چون مثلاً اگه 17 بود و ما یکی یکی می خوندیم اشتباه می شد.
13514
chardah
punsad o
sizdah hezar o
باید برای هر index رقم یک تابع جداگانه بنویسید (احتمال زیاد توی صورت مسئله قید شده که طول عدد محدوده)
سلام...
بزار حرفهای حمید رضا رو کامل تر کنم...
ابتدا عددت رو به رشته تبدیل کن (تا بتونی بفهمی هر عدد تو چه مرتبه ای هست)
بعد یه حداکثری واسه عددت تعیین کن... (مثلا بگو تا صدگان..)
بعد باید عدد حروفی رو برای هر مرتبه تعیین کنی ... مثلا
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
همین جوری با استفاده از enum دهگان و یکان رو تعریف کن...
بعد از سمت راست با استفاده از عدد مربوطه و مرتبه آن ، از مرتبه مورد نظر که با استفاده از 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 تا 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
سلام و تشکر دوباره
شرمنده من یه مقدار آی کیوم پایینه.
ببینید من این جوری نوشتم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
(البته بعضی رخط ها ربطی به حروفی کردن نداره.)
ولی خوب متوجه نشدم. مثلا عدد من هست 56789 و من به دست آوردم که 5 رقمه و حالا اونو تقسیم کردم بر 10 به توان 4 که شده 5 ولی این که الان چه جوری باید بفهمم باید بنویسم پنجاه و بعد O (از طریق l جاری که شما گفتید رو نفهمیدم.میشه این قسمتو یه مقدار بیشتر توضیح بدید.
سلام و خسته نباشید...
ببخشید که حرفام رو توضیحی مینویسم ، واسه همینه شما سخت متوجه شدید... آخه دوست داشتم کدش رو شما بنویسد ، حالا اونجایی که شما متوجه نشدید یا اصلاحیه ی کدی که نوشتید رو کد میکنم...
اولا آرایه ای از اشاره گرها یاید نوشته بشه بدین صورت :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
به همین صورت تا هر مرتبه ای که حداکثر شماست...
حالا پارت اصلی برنامه ...
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
بازم شما trace ش کن ، اگه سوال یا مشکلی بود بپرس...
موفق باشی
(خیلی سعی کردم ماژولار باشه... ولی تو پست بهم میریزه... ببخشید)
bad_boy_2007
17-07-2007, 11:31
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
البته این برنامه واسه 11 تا 19 مشکل داره که قبل Swich میتونی یه if بزاری ، خیلی راحت حل میشه... اگه نتونستی بگو بنویسم واست
hamidreza_buddy
18-07-2007, 13:20
البته توجه کنید که باید ارقام رو سه تا سه تا جدا کنید.
مثلاً عدد 15612 رو باید به دو قسمت 612 و 15 قسمت کنید.
توجه کنید که الگوریتمی که روی هر سه تایی اجرا میشه باید یکی باشه و فقط hezaro و milliono جلوش بیاد.
مثلا توی عدد 612612 میشه "shishsado davazdah hezaro sheshsado davazdah"
یا مثلاً 17017017 میشه "hifdah milliono hifdah hezaro hifdah"
پس کافیه که ارقام رو سه تا سه تا جدا کنی و اونا رو به یه تابع یکسان بدی و جلوشون با توجه به اینکه سه رقم اوله یا دوم یا ... hezaro یا milliono یا milliardo بذاری.
پس کاری که باید بکنی فقط نوشتن یه تابعه که سه رقم بگیره و عدد مورد نظر رو چاپ کنه.
البته توجه کن که سه رقم آخر اگه نیاز بود به تهش صفر اضافه کنی:
12345 باید به 345 و 012 تقسیم کنی و اول 345 رو بفرستی به تابع و بعد 012 رو و جلوش یه hezaro بذاری (چون سه رقم دومه)
البته توجه کنید که باید ارقام رو سه تا سه تا جدا کنید.
مثلاً عدد 15612 رو باید به دو قسمت 612 و 15 قسمت کنید.
توجه کنید که الگوریتمی که روی هر سه تایی اجرا میشه باید یکی باشه و فقط hezaro و milliono جلوش بیاد.
مثلا توی عدد 612612 میشه "shishsado davazdah hezaro sheshsado davazdah"
یا مثلاً 17017017 میشه "hifdah milliono hifdah hezaro hifdah"
پس کافیه که ارقام رو سه تا سه تا جدا کنی و اونا رو به یه تابع یکسان بدی و جلوشون با توجه به اینکه سه رقم اوله یا دوم یا ... hezaro یا milliono یا milliardo بذاری.
پس کاری که باید بکنی فقط نوشتن یه تابعه که سه رقم بگیره و عدد مورد نظر رو چاپ کنه.
البته توجه کن که سه رقم آخر اگه نیاز بود به تهش صفر اضافه کنی:
12345 باید به 345 و 012 تقسیم کنی و اول 345 رو بفرستی به تابع و بعد 012 رو و جلوش یه hezaro بذاری (چون سه رقم دومه)
تائید میشه... باید اون برنامه ی منو یه کم تغیر بدی... مرسی از توجه ت...
موفق باشی
دوستان خیلی ممنونم. من بدون استفاده از swich تونستم به نتیجه برسم.
این جوری:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
از کمک همتون خیلی ممنونم. البته دوست دارم اگه براتون زحمتی نیست با این روشی که گفتین برنامه رو برام بذارید تا اونم ببینم.
خیلی خیلی ممنونم.:11:
ALIREZA.NINJA
28-12-2016, 14:55
سلام.میخواستم اگه میشه سورس کاملشو بزارید لطفا:n16:
- - - Updated - - -
سلام.میخواستم اگه میشه سورس کاملشو بزارید لطفا:n16:
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.