• 0

تحويل الأعداد الرومانية إلى الأعداد العشرية في لغة جافا

package Java;

import java.util.Scanner;

public class Main {

  public static void main(String[] args) {
   Scanner in =new Scanner(System.in);

   System.out.println(" الروماني ادخل الرقم");
   for(int j=1;j<6;j++){
   String x=in.next();
   System.out.print(rode(x));
   }
   }
   public static int value(char r){
      if(r=='I')
        return 1;
      if (r=='V')
        return 5;
       if(r=='X')
        return 10;
      if (r=='L') 
          return 50;
         if(r=='M')
        return 1000;
      return -1;
          }
  public static int rode(String str) {
    int res =0;
    for (int i=0;i<str.length();i++){
      int s1=value(str.charAt(i));
      if(i+1<str.length()){
        int s2=value(str.charAt(i+1));
        if(s1<=s2){
          res=res+1;
        }
        else {
          res=res+s1-s2;
          i++;
        }
      }
      else {
        res=res+s1;
      }
    }
    return res;
  }      
  }    

 كيف اجعل هذا البرنامج اذا ادخل المستخدم

MLIVيطبع البرنامج الرقم العشري المقابل

تمّ تعديل بواسطة عبود سمير
وضع الأكواد في مكانها و توضيح السؤال

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

هل بإمكانك التوضيح بشكل أكبر حتى يستطيع أحد المدربين مساعدتك

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0
بتاريخ 2 ساعات قال Hoida Ahamed:

package Java;

import java.util.Scanner;

public class Main {

  public static void main(String[] args) {
   Scanner in =new Scanner(System.in);

   System.out.println(" الروماني ادخل الرقم");
   for(int j=1;j<6;j++){
   String x=in.next();
   System.out.print(rode(x));
   }
   }
   public static int value(char r){
      if(r=='I')
        return 1;
      if (r=='V')
        return 5;
       if(r=='X')
        return 10;
      if (r=='L') 
          return 50;
         if(r=='M')
        return 1000;
      return -1;
          }
  public static int rode(String str) {
    int res =0;
    for (int i=0;i<str.length();i++){
      int s1=value(str.charAt(i));
      if(i+1<str.length()){
        int s2=value(str.charAt(i+1));
        if(s1<=s2){
          res=res+1;
        }
        else {
          res=res+s1-s2;
          i++;
        }
      }
      else {
        res=res+s1;
      }
    }
    return res;
  }      
  }    

 هذا البرنامج يطلب من المستخدم يدخل رقم روماني ويطبع له رقم عشري.

اريد تعديله بحيث :

يدخل المستخدم الرقم الروماني 

MLVI (وليس رقم واحد كما في البرنامج السابق )فيطبع البرنامج الرقم العشري المقابل له كاملاً.

 

 

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0
بتاريخ 59 دقائق مضت قال Hoida Ahamed:

اريد تعديله بحيث :

يدخل المستخدم الرقم الروماني 

MLVI (وليس رقم واحد كما في البرنامج السابق )فيطبع البرنامج الرقم العشري المقابل له كاملاً.

لا أدري ما الذي تقصده لأن الآن عند إدخال عدد روماني يتم تحويله إلى عدد في النظام العشري و يطبعه ثم ينتظر البرنامج لإدخال عدد آخر و هكذا حتى 5 أعداد و بعد ذلك يتم إنهاء البرنامج.

المشكلة لديك أن التحويل خاطئ بسبب خطأ في الدالة rode و هذا الصواب:

public static int rode(String str) {
  int res = 0;
  for (int i = 0; i < str.length(); i++){

    int s1 = value(str.charAt(i));

    if(i+1 < str.length()){
      int s2 = value(str.charAt(i+1));
      if(s1 >= s2){
        res = res + s1;
      }
      else {
        res = res + s2 - s1;
        i++;
      }
    }
    else {
      res = res + s1;
    }
  }
  
  return res;
}      

أما في الدالة value فينقصك إكمال بقية الرموز: فالرمز C يوافقه العدد 100 و الرمز D يوافقه 500 لتُصبح الدالة بهذا الشكل:

public static int value(char r){
  if(r=='I')
    return 1;
  if (r=='V')
    return 5;
  if(r=='X')
    return 10;
  if (r=='L') 
    return 50;
  if (r == 'C')
    return 100;
  if (r == 'D')
    return 500;
  if(r=='M')
    return 1000;
  return -1;
} 

ليُصبح البرنامج بهذا الشكل:

import java.util.Scanner;

public class Main {

  public static void main(String[] args) {
    Scanner in =new Scanner(System.in);

    for(int j=1;j<6;j++){
      System.out.println(" الروماني ادخل الرقم");
      String x = in.next();
      System.out.println(rode(x));
    }
  }
  public static int value(char r){
    if(r=='I')
      return 1;
    if (r=='V')
      return 5;
    if(r=='X')
      return 10;
    if (r=='L') 
      return 50;
    if (r == 'C')
      return 100;
    if (r == 'D')
      return 500;
    if(r=='M')
      return 1000;
    return -1;
  }
  public static int rode(String str) {
    int res =0;
    for (int i=0;i<str.length();i++){

      int s1=value(str.charAt(i));

      if(i+1<str.length()){
        int s2=value(str.charAt(i+1));
        if(s1>=s2){
          res=res+s1;
        }
        else {
          res=res+s2-s1;
          i++;
        }
      }
      else {
        res=res+s1;
      }
    }
    return res;
  }      
}    

و هذه نتيجة التجربة بعد إدخال الأعداد الرومانية:

 الروماني ادخل الرقم
MLVI
1056
 الروماني ادخل الرقم
MLIV
1054
 الروماني ادخل الرقم
XL
40
 الروماني ادخل الرقم
MCMIV
1904
 الروماني ادخل الرقم
MDCV
1605


...Program finished with exit code 0
Press ENTER to exit console.

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

مرحبًا@Hoida Ahamed،

يوجد لك سؤال مشابه لهذاالسؤال كن قد نشرتيه منذ بضعة ساعات، أرجو متابعة الأسئلة التي تنشريها وعدم تكرارها

 

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن