PDA

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



paradise_human
پنج شنبه 23 اردیبهشت 1389, 00:49 صبح
سلام دوستان.
این برنامه ی تبدیل اعداد به حروفه ...
میتونید بهم کمک کنید تا مشکلشو رفع کنم ؟
از لحاظ سینتکسی مشکلی نداره و تقریبا کامل هم هست ولی نمیدونم چرا خروجی مد نظرمو نمیده ؟

#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
using namespace std;
void main();
//==================================
class Reading
{private:
int my_number;
int teliardgan;
int sadgane_teliardgan;
int dahgane_teliardgan;
int yekane_teliardgan;
int meliardgan;
int sadgane_meliardgan;
int dahgane_meliardgan;
int yekane_meliardgan;
int melyongan;
int sadgane_melyongan;
int dahgane_melyongan;
int yekane_melyongan;
int hezargan;
int sadgane_hezargan;
int dahgane_hezargan;
int yekane_hezargan;
int sadgan;
int dahgan;
int yekan ;
public:
Reading(int);
void print_yek_ta_noh(int);
void print_yazadah_ta_nozdah(int);
void print_bist_ta_navad(int);
friend void main();
};
//=============================================
Reading::Reading(int b)
{
my_number=b;
teliardgan=int(my_number/1000000000000);
sadgane_teliardgan=int(teliardgan/100);
dahgane_teliardgan=int(teliardgan-(sadgane_teliardgan*100)/10);
yekane_teliardgan=int(teliardgan-(sadgane_teliardgan*100+dahgane_teliardgan*10));
meliardgan=int(my_number-(teliardgan*1000000000000)/1000000000);
sadgane_meliardgan=int(meliardgan/100);
dahgane_meliardgan=int(meliardgan-(sadgane_meliardgan*100)/10);
yekane_meliardgan=int(meliardgan-(sadgane_meliardgan*100+dahgane_meliardgan*10));
melyongan=int(my_number-(teliardgan*1000000000000+meliardgan*1000000000)/1000000);
sadgane_melyongan=int(melyongan/100);
dahgane_melyongan=int(melyongan-(sadgane_melyongan*100)/10);
yekane_melyongan=int(melyongan-(sadgane_melyongan*100+dahgane_melyongan*10));
hezargan=int(my_number-(teliardgan*1000000000000+meliardgan*1000000000+me lyongan*1000000)/1000);
sadgane_hezargan=int(hezargan/100);
dahgane_hezargan=int(hezargan-(sadgane_hezargan*100)/10);
yekane_hezargan=int(hezargan-(sadgane_hezargan*100+dahgane_hezargan*10));
sadgan =int ( (my_number-(teliardgan*1000000000000+meliardgan*1000000000+me lyongan*1000000+hezargan*1000) )/100 ) ;
dahgan =int ( (my_number-(teliardgan*1000000000000+meliardgan*1000000000+me lyongan*1000000+hezargan*1000+sadgan*100) )/10 ) ;
yekan = int ( (my_number-(teliardgan*1000000000000+meliardgan*1000000000+me lyongan*1000000+hezargan*1000+sadgan*100+dahgan*10 )));
}
//================================================== ================================================== =================================
void Reading::print_yek_ta_noh(int a)
{
switch(a)
{
case 1:cout<<"yek";break;
case 2:cout<<"du";break;
case 3:cout<<"se";break;
case 4:cout<<"chahar";break;
case 5:cout<<"pang";break;
case 6:cout<<"shish";break;
case 7:cout<<"haft";break;
case 8:cout<<"hasht";break;
case 9:cout<<"noh";break;
default:cout<<"";
}
}
//================================================== ===
void Reading::print_yazadah_ta_nozdah(int a)
{
switch(a)
{
case 10:cout<<"dah";break;
case 11:cout<<"yazda";break;
case 12:cout<<"davazdah";break;
case 13:cout<<"sizdah";break;
case 14:cout<<"chahardah";break;
case 15:cout<<"panzdah";break;
case 16:cout<<"shanzadah";break;
case 17:cout<<"hefdah";break;
case 18:cout<<"hejdah";break;
case 19:cout<<"nonzadah";break;
default:cout<<"";
}
}
//================================================== =
void Reading::print_bist_ta_navad(int a)
{
switch(a)
{
case 20:cout<<"bist ";break;
case 30:cout<<"si ";break;
case 40:cout<<"chehel ";break;
case 50:cout<<"pangah ";break;
case 60:cout<<"shast ";break;
case 70:cout<<"haftad ";break;
case 80:cout<<"hastad ";break;
case 90:cout<<"navad ";break;
default:cout<<"";
}
}
//================================================== ==
void main()
{
int b;
cin>>b;
Reading x(b);
x.print_yek_ta_noh(x.sadgane_teliardgan);
if (x.sadgane_teliardgan>0)
cout<<" sad ";
if (x.dahgane_teliardgan>1)
{cout<<"o";
x.print_bist_ta_navad ( (x.dahgane_teliardgan*10) ) ;
}
if (x.dahgane_teliardgan==1)
{cout<<"o";
x.print_yazadah_ta_nozdah( (x.dahgane_teliardgan*10+x.yekane_teliardgan) ) ;
}
if (x.dahgane_teliardgan!=1)
{cout<<"o";
x.print_yek_ta_noh(x.yekane_teliardgan);
}
if (x.teliardgan>0)
{cout<<" teliard ";
cout<<"o";
}
//=========================================
x.print_yek_ta_noh(x.sadgane_meliardgan);
if (x.sadgane_meliardgan>0)
cout<<" sad ";
if (x.dahgane_meliardgan>1)
{cout<<"o";
x.print_bist_ta_navad ( (x.dahgane_meliardgan*10) ) ;
}
if (x.dahgane_meliardgan==1)
{cout<<"o";
x.print_yazadah_ta_nozdah( (x.dahgane_meliardgan*10+x.yekane_meliardgan) ) ;
}
if (x.dahgane_meliardgan!=1)
{cout<<"o";
x.print_yek_ta_noh(x.yekane_meliardgan);
}
if (x.meliardgan>0)
{cout<<" meliard ";
cout<<"o";
}
//===============================================
x.print_yek_ta_noh(x.sadgane_melyongan);
if (x.sadgane_melyongan>0)
cout<<" sad ";
if (x.dahgane_melyongan>1)
{cout<<"o";
x.print_bist_ta_navad ( (x.dahgane_melyongan*10) ) ;
}
if (x.dahgane_melyongan==1)
{cout<<"o";
x.print_yazadah_ta_nozdah( (x.dahgane_melyongan*10+x.yekane_melyongan) ) ;
}
if (x.dahgane_melyongan!=1)
{cout<<"o";
x.print_yek_ta_noh(x.yekane_melyongan);
}
if (x.melyongan>0)
{cout<<" melyon ";
cout<<"o";
}
//=================================================
x.print_yek_ta_noh(x.sadgane_hezargan);
if (x.sadgane_hezargan>0)
cout<<" sad ";
if (x.dahgane_hezargan>1)
{cout<<"o";
x.print_bist_ta_navad ( (x.dahgane_hezargan*10) ) ;
}
if (x.dahgane_hezargan==1)
{cout<<"o";
x.print_yazadah_ta_nozdah( (x.dahgane_hezargan*10+x.yekane_hezargan) ) ;
}
if (x.dahgane_hezargan!=1)
{cout<<"o";
x.print_yek_ta_noh(x.yekane_hezargan);
}
if (x.hezargan>0)
{cout<<" hezar ";
cout<<"o";
}
//=================================================
x.print_yek_ta_noh(x.sadgan);
if (x.sadgan>0)
cout<<" sad ";
if (x.dahgan>1)
{cout<<"o";
x.print_bist_ta_navad ( (x.dahgan*10) ) ;
}
if (x.dahgan==1)
{cout<<"o";
x.print_yazadah_ta_nozdah( (x.dahgan*10+x.yekan) ) ;
}
if (x.dahgan!=1)
{cout<<"o";
x.print_yek_ta_noh(x.yekan);
}
}

paradise_human
شنبه 25 اردیبهشت 1389, 19:30 عصر
سعی کنید برای برنامتون یک الگوریتم خوب طراجی کنید ، بعد کدش رو بنویسد.
کد شما خیلی پیچیده شده ، و من حوصله نداشتم تا درستش کنم و اینو نوشتم :

#include <stdio.h>

const char* const table1[] ={ "" ,"iek" ,"do" ,"se" ,"chahar" ,"panj" ,"shish" ,"haft" ,"hasht" ,"noh"};
const char* const table2[] ={ "" ,"iaz" ,"davaz" ,"siz" ,"chahr" ,"poonz" ,"shonz" ,"hiv" ,"hij" ,"noz"};
const char* const table3[] ={ "" ,"dah" ,"bist" ,"si" ,"chehel" ,"panjah" ,"shast" ,"haftad" ,"hashtad" ,"navad"};
const char* const table4[] ={ "" ,"sad" ,"divist" ,"sisad","chaharsad","poonsad" ,"shishsad" ,"hafsad" ,"hashsad" ,"nohsad"};

bool o = false;

unsigned long calc (unsigned long number,unsigned long max,const char* g)
{
unsigned long index;
//1000 > x >= 100
if(number < max && number >= (max/10))
{
index = number/(max/10);
printf("%s%s",(o)? " o ":"",table4[index]);
number -= (index*(max/10));
o = true;
}
max /= 10;
//100 > x >= 10
if(number < max && number >= (max/10))
{
index = number/(max/10);
number -= (index*(max/10));
if(index == 1)
{
//20 > x >= 10
index = number/((max/10)/10);
number -= (index*((max/10)/10));
printf("%s%sdah %s",(o)? " o ":"",table2[index],g);
o = true;
}
else
{
printf("%s%s",(o)? " o ":"",table3[index]);
o = true;
}
}
max /= 10;
//10 > x >= 1
if(number < max && number >= (max/10))
{
index = number/(max/10);
number -= (index*(max/10));
printf("%s%s %s",(o)? " o ":"",table1[index],g);
o = true;
}
return number;
}

int main ()
{
unsigned long number = 0;
printf("Enter the number : ");
scanf("%d",&number);

if(!number)
return printf("sefr\n");

number = calc(number,1000000000,"million");
number = calc(number,1000000,"hezar");
number = calc(number,1000,"");

return 0;
}
ممنون به خاطر کمکت. ...
مشکل برنامه مو حل کردم یه مشکل کوچیک توی تقدم عملگر ها بود ...
بازم به خاطر کمکت ممنون.