اذهب إلى المحتوى
  • 0

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

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;
  }      
  }    

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

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

تم التعديل في بواسطة عبود سمير
وضع الأكواد في مكانها و توضيح السؤال
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 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،

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

 

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

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...