PDA

برای دیدن نسخه كامل اینجا را كلیك كنید : برنامه به زبان جاوا - دریافت عدد در ورودی و نمایش با حروف در خروجی



esy_ara
2011/12/25, 08:13 AM
من یک برنامه به زبان جاوا نیاز دارم که یک عدد را در ورودی بگیرد وبه حروف در خروجی نمایش دهد....

با تشکر....:smile:

me.fatima
2011/12/28, 08:56 PM
من یک برنامه به زبان جاوا نیاز دارم که یک عدد را در ورودی بگیرد وبه حروف در خروجی نمایش دهد....

با تشکر....:smile:

منظورتون چیه ؟
اگه یه مثال بزنید خیلی خوب میشه.

mojdeh-eng
2011/12/28, 09:20 PM
سلام...
فکرمیکنم منظورشون این باشه که مثلا عدد20 رابگیرد و«بیست»رادرخروجی نمایش بده....
منم میخوام بدونم چطوری میشه اینکاررو کرد؟؟؟!!!

salome
2011/12/29, 05:18 PM
به نظر من اگه منظور اصلی سوال همونی باشه که mojde-eng میگه ................ فقط یه راه حل منطقی داره این که یه محدودیت در عدد وارد شده توسط کاربر بذارین و تا اون محدوده رو توی برنامه ذخیره کنین بعدش با یه serch ساده توی جدولتون یا هر محل ذخیره شده دیگه میتونین معادلشو چاپ کنین.

me.fatima
2011/12/29, 08:24 PM
من فکر میکنم یه راهش هم میتونه این جوری باشه:
مثلا اگر عدد دو رقمی هست میام با استفاده از عمل تقسیم و باقی مانده رقم دهگان رو بدست میاریم. بعد طبق جدولی که
در برنامه ذخیره کردیم معادل اون رقم چاپ میشود :
مثال : عدد 25 . خب رقم دهگان 2 میشود طبق برنامه برای 2 " بیست " چاپ میشود و بعد " و " و بعدش رقم یکان هم
که در برنامه براش حروف ذخیره شده چاپ میشه .
فقط کافیه که با استفاده از دستورات حروف در برنامه ذخیره بشه.
این فکر من بود. که فکر نکنم پیاده سازیش سخت باشه.

mojdeh-eng
2011/12/29, 10:00 PM
من فکر میکنم یه راهش هم میتونه این جوری باشه:
مثلا اگر عدد دو رقمی هست میام با استفاده از عمل تقسیم و باقی مانده رقم دهگان رو بدست میاریم. بعد طبق جدولی که
در برنامه ذخیره کردیم معادل اون رقم چاپ میشود :
مثال : عدد 25 . خب رقم دهگان 2 میشود طبق برنامه برای 2 " بیست " چاپ میشود و بعد " و " و بعدش رقم یکان هم
که در برنامه براش حروف ذخیره شده چاپ میشه .
فقط کافیه که با استفاده از دستورات حروف در برنامه ذخیره بشه.
این فکر من بود. که فکر نکنم پیاده سازیش سخت باشه.
خب باید برای اعدادیک رقمی-دورقمی -سه رقمی و..... هرکدوم یه جدول از حروف درنظرگرفت که بعداز مشخص شدن تعداد حروف به سراغ اون جدول بره امامیشه به اندازه تعداد حروف یه جدول درنظرگرفت بعدبااستفاده از همون جدول های حروف قبلی اونو ساخت...؟؟فکرکنم حافظه زیادی می بره!!چطوری میشه مقدارحافظه مصرفی رو به حداقل رسوند؟؟؟

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

Hadi-Hashemi
2011/12/29, 10:46 PM
سلام, همونطور که دوستان هم اشاره کردن باید اول لیست اعداد رو دستی وارد کرد. به نظر من از آرایه ها استفاده بشه بهتره. یک تا نه تو آرایه یکان, ده تا نود بصورت ده, بیست,سی... در آرایه دهگان و الی آخر. اینجا فقط یه نکته هست که تو فارسی اعداد یازده تا نوزده قانون ندارن اون هم باید به صورت دستی وارد شن. بعدش عدد رو به صورت String از کاربر میگیریم با استفاده از طول رشته میفهمیم چند رقمیه. بعدش با substring از آرایه ها اعداد و میکشیم بیرون. فکر کنم این بهترین راه باشه, دوستان بازم نظر بدن - ضمنا خواستین برنامه رو هم مینیویسم میزارم بشرطی شما ها هم رو برنامه نظر بدین تا از نظر سرعت, حجم و کارایی به بهترین شکل برسه ;)

Hadi-Hashemi
2011/12/30, 01:42 AM
import java.util.Scanner;
public class Hadi {
public static void yekan (int indexY){
String arYekan[] = {"","Yek","Do","Se","Chahar","Panj","Shesh","Haft","Hasht","Noh"};
System.out.print(arYekan[indexY]);
}
public static void dahgan (int indexD){
String arDahgan[] = {"","dah","Bist","Si","Chehel","Panjah","Shasht","Haftad","Hashtad","Navad"};
System.out.print(arDahgan[indexD]);
}
public static void sadgan (int indexS){
String arSadgan[] = {"","Sad","Divist","Sisad","Chaharsad","Pansad","Sheshsad","Haftsad","Hashtsad","Nohsad"};
System.out.print(arSadgan[indexS]);
}
public static void Estesna (int indexE){
String arSadgan[] = {"","Yazdah","Davazdah","Sizdah","Chahardah","Panzdah","Shanzdah","Hefdah","Hejdah","Nuzdah"};
System.out.print(arSadgan[indexE]);
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Adad: ");
String strAdad = input.next();
strAdad = String.valueOf(Integer.valueOf(strAdad));
if (Integer.valueOf(strAdad) != 0){
switch (strAdad.length()){
case 1:
yekan(Integer.valueOf(strAdad));
break;
case 2:
dahgan(Integer.valueOf(strAdad.substring(0, 1)));
if(Integer.valueOf(strAdad.substring(1, 2)) != 0)
System.out.print("o ");

yekan(Integer.valueOf(strAdad.substring(1, 2)));
break;
case 3:
sadgan(Integer.valueOf(strAdad.substring(0, 1)));
if(Integer.valueOf(strAdad.substring(1, 2)) != 0)
System.out.print("o ");

dahgan(Integer.valueOf(strAdad.substring(1, 2)));
if(Integer.valueOf(strAdad.substring(2, 3)) != 0)
System.out.print("o ");

yekan(Integer.valueOf(strAdad.substring(2, 3)));
break;
}
} else System.out.println("Sefr");
System.out.println("");
}
}









برنامه رو نوشتم فقط اعداد یازده تا نوزده رو چون مدلش فرق میکنه رو درست جواب نمیده اون قسمتش رو شما اضافه کنین من سر درد گرفتم. :confused:
در مورد یازده تا نوزده کافیه کنترل کنیم که رقم دوم از راست اگه 1 بود عدد رو از متد Estesna رو چاپ کنه. البته این مختص 2 رقمیا نیست مثلا 311 هم مشکل داره :cool:
عدد رو String گرفتم چون تو String راحت میشه فهمید عدد چند رقمیه و راحت میشه رقماشو تجزیه کرد. :smile:
ضمنا واسه 4 رقمی ها فقط کافیه یه متد هزارگان تعریف بشه و کد case 4 رو بنویسیم. اینجوری تا آخرش میشه رفت مثلا 10 رقمی :D
هر جاشو که دیدین کد بهتری میشه نوشت رو بگین تغییر بدیم که به بهترین شکل برسه ;)
برنامه خیلی سادس ولی جاهایی که اشکال داشتین بپرسین :)

توضیح کوچولو:
خط قرمز صفرهای قبل عدد را پاک میکند مثلا عدد وارد شده ی "001" را به "1" تبدیل میکند.

mojdeh-eng
2011/12/30, 08:57 PM
سلام...
ممنون به خاطر کد....
فکرکنم برای اعداد ده تا نوزده یه شرط برارقم دهگان بذاریم که اگه برابر با یک باشه یکی ازاعدادده تانوزده میشه که برای تشخیص اون هم باید کاراکتر بعداز یک با اعدادیک تا نه مقایسه بشه بعد مطابق بااون عددچاپ کنه....درغیراینصورت بیست،سی،.....چاپ بشه.
راستی باswitch باید یه محدوده برای اعداد درنظربگیریم.حالااگه قرارباشه محدوده اعدادورودی رو کاربرتعیین کنه باید چیکارکرد؟؟

Hadi-Hashemi
2011/12/30, 09:30 PM
سلام...
ممنون به خاطر کد....
فکرکنم برای اعداد ده تا نوزده یه شرط برارقم دهگان بذاریم که اگه برابر با یک باشه یکی ازاعدادده تانوزده میشه که برای تشخیص اون هم باید کاراکتر بعداز یک با اعدادیک تا نه مقایسه بشه بعد مطابق بااون عددچاپ کنه....درغیراینصورت بیست،سی،.....چاپ بشه.
راستی باswitch باید یه محدوده برای اعداد درنظربگیریم.حالااگه قرارباشه محدوده اعدادورودی رو کاربرتعیین کنه باید چیکارکرد؟؟

درست متوجه نشدم, یعنی مثلا کاربر بگه تا 100؟

mojdeh-eng
2011/12/31, 06:53 PM
آره مثلا کاربر بگه مثلا تا100،1000،20000یا هربازه ی دیگه ای...
برنامه ای که شمانوشتید باید حتما محدوده اعدادورودی به همون میزانی باشه که براش مشخص کردیم...درصورتی که اگه بخواهیم برنامه جامع و کلی باشه...برنامه نویس نمیدونه کاربر چه توی چه محدوده ای عددرو میخواد وارد کنه!وباید اینو رو قبل از اجرا از کاربر بگیره.
فکرمیکنم که بشه چنین برنامه ای نوشت.
بازم ممنون.

Hadi-Hashemi
2012/1/01, 03:23 PM
با سلام دوباره :smile:

بله حق با شماست باید محدوده اعداد باشه, اما اینم برنامه جوری نوشته شده که اگه عددی خارج از محدوده وارد بشه خطا نمیده ;) حالا واسه تکمیلش میشه چند تا کار انجام داد:

1- تو Switch بعد از تعریف case ها مورد default رو اضافه کنیم و توش مشخص کنیم که عدد ورودی خارج از محدودس:




default:
System.out.println("Kharej az mahdude");
break








2- بعد از گرفتن عدد از کاربر کنترل کنیم که اگه عدد وارد شده بزرگتر بود پیغام بده و دوباره عدد رو بگیره:

جای این قسمت بعد از خط قرمز برنامه است. فقط یادمون باشه هر وقت اعداد 4 رقمی یا بالاتر رو تو برنامه تعریف کردیم باید عدد 999 هم رو نسبت به اون تغییر بدیم





boolean kntrl_adad = true;
while (kntrl_adad) {
if (Integer.valueOf(strAdad) > 999){
System.err.println("kharej az mahdude...");
System.out.print("Adad: ");
strAdad = input.next();
}else
kntrl_adad = false;
}









موفق باشین :)