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

esy_ara

عضو جدید
من یک برنامه به زبان جاوا نیاز دارم که یک عدد را در ورودی بگیرد وبه حروف در خروجی نمایش دهد....

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

mojdeh-eng

عضو جدید
کاربر ممتاز
سلام...
فکرمیکنم منظورشون این باشه که مثلا عدد20 رابگیرد و«بیست»رادرخروجی نمایش بده....
منم میخوام بدونم چطوری میشه اینکاررو کرد؟؟؟!!!
 

salome

عضو جدید
به نظر من اگه منظور اصلی سوال همونی باشه که mojde-eng میگه ................ فقط یه راه حل منطقی داره این که یه محدودیت در عدد وارد شده توسط کاربر بذارین و تا اون محدوده رو توی برنامه ذخیره کنین بعدش با یه serch ساده توی جدولتون یا هر محل ذخیره شده دیگه میتونین معادلشو چاپ کنین.
 

me.fatima

عضو جدید
کاربر ممتاز
من فکر میکنم یه راهش هم میتونه این جوری باشه:
مثلا اگر عدد دو رقمی هست میام با استفاده از عمل تقسیم و باقی مانده رقم دهگان رو بدست میاریم. بعد طبق جدولی که
در برنامه ذخیره کردیم معادل اون رقم چاپ میشود :
مثال : عدد 25 . خب رقم دهگان 2 میشود طبق برنامه برای 2 " بیست " چاپ میشود و بعد " و " و بعدش رقم یکان هم
که در برنامه براش حروف ذخیره شده چاپ میشه .
فقط کافیه که با استفاده از دستورات حروف در برنامه ذخیره بشه.
این فکر من بود. که فکر نکنم پیاده سازیش سخت باشه.
 
  • Like
واکنش ها: Sarp

mojdeh-eng

عضو جدید
کاربر ممتاز
من فکر میکنم یه راهش هم میتونه این جوری باشه:
مثلا اگر عدد دو رقمی هست میام با استفاده از عمل تقسیم و باقی مانده رقم دهگان رو بدست میاریم. بعد طبق جدولی که
در برنامه ذخیره کردیم معادل اون رقم چاپ میشود :
مثال : عدد 25 . خب رقم دهگان 2 میشود طبق برنامه برای 2 " بیست " چاپ میشود و بعد " و " و بعدش رقم یکان هم
که در برنامه براش حروف ذخیره شده چاپ میشه .
فقط کافیه که با استفاده از دستورات حروف در برنامه ذخیره بشه.
این فکر من بود. که فکر نکنم پیاده سازیش سخت باشه.
خب باید برای اعدادیک رقمی-دورقمی -سه رقمی و..... هرکدوم یه جدول از حروف درنظرگرفت که بعداز مشخص شدن تعداد حروف به سراغ اون جدول بره امامیشه به اندازه تعداد حروف یه جدول درنظرگرفت بعدبااستفاده از همون جدول های حروف قبلی اونو ساخت...؟؟فکرکنم حافظه زیادی می بره!!چطوری میشه مقدارحافظه مصرفی رو به حداقل رسوند؟؟؟

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

Hadi-Hashemi

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

Hadi-Hashemi

عضو جدید
کد:
[LEFT]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 [COLOR=#008000]Estesna [/COLOR](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();
        [COLOR=#ff0000]strAdad = String.valueOf(Integer.valueOf(strAdad));[/COLOR]
        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("");
    }    
} 
[/LEFT]

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

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

mojdeh-eng

عضو جدید
کاربر ممتاز
سلام...
ممنون به خاطر کد....
فکرکنم برای اعداد ده تا نوزده یه شرط برارقم دهگان بذاریم که اگه برابر با یک باشه یکی ازاعدادده تانوزده میشه که برای تشخیص اون هم باید کاراکتر بعداز یک با اعدادیک تا نه مقایسه بشه بعد مطابق بااون عددچاپ کنه....درغیراینصورت بیست،سی،.....چاپ بشه.
راستی باswitch باید یه محدوده برای اعداد درنظربگیریم.حالااگه قرارباشه محدوده اعدادورودی رو کاربرتعیین کنه باید چیکارکرد؟؟
 

Hadi-Hashemi

عضو جدید
سلام...
ممنون به خاطر کد....
فکرکنم برای اعداد ده تا نوزده یه شرط برارقم دهگان بذاریم که اگه برابر با یک باشه یکی ازاعدادده تانوزده میشه که برای تشخیص اون هم باید کاراکتر بعداز یک با اعدادیک تا نه مقایسه بشه بعد مطابق بااون عددچاپ کنه....درغیراینصورت بیست،سی،.....چاپ بشه.
راستی باswitch باید یه محدوده برای اعداد درنظربگیریم.حالااگه قرارباشه محدوده اعدادورودی رو کاربرتعیین کنه باید چیکارکرد؟؟

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

mojdeh-eng

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

Hadi-Hashemi

عضو جدید
با سلام دوباره :smile:

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

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

کد:
[LEFT]default:
    System.out.println("Kharej az mahdude");
    break
[/LEFT]

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

کد:
[LEFT]
boolean kntrl_adad = true;
while (kntrl_adad) {            
    if (Integer.valueOf(strAdad) > [COLOR=#008000]999[/COLOR]){
        System.err.println("kharej az mahdude...");
        System.out.print("Adad: ");
        strAdad = input.next();
    }else
        kntrl_adad = false;
}
[/LEFT]

موفق باشین :)
 

shahin-hacker

عضو جدید
سلام دوستان خسته نباشید
میخواستم ببینم آیا کسی این برنامه رو کاملش کرد یا نه ؟
این برنامه رو استاد بهم گفته بنویسم البته با این تفاوت که باید بتونه تا 9 رقم معمولی و 5 رقم اعشاری رو تبدیل کنه به اعداد حروفی !!!!

اگه کسی این برنامه رو کامل کرده ممنون میشم اعلام کنه ببینم چطوری نوشته و چیکارا کرده :دی
 

Similar threads

بالا