PDA

View Full Version : تابع تبدیل عدد به حروف



mehrnoosh
دوشنبه 27 بهمن 1382, 03:03 صبح
سلام ..خسته نباشید..
میخواستم خواهش کنم که اگه کسی بلده یا sourc ای درباره تبدیل عدد به حروف داره اینجا قرار بده..چون خیلیها بهش نیاز دارن
خواهش میکنم نا امیدم نکنید :oops: :oops:
راستی من source vb این تابع رو چند نمونه دارم..اما c شو اگه داشتین..سپاسگذار میشم :oops:

Anti_Evil
سه شنبه 28 بهمن 1382, 00:38 صبح
سلام مهرنوش عزیز، به فوروم پدرخوانده خوش آمدید :)

خوب برای تبدیل متغیر های مختلف به یکدیگر زبان C ابزارهای خوبی در نظر گرفته ;)
که دمه دست ترینش تابع atoi هستش.

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


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{

char strNumber[3] = "20";

int nNumber = atoi( strNumber );

printf( "I've %d years old ;)", nNumber );

getch();

return 0;
}

همونطور که در کد بالا نیز مشاهده کردید، توجه داشته باشید که هدر stdlib.h را نیز به برنامه تان اضافه کنید.

موفق و پیروز باشید،
هادی

arshia_
پنج شنبه 07 اسفند 1382, 23:44 عصر
سلام
من گمان می کنم منظور دوست ما این بوده که چطوری می شه اعداد رو به صورت جروف در صفجه چاپ کرد ...
به عنوان مثال 1356 ----------> یک هزار و سیصدو پنجاه و شش

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

Anti_Evil
جمعه 08 اسفند 1382, 00:04 صبح
بله، همینطور میباشد ... من منظورشونو اشتباه برداشت کردم.
البته خود مهرنوش جان به صورت پیغام خصوصی مسئله را به من گوشزد کردند.
حتما در روزهای آینده سورس کامل داده میشود ...

البته من در آخر باید به یک نکته اشاره کنم و آن اینکه لطفا دوستان خودشان روی اینجور مسائل کار کنند ولی از آنجایی که احساس میکنم مسئله عنوان شده میتواند در بسیاری از برنامه ها راه گشا باشد لذا برای حل مسئله اقدام خواهم کرد.

با تشکر،
هادی

arshia_
یک شنبه 10 اسفند 1382, 17:18 عصر
اگر فرصت کد نویسی رو نداشتید می تونید روی کمک من حساب کنید.....
پیغام بدید .

Anti_Evil
دوشنبه 18 اسفند 1382, 15:44 عصر
بالاخره انجام شد :)
به این توپیک مراجعه کنید:

http://www.barnamenevis.org/forum/viewtopic.php?t=7892

موفق باشید.

armin390
دوشنبه 05 مرداد 1383, 02:08 صبح
ساده ترین راه استفاده از Sprintfاست
<include <stdio.h#
}()main
;int a=390
;[char b[3
;(sprintf (b,"%d",a
}
و بعد از اون هم به هر عضو آرایه که یک حرف دسترسی داری .

amanj99
سه شنبه 18 اردیبهشت 1386, 00:23 صبح
دوستان میتونید بیشتر توضیح بدید؟
اگه لطف کنید کد رو اینجا بگذارید
ممنون از لطفتون

RED-C0DE
چهارشنبه 19 اردیبهشت 1386, 16:46 عصر
بالاخره انجام شد :)
به این توپیک مراجعه کنید:

http://www.barnamenevis.org/forum/viewtopic.php?t=7892

موفق باشید.

نمی دونم چرا این لینک رو برای من باز نمی کنه؟!؟!؟! برای بقیه دوستان هم همینطوره؟

RED-C0DE
پنج شنبه 20 اردیبهشت 1386, 03:18 صبح
این برنامه که نوشتمش تا 9،999،999 رو نشون می ده ...
دیگه توضحات برنامه رو ننوشتم، اگه سوالی داشتید بپرسید.


#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

string Convert(string);
string Func_Conv(char , int , size_t );
string Dig_To_Yekan (char );
string Dig_To_Dahgan (char );
string Dig_To_Sadgan (char );
string Dig_To_YazdahDavazdahEtc(char ch);

string revNum ;
bool ArrYekanDahganEtc[4]; // yekan,dahgan,sadgan - yHezar,dHezar,sHezar - yMilion,dMilion,sMilion;
// 1 - 2 - 3

//----------------------------
//7,530,462 = Haft Milion o Pansad o Si Hezar o Char Sad o Shast o Do
int main()
{
string num;
while(cin >> num)
{
string ans = Convert(num);
cout << num << "\t= " << ans << endl;
}

return 0;
}
//---------------------------


string Func_Conv(char ch, int base , size_t szNum ) //flag baraye inke masalan 11 , 12 , 13 ,14 ... besaze
{
string retVal="";

switch(base)
{
// xX
case 1:
if(szNum>1 && revNum[1]=='1')
break;

retVal= Dig_To_Yekan(ch);
break;


// xXx
case 2:
if(ch=='0')
break;

if(ch=='1')
retVal = Dig_To_YazdahDavazdahEtc(revNum[0]);
else
retVal = Dig_To_Dahgan(ch);

break;


// x,Xxx
case 3:
if(ch=='0')
break;
retVal = Dig_To_Sadgan(ch);
break;


// xX,xxx
case 4:
if(ch=='0' || szNum>4 && revNum[4]=='1')
break;

ArrYekanDahganEtc[2]=1;

retVal = Dig_To_Yekan(ch);
retVal+= "Hezar";
break;


// xXx,xxx
case 5:
if(ch=='0')
break;

if(ch=='1')
retVal = Dig_To_YazdahDavazdahEtc(revNum[3]);
else
retVal = Dig_To_Dahgan(ch);

if(!ArrYekanDahganEtc[2])
{
retVal+= "Hezar";
ArrYekanDahganEtc[2]=1;
}
break;

// x,Xxx,xxx
case 6:
if(ch=='0')
break;
retVal = Dig_To_Sadgan(ch);
if(!ArrYekanDahganEtc[2])
{
retVal+= "Hezar";
ArrYekanDahganEtc[2]=0;
}
break;

// xX,xxx,xxx
case 7:
if(ch=='0')
break;

ArrYekanDahganEtc[3]=1;
retVal = Dig_To_Yekan(ch);
retVal += "Milion";
break;

}
return retVal;
}

string Dig_To_Yekan(char ch )
{
string retVal = "";

if(ch=='1')
retVal = "Yek";
else if(ch=='2')
retVal = "Do";
else if(ch=='3')
retVal = "Se";
else if(ch=='4')
retVal = "Char";
else if(ch=='5')
retVal = "Panj";
else if(ch=='6')
retVal = "Shesh";
else if(ch=='7')
retVal = "Haft";
else if(ch=='8')
retVal = "Hasht";
else if(ch=='9')
retVal = "Noh";

return retVal;
}


string Dig_To_Dahgan(char ch )
{
string retVal = "";

if(ch=='2')
retVal = "Bist";
else if(ch=='3')
retVal = "Si";
else if(ch=='4')
retVal = "Chehel";
else if(ch=='5')
retVal = "Panjah";
else if(ch=='6')
retVal = "Shast";
else if(ch=='7')
retVal = "Haftad";
else if(ch=='8')
retVal = "Hashtad";
else if(ch=='9')
retVal = "Navad";

return retVal;
}
string Dig_To_Sadgan(char ch )
{
string retVal = "";

if(ch=='1')
retVal = "YekSad";
else if(ch=='2')
retVal = "Devist";
else if(ch=='3')
retVal = "SiSad";
else if(ch=='4')
retVal = "CharSad";
else if(ch=='5')
retVal = "PanSad";
else if(ch=='6')
retVal = "SheshSad";
else if(ch=='7')
retVal = "HaftSad";
else if(ch=='8')
retVal = "HashtSad";
else if(ch=='9')
retVal = "NohSad";

return retVal;
}



string Dig_To_YazdahDavazdahEtc(char digYekan)
{
string retVal= "";

if(digYekan=='0')
retVal="Dah";
else if(digYekan=='1')
retVal= "Yazdah";
else if(digYekan=='2')
retVal="Davazdah";
else if(digYekan=='3')
retVal="Sizdah";
else if(digYekan=='4')
retVal="Chardah";
else if(digYekan=='5')
retVal="Panzdah";
else if(digYekan=='6')
retVal="Shanzdah";
else if(digYekan=='7')
retVal="Hefdah";
else if(digYekan=='8')
retVal="Hejdah";
else if(digYekan=='9')
retVal="Noozdah";

return retVal;
}

string Convert(string num)
{
string ans="" , tmp="";
bool flag=false , blnAdadDare=false;
ArrYekanDahganEtc[0] = ArrYekanDahganEtc[1]= ArrYekanDahganEtc[2] =ArrYekanDahganEtc[3] = false;

revNum = num;
reverse(revNum.begin(), revNum.end());

size_t szNum = num.length();
for(int i= szNum -1; i>=0; i--)
{
tmp = Func_Conv(num[i] , szNum - i, szNum ); // (digit , yekan||dahgah||sadgan|... ,szNum)

if(tmp!="" && blnAdadDare)
ans = tmp + " O " + ans;
else
ans = tmp + ans;

if(ans.length()>=1)
blnAdadDare=true; //adad rikhte shode toosh
}

return ans;
}

RED-C0DE
جمعه 21 اردیبهشت 1386, 15:36 عصر
این یکی بیشتر می شه باهاش کار کرد و محدودیت تعداد رقم رو نداره (قبلی تا 9 رقم) - البته باید توی آرایه ArrBig براش تعریف کنید :


#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

string Convert(string); //Convert Number to Equal String
string Func_Conv(char , int , size_t);
string Dig_To_Yekan (char );
string Dig_To_Dahgan (char );
string Dig_To_Sadgan (char );
string Dig_To_YazdahDavazdahEtc(char );

string revNum ;
bool ArrYekanDahganEtc[3]; // Yekan,Dahgan,Sadgan
string ArrBig[]={"","Hezar","Million","Milliard","Billion"}; //har chi inja ezafe konid javab mide

//----------------------------
//911007530462 = NohSad O YazdahMilliard O HaftMillion O PanSad O SiHezar O CharSad O Shast O Do
int main()
{
string num;
while(cin >> num)
{
string ans = Convert(num);
cout << num << "\t= " << ans << endl;
}

return 0;
}
//---------------------------


string Func_Conv(char ch, int base , size_t szNum )
{
string retVal="";

switch(base%3)
{
case 0: //x,Xxx , x,Xxx,xxx , x,Xxx,xxx,xxx
if(ch=='0')
break;
retVal = Dig_To_Sadgan(ch);
if(!ArrYekanDahganEtc[(base-1)/3])
retVal += ArrBig[(base-1)/3]; // eg: retVal+= "Hezar";
break;


case 1: //xX , xX,xxx , xX,xxx,xxx
if(ch=='0' || szNum>base && revNum[base]=='1')
break;
ArrYekanDahganEtc[(base-1)/3]=1;
retVal = Dig_To_Yekan(ch);
retVal += ArrBig[(base-1)/3];
break;


case 2://xXx , xXx,xxx , xXx,xxx,xxx
if(ch=='0')
break;
if(ch=='1')
retVal = Dig_To_YazdahDavazdahEtc(revNum[base-2]);
else
retVal = Dig_To_Dahgan(ch);

if(!ArrYekanDahganEtc[(base-1)/3])
{
retVal += ArrBig[(base-1)/3];
ArrYekanDahganEtc[(base-1)/3]=1;
}
}

return retVal;
}

string Dig_To_Yekan(char ch )
{
string retVal = "";

if(ch=='1')
retVal = "Yek";
else if(ch=='2')
retVal = "Do";
else if(ch=='3')
retVal = "Se";
else if(ch=='4')
retVal = "Char";
else if(ch=='5')
retVal = "Panj";
else if(ch=='6')
retVal = "Shesh";
else if(ch=='7')
retVal = "Haft";
else if(ch=='8')
retVal = "Hasht";
else if(ch=='9')
retVal = "Noh";

return retVal;
}


string Dig_To_Dahgan(char ch )
{
string retVal = "";

if(ch=='1')
retVal = "";
else if(ch=='2')
retVal = "Bist";
else if(ch=='3')
retVal = "Si";
else if(ch=='4')
retVal = "Chehel";
else if(ch=='5')
retVal = "Panjah";
else if(ch=='6')
retVal = "Shast";
else if(ch=='7')
retVal = "Haftad";
else if(ch=='8')
retVal = "Hashtad";
else if(ch=='9')
retVal = "Navad";

return retVal;
}
string Dig_To_Sadgan(char ch )
{
string retVal = "";

if(ch=='1')
retVal = "YekSad";
else if(ch=='2')
retVal = "Devist";
else if(ch=='3')
retVal = "SiSad";
else if(ch=='4')
retVal = "CharSad";
else if(ch=='5')
retVal = "PanSad";
else if(ch=='6')
retVal = "SheshSad";
else if(ch=='7')
retVal = "HaftSad";
else if(ch=='8')
retVal = "HashtSad";
else if(ch=='9')
retVal = "NohSad";

return retVal;
}

string Dig_To_YazdahDavazdahEtc(char digYekan)
{
string retVal= "";

if(digYekan=='0')
retVal="Dah";
else if(digYekan=='1')
retVal= "Yazdah";
else if(digYekan=='2')
retVal="Davazdah";
else if(digYekan=='3')
retVal="Sizdah";
else if(digYekan=='4')
retVal="Chardah";
else if(digYekan=='5')
retVal="Panzdah";
else if(digYekan=='6')
retVal="Shanzdah";
else if(digYekan=='7')
retVal="Hefdah";
else if(digYekan=='8')
retVal="Hejdah";
else if(digYekan=='9')
retVal="Noozdah";

return retVal;
}

string Convert(string num)
{
string ans="" , tmp="";
bool blnAdadDare=false;
ArrYekanDahganEtc[0] = ArrYekanDahganEtc[1]= ArrYekanDahganEtc[2] =ArrYekanDahganEtc[3] = false;

revNum = num;
reverse(revNum.begin(), revNum.end());

size_t szNum = num.length();
for(int i= szNum -1; i>=0; i--)
{
tmp = Func_Conv(num[i] , szNum - i, szNum ); // (digit , yekan||dahgan||sadgan|... ,Size of Num)

if(tmp!="" && blnAdadDare)
ans = tmp + " O " + ans;
else
ans = tmp + ans;

if(ans.length()>=1)
blnAdadDare=true; //adad rikhte shode toosh
}

return ans;
}

#Elahe#
جمعه 04 دی 1388, 21:00 عصر
RED-C0DE (http://barnamenevis.org/forum/member.php?u=17039) عزیز اولا دستت درد نکنه بابت این کدها .
ولی هر دو کدی که نوشتید عدد ورودی رو اول بر عکس میکنه بعد تبدیل میکنه به حروف
یعنی به جای اینکه از چپ به راست بخونه عدد رو ، از راست به چپ میخونه عدد رو .