dermetfan

U10A01

Dec 1st, 2015
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.86 KB | None | 0 0
  1. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  2. Rational.java
  3. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  4.  
  5. public class Rational {
  6.  
  7.     private int num, denum;
  8.  
  9.     public Rational(int num, int denum) {
  10.         if(denum == 0) {
  11.             // throw new IllegalArgumentException("Fehler: Nenner ist 0");
  12.             System.out.println("Fehler: Nenner ist 0");
  13.         }
  14.         this.num = num;
  15.         this.denum = denum;
  16.         reduce();
  17.     }
  18.  
  19.     public Rational(int number) {
  20.         this(number, 1);
  21.     }
  22.  
  23.     private void reduce() {
  24.         final int gcd = ggT(num, denum);
  25.         num /= gcd;
  26.         denum /= gcd;
  27.         if(denum < 0) {
  28.             denum *= -1;
  29.             num *= -1;
  30.         }
  31.     }
  32.  
  33.     public /* private */ static int ggT(int a, int b) {
  34.         a = Math.abs(a);
  35.         b = Math.abs(b);
  36.         return b == 0 ? a : a >= b ? ggT(a % b, b) : ggT(b, a);
  37.     }
  38.  
  39.     public Rational add(Rational o) {
  40.         final int denum = this.denum * o.denum, num1 = this.num * o.denum, num2 = this.denum * o.num;
  41.         return new Rational(num1 + num2, denum);
  42.     }
  43.  
  44.     public Rational sub(Rational o) {
  45.         final int denum = this.denum * o.denum, num1 = this.num * o.denum, num2 = this.denum * o.num;
  46.         return new Rational(num1 - num2, denum);
  47.     }
  48.  
  49.     public Rational mul(Rational o) {
  50.         return new Rational(num * o.num, denum * o.denum);
  51.     }
  52.  
  53.     public Rational div(Rational o) {
  54.         return new Rational(num * o.denum, denum * o.num);
  55.     }
  56.  
  57.     @Override
  58.     public String toString() {
  59.         return num + "/" + denum;
  60.     }
  61.  
  62. }
  63.  
  64. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  65. RationalTest.java
  66. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  67.  
  68. import java.util.Scanner;
  69.  
  70. public class RationalTest {
  71.  
  72.     public static void main(String[] args) {
  73.         final Scanner sc = new Scanner(System.in);
  74.         final Rational r1 = new Rational(sc.nextInt(), sc.nextInt());
  75.  
  76.         Rational result = r1;
  77.         int state = 0;
  78.         for(String input = sc.next(), op = null, num = null, denum = null; !input.equals("."); input = sc.next(), state++) {
  79.             switch(state) {
  80.                 default:
  81.                     state = 0;
  82.                 case 0: // read operator
  83.                     op = input;
  84.                     break;
  85.                 case 1: // read next numerator
  86.                     num = input;
  87.                     break;
  88.                 case 2: // read next denumerator and calculate
  89.                     denum = input;
  90.                     final Rational r2 = new Rational(Integer.parseInt(num), Integer.parseInt(denum));
  91.                     if(op.length() != 1) {
  92.                         throw new IllegalArgumentException("expected operator, got " + op);
  93.                     }
  94.                     switch(op.charAt(0)) {
  95.                         case '+':
  96.                             result = result.add(r2);
  97.                             break;
  98.                         case '-':
  99.                             result = result.sub(r2);
  100.                             break;
  101.                         case '*':
  102.                             result = result.mul(r2);
  103.                             break;
  104.                         case '/':
  105.                             result = result.div(r2);
  106.                             break;
  107.                         default:
  108.                             throw new IllegalArgumentException("unknown operator, expected one of +-*/");
  109.                     }
  110.             }
  111.         }
  112.         sc.close();
  113.  
  114.         System.out.println(result);
  115.     }
  116.  
  117. }
Advertisement
Add Comment
Please, Sign In to add comment