ورود

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



m.sloper
جمعه 23 خرداد 1393, 10:42 صبح
سلام. من این برنامه رو به زور پیدا کردم و فردا قراره که تحویلش بدم. اما زیاد نمیدونم چی به چیه میشه راجب سورس یکم توضیح بدید؟ ممنون میشم :قلب:


#include <iostream.h>
#include <conio.h>
int main()
{
RE:clrscr();
int s=0,i2=0,x[99];
char y[99]={0};
cout<<"Enter your number:\n";
do
{
i2++;
y[i2]=getche();
}while(y[i2]!=13);
i2--;
for(register int i=1;i2>=1;i2--)
{
x[i]=y[i2]-48;
i++;
}
i--;
clrscr();
cout<<"Your number: ";
for(register int i3=i;i3>=1;i3--)
cout<<x[i3];
cout<<endl<<"Result:\n";
for(;i>=1;i--)
{
if(s==1)
{
switch(x[i])
{
case 0:cout<<"zero";break;
case 1:cout<<"eleven ";break;
case 2:cout<<"twelve ";break;
case 3:cout<<"thirteen ";break;
case 4:cout<<"fourteen ";break;
case 5:cout<<"fifteen ";break;
case 6:cout<<"sixteen ";break;
case 7:cout<<"seventeen ";break;
case 8:cout<<"eighteen ";break;
case 9:cout<<"nineteen ";break;
}
s=0;
}
else
{
if(i%3==2)
{
switch(x[i])
{
case 0:cout<<"";break;
case 1:s=1;break;
case 2:cout<<"twenty ";break;
case 3:cout<<"thirty ";break;
case 4:cout<<"fourty ";break;
case 5:cout<<"fifty ";break;
case 6:cout<<"sixty ";break;
case 7:cout<<"seventy ";break;
case 8:cout<<"eighty ";break;
case 9:cout<<"ninety ";break;
}
}
else
{
switch(x[i])
{
case 0:cout<<"";break;
case 1:cout<<"one ";break;
case 2:cout<<"two ";break;
case 3:cout<<"three ";break;
case 4:cout<<"four ";break;
case 5:cout<<"five ";break;
case 6:cout<<"six ";break;
case 7:cout<<"seven ";break;
case 8:cout<<"eight ";break;
case 9:cout<<"nine ";break;
default:goto ESC;
}
}
}
if((x[i+2]==0&&x[i]==0)||(x[i]==0&&x[i-2]==0))
{
cout<<"";
}
else
{
if(i%3==0)
cout<<"hundred ";
else if(i==4)
cout<<"thousand ";
else if(i==7)

ESC:
}
}
gotoxy(0,22);
cout<<endl<<endl<<"Press any key to translate another number"<<endl;
getch();
goto RE;
}

محمد فدوی
جمعه 23 خرداد 1393, 13:11 عصر
کد خیلی خوبی پیدا نکردی چون اصلا ساخت یافته نیست. به قول یکی از دوستان انگار انشا نوشته!
بهرحال این راهنماییا شاید کمکت کنه:


خط ۱۰ تا ۱۴: یک رشته رو از کاربر میگیره و توی y ذخیره میکنه.
خط ۱۶ تا ۲۰: کاراکتر '0' مقدار اسکیش برابر چهل و هشته و بقیه رقم ها به ترتیب زیاد میشن. پس تک تک کاراکترهای y رو منهای ۴۸ کرده تا مقادیر ASCII به مقادیر عددی تبدیل بشن. و بعد اونارو توی یه آرایه جدید ریخته به اسم x
خط ۳۱ تا ۴۳: اعداد ۱۱ تا ۱۹ رو استخراج کرده. چون اینا نامگذاریشون بی قاعدست.
خط ۵۰ تا ۶۲: دهگان رو استخراج کرده.
خط ۶۶ تا ۷۹: یکان رو استخراج کرده.
بعدش هم که معلومه.

من کدت رو تست نکردم ولی به نظر بی عیب نمیاد... مثلا توی کدت مقدار "ten" اصلا دیده نمیشه!!!
نکته دیگه اینکه از goto استفاده نکن. سعی کن goto ها رو با حلقه جایگزین کنی.
بعدشم ساخت یافته کد بنویس. یعنی برنامت رو به چند برنامه کوچک تر (چند تابع) تقسیم کن. این کار و بعد شی گرایی در برنامه میشه گفت از مهمترین اصول کد نویسی هستن.

موفق باشی.

m.sloper
جمعه 23 خرداد 1393, 18:51 عصر
راستش از این بهتر پیدا نکردم. مرسی دوست عزیز :بوس: