آموزش برنامه نویسی در زبانهای رایج مثل :asp و asp.net و php و html و C و C++ و javascript و visualBasic و delphi و . . .

سه شنبه 16 شهريور 1389 برنامه نویسی

تبدیل اعداد به حروف در زبانهای برنامه نویسی گوناگون


تبدیل اعداد به حروف در فارسی

بسمه تعالی

 

می خواهیم تابعی بنویسیم که یک عدد بگیرد و آن را به حروف تدیل کند. ورودی و خروجی تابع از نوع string هستند.

در این مقاله، متن برنامه به زبان delphi آورده شده است. همچنین متن برنامه به زبان های c#, vb6, js نیز ضمیمه مقاله هستند. { نمونه کد مقالات در زیانهای برنامه نویسی گوناگون }

با استفاده از برنامه به زبان vb6 می توانید از این قابلیت در excel, access نیز استفاده کنید.

 

جدول زیر مثالی از نحوه عملکرد تابع می باشد:

 

عدد

به حروف

123

يكصد و بيست و سه

123000

يكصد و بيست و سه میلیون

123000000

يكصد و بيست و سه میلیارد

7210

هفت هزار و دويست و ده

1200005

يك ميليون و دويست هزار و پنج

1648195

يك ميليون و ششصد و چهل و هشت هزار و يكصد و نود و پنج

 

قبل از اینکه دست به کار کد نویسی بشویم باید مسئله را تحلیل کنیم و راه حل آن را دقیق بدست بیاوریم. وقتی که راه حل را یافتیم، می توانیم راه حل مورد نظرمان را به برنامه تبدیل کنیم!

 

با این ایده ساده کارمان را شروع کنیم که : نام هر عدد را می توانیم با استفاده از ترکیب تعدادی اجزای اصلی به دست آورد. با این ایده، باید اجزای اصلی را به دست آوریم. (منظور از اجزای اصلی قسمت های تکراری در اسامی اعداد است برای مثال : یک، دو، سه، بیست، پانصد، هزار، میلیون و ... می باشد).

 

علاوه بر اجزای اصلی که مبنای تشکیل اعداد می باشند، با کمی دقت در مثال بالا متوجه می شوید که ترکیب های سه رقمی اعداد، خود می توانند به عنوان اجزای تکرار شونده به کار روند. بر حسب اینکه ترکیب سه رقمی مورد نظر در چه جایگاهی قرار بگیرد، پسوند های هزار، میلیون، میلیارد و ... را می توان به آن اضافه کرد. مثلا ترکیب سه رقمی 123 را در نظر بگیرید. اگر 123 در سه رقم اول قرار بگیرند، آن را یکصد و بیست و سه می خوانیم و اگر در سه رقم دوم قرار بگیرند آن را یکصد و بیست و سه هزار می خوانیم و ...

 

مراحل زیر برای تبدیل اعداد به حروف می توان پیشنهاد کرد :

  1. تجزیه عدد مورد نظر به قسمت های سه رقمی
  2. ساختن نام هر یک از قسمت های سه رقمی (این مرحله ر باید بیشتر بررسی کنیم.)
  3. افزودن پسوند مناسب به قسمت های سه رقمی
  4. ترکیب قسمت های سه رقمی

 

برای ساختن نام قسمت های سه رقمی به روش زیر عمل می کنیم:

ابتدا باید تک تک رقم های عدد را به دست بیاوریم. می توانیم رقم ها را در یک آرایه ذخیره کنیم. با توجه به اینکه هر رقم با توجه به جایگاهی که در آن قرار دارد خوانده می شود باید جایگاه رقم به دست آمده را نیز در نظر داشته باشیم. . مثلا رقم 3 در عدد 123 چون در یکان قرار دارد به صورت "سه" خوانده می شود، اما در عدد 135 به صورت "سی" خوانده می شود و در عدد 398 به صورت "سیصد" خوانده می شود.

 

حالت های استثنا کارمان را سخت می کنند و باید همه آن ها را شناسایی کنیم. مثلا اعداد 10 تا 19 حالت استثنا هستند.

 

فهرست زیر شامل اجزای اصلی مورد نیاز می باشد :

 

صفر، یک، دو، سه، چهار، پنج، شش، هفت، هشت، نه

بیست، سی، چهل، پنجاه، شصت، هفتاد، هشتاد، نود

ده، یازده، دوازده، سیزده، چهارده، پانزده، شانزده، هفده، هجده، نوزده

یکصد، دویست، سیصد، چهارصد، پانصد، ششصد، هفتصد، هشتصد، نهصد

هزار، میلیون، میلیارد، تریلیون

 

البته آرایه هایی که در برنامه تعریف شده اند، اعضای دیگری نیز وجود دارند که برای پوشش دادن حالت های استثنا در نظر گرفته شده اند.

 

متن برنامه دلفی به همراه توضیحات:

 

 

const

yekan : array[0..9] of string = ('صفر','يک','دو','سه','چهار','پنج','شش','هفت','هشت','نه');

dahgan : array[0..9] of string = ('','','بيست','سي','چهل','پنجاه','شصت','هفتاد','هشتاد','نود');

dahyek : array[10..19] of string = ('ده','يازده','دوازده','سيزده','چهارده','پانزده','شانزده','هفده','هجده','نوزده');

sadgan : array[0..9] of string = ('','يکصد','دويست','سيصد','چهارصد','پانصد','ششصد','هفتصد','هشتصد','نهصد');

base : array[0..4] of string = ('','هزار','ميليون','ميليارد','تريليون');

 

// تابع تبديل عدد به حروف

function num2str(snum : string) : string;

// تابع تبدیل عدد سه رقمی به حروف

function getnum3(num3 : integer) : string;

var

s : string;

d1, d2, d3, d12 : integer;

begin

d12 := num3 mod 100; // دو رقم اول

d3 := num3 div 100; // صدگان

if d3 <> 0 then

s := sadgan[d3] + ' و ';

// نام گذاري اعداد 10 تا 19 در بين

// اعداد دو رقمي استثنا است

if (d12 >= 10) and (d12 <= 19) then

begin

s := s + dahyek[d12];

end

else

begin

d2 := d12 div 10; // دهگان

if d2 <> 0 then

s := s + dahgan[d2] + ' و ';

d1 := d12 mod 10; // يکان

if d1 <> 0 then

s := s + yekan[d1] + ' و ';

// حذف حرف <و> اضافي

s := copy(s, 1, length(s) - 3);

end;

getnum3 := s;

end;

 

var

L, i, b : integer;

stotal : string;

begin

// اگر عدد صفر بود، يکراست نتيجه را برگردان

if snum = '0' then

result := yekan[0]

else

begin

// براي اينکه بتوان عدد را به قسمت هاي سه رقمي تقسيم کرد

// به سمت چپ عدد، به اندازه کافي صفر مي افزاييم

for i := Length(snum) to ((Length(snum) - 1) div 3 + 1) * 3 - 1 do

snum := '0' + snum;

 

L := Length(snum) div 3 - 1; // تعداد قسمت هاي سه رقمي منهاي يک

 

// سه رقم سه رقم حلقه را تکرار کن

// از چپ به راست

for i := 0 to L do

begin

// به دست آوردن سه رقم مورد نظر

b := strtoint(copy(snum ,i * 3 + 1, 3));

// اگر سه رقم به دست آمده صفر باشد، در نام عدد تاثيري ندارد

// نام قسمت سه رقمي را بدست مي آوريمgetnum3 با استفاده از تابع

// پسوند را به آن اضافه مي کنيمbase با استفاده از آرايه

if b <> 0 then

stotal := stotal + getnum3(b) + ' ' + base[L - i] + ' و ';

end;

// حذف حرف <و> اضافي

stotal := copy(stotal, 1, length(stotal) - 3);

result := stotal;

end;

end;

 

{ نمونه کد مقالات در زیانهای برنامه نویسی گوناگون }

 

ehsan.shahshahani@gmail.com

 

نوشته شده توسط :احسان شهشهانیتعداد دفعات خوانده شدن مقاله : 18274


نسخه ی قابل چاپ     ذخيره         ارسال برای دوستان       مقاله های مربوط به اين گروه



تمام مطالب اين سايت باذکر ماخذ برای عموم آزاد است