PDA

View Full Version : آموزش: تبدیل عدد به حروف فارسی



afshines
دوشنبه 19 دی 1390, 13:33 عصر
این یک تابعی است که مقدار عددی رو میگیره و به حروف فارسی بر میگردونه البته کمی شلوغ شده و فعلا تا هفت رقم بیشتر پشتیبانی نمیکنه بقیه اش رو بعدا کامل میکنم!!!

linux
دوشنبه 19 دی 1390, 15:25 عصر
این یک تابعی است که مقدار عددی رو میگیره و به حروف فارسی بر میگردونه البته کمی شلوغ شده و فعلا تا هفت رقم بیشتر پشتیبانی نمیکنه بقیه اش رو بعدا کامل میکنم!!!
واقعا که! وافعا فکر می کنید مغز بقیه هم با همین الگوریتم اعداد را می خواهد؟ 500 خط کد نوشتی؟ روش اندیشیدن را یاد بگیرید.

afshines
دوشنبه 19 دی 1390, 16:13 عصر
متشکر از جوابتون من منظوری برای یاد دادن این روش نداشتم خودم این کدهایی رو که نوشتم اصولی نمیدونم برای استفاده شما گذاشتم چون دیدم راحت جواب میده
تعداد خطها شم زیاد شده بخاطر اینکه توش از کپی پیست استفاده کردم :لبخندساده:

AmirAmiri
دوشنبه 19 دی 1390, 16:39 عصر
سلام.
منظور linux این بود که برنامت اصلا خوانا و اصولی نیست و به نظرم منظورشون بیشتر این بود که ==> قبل از ارسال تاپیک یه سرچ بزن ببین چند صد نفر قبلا این برنامه رو گذاشتن که الگوریتم های خیلی بهتری نسبت به برنامه شما استفاده کردن.
اگه میخوای یه برنامه تکراری رو ارسال کنی، برنامت باید حرفی برای گفتن داشته باشه. باید الگوریتم بهینه تر یا اصولی تر استفاده کرده باشه نه اینکه صرفا جواب بده و درست کار کنه اونم فقط تا 7 رقم.
خوده بنده قبلا همین برنامه رو با دقت 48 رفتم (24 رقم صحیح و 24 رقم اعشار) نوشته بودم که حتی اونم ممکنه اصولی نباشه.

به هر حال از نیت خیر شما متشکرم.

linux
دوشنبه 19 دی 1390, 16:55 عصر
متشکر از جوابتون من منظوری برای یاد دادن این روش نداشتم خودم این کدهایی رو که نوشتم اصولی نمیدونم برای استفاده شما گذاشتم چون دیدم راحت جواب میده
تعداد خطها شم زیاد شده بخاطر اینکه توش از کپی پیست استفاده کردم :لبخندساده:
هر وقت افتادی به کپی پیست کردن ، این نشانی یک اشتباه هست، روش اشتباه.
شما یک عدد را چطوری می خوانید؛ مثلا 2،345،678
اول از سمت چپ 3 رقم 3 رقم جدا می کنید، بعد از سمت راست می خوانید 2 میلیون و .... خوب اینجا هم همین کار را کنید، یک تابع اصلی داشته باشید که این 3 رقم را بخواند یعنی از 0 تا 999 و یک تابع دیگر که اعداد را 3 رقم 3 رقم جدا کرده و به این تابع بفرستند.

linux
دوشنبه 19 دی 1390, 18:05 عصر
کارهای تکراری باید کامپیوتر انجام بدهد نه ما
class Class2
{
string[] Adad_Yekan = { "صفر", "یک", "دو", "سه", "چهار", "پنج", "شش", "هفت", "هشت", "نه", "ده", "یازده", "دوازده", "سیزده", "چهارده", "پانزده", "شا نزده", "هفده", "هجده", "نوزده" };
string[] Adad_Dahgan = { "ده", "بیست", "سی", "چهل", "پنجاه", "شصت", "هفتاد", "هشتاد", "نود" };
string[] Adad_Sadgan = { "یک صد", "دویست", "سیصد", "چهارصد", "پانصد", "ششصد", "هفتصد", "هشتصد", "نهصد" };
string[] Pasvand = { "","هزار", "میلیون", "میلیارد" };
public string Spell(long digit)
{
if (digit < 20)
return Adad_Yekan[digit];
Stack<int> sd = new Stack<int>();
int i = 0;
while (digit > 0)
{
sd.Push((int)(digit % 1000));
digit /= 1000;
i++;
}
StringBuilder sb = new StringBuilder();
while (sd.Any())
{
int a = sd.Pop();
if (a > 0)
{
sb.Append(Spellit(a));
sb.Append(" ");
sb.Append(Pasvand[i - 1]);
}
if (sd.Any() && sd.Peek() > 0)
sb.Append(" و ");
i--;
}
return sb.ToString().Trim();
}

private string Spellit(int digit)
{
StringBuilder sb = new StringBuilder();
int a, b, c;
a = (byte)(digit % 10);
digit /= 10;
b = (byte)(digit % 10);
digit /= 10;
c = (byte)(digit % 10);
if (c != 0)
{
sb.Append(Adad_Sadgan[c - 1]);
}
if (b != 0 && a == 0)
{
if (c > 0)
sb.Append(" و ");
sb.Append(Adad_Dahgan[b - 1]);
}
if (b != 0 && a != 0)
{
if (c > 0)
sb.Append(" و ");
if (b * 10 + c <= 19)
{
sb.Append(Adad_Yekan[b * 10 + c]);
}
else
sb.Append(Adad_Dahgan[b - 1]);
}
if (a != 0)
{
if (c > 0 || b > 0)
sb.Append(" و ");
sb.Append(Adad_Yekan[a]);
}
return sb.ToString();
}
}

sayvan
دوشنبه 19 دی 1390, 18:27 عصر
من این برنامه ررو چند سال پیش نوشتم کداش مبتدیه تا 4 رقم تبدیل میکنه
برو به اینجا (http://barnamenevis.org/showthread.php?64210-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%DA%A9%D9%88%DA%86%DA%A9-%D9%88-%D9%85%D9%81%D9%8A%D8%AF-%D8%AF%D8%B1-%D8%B3%D9%8A-%D8%B4%D8%A7%D8%B1%D9%BE/page79)

linux
دوشنبه 19 دی 1390, 18:45 عصر
من این برنامه ررو چند سال پیش نوشتم کداش مبتدیه تا 4 رقم تبدیل میکنه
برو به اینجا (http://barnamenevis.org/showthread.php?64210-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%DA%A9%D9%88%DA%86%DA%A9-%D9%88-%D9%85%D9%81%D9%8A%D8%AF-%D8%AF%D8%B1-%D8%B3%D9%8A-%D8%B4%D8%A7%D8%B1%D9%BE/page79)
این کدی که اینجا نوشتم محدودیتی نداره! فقط باید حواست به ورودی تابع باشد که فعلا از نوع long هست یعنی تا 19 رفم و آرایه passvand که بعد از میلیارد و الی آخر را هم باید بنویسی