(Convert decimals to fractions) Write a program that prompts the user to enter a decimal number and displays the number in a fraction. Hint: read the decimal number as a string, extract the integer part and fractional part from the string, and use the Rational class in LiveExample 13.13 to obtain a rational number for the decimal number. Use the template at https://liveexample.pearsoncmg.com/test/Exercise13_19.txt The problem can not use BigInteger //Below is the Rational LiveExample 13.13 that goes with the problem/question; notice "long" instead of "BigInteger" class Rational extends Number implements Comparable {   // Data fields for numerator and denominator   private long numerator = 0;   private long denominator = 1;   /** Construct a rational with default properties */   public Rational() {     this(0, 1);   }   /** Construct a rational with specified numerator and denominator */   public Rational(long numerator, long denominator) {     long gcd = gcd(numerator, denominator);     this.numerator = (denominator > 0 ? 1 : -1) * numerator / gcd;     this.denominator = Math.abs(denominator) / gcd;   }   /** Find GCD of two numbers */   private static long gcd(long n, long d) {     long n1 = Math.abs(n);     long n2 = Math.abs(d);     int gcd = 1;          for (int k = 1; k <= n1 && k <= n2; k++) {       if (n1 % k == 0 && n2 % k == 0)          gcd = k;     }     return gcd;   }   /** Return numerator */   public long getNumerator() {     return numerator;   }   /** Return denominator */   public long getDenominator() {     return denominator;   }   /** Add a rational number to this rational */   public Rational add(Rational secondRational) {     long n = numerator * secondRational.getDenominator() +       denominator * secondRational.getNumerator();     long d = denominator * secondRational.getDenominator();     return new Rational(n, d);   }   /** Subtract a rational number from this rational */   public Rational subtract(Rational secondRational) {     long n = numerator * secondRational.getDenominator()       - denominator * secondRational.getNumerator();     long d = denominator * secondRational.getDenominator();     return new Rational(n, d);   }   /** Multiply a rational number to this rational */   public Rational multiply(Rational secondRational) {     long n = numerator * secondRational.getNumerator();     long d = denominator * secondRational.getDenominator();     return new Rational(n, d);   }   /** Divide a rational number from this rational */   public Rational divide(Rational secondRational) {     long n = numerator * secondRational.getDenominator();     long d = denominator * secondRational.numerator;     return new Rational(n, d);   }   @Override     public String toString() {     if (denominator == 1)       return numerator + "";     else       return numerator + "/" + denominator;   }   @Override // Override the equals method in the Object class    public boolean equals(Object other) {     if ((this.subtract((Rational)(other))).getNumerator() == 0)       return true;     else       return false;   }   @Override // Implement the abstract intValue method in Number    public int intValue() {     return (int)doubleValue();   }   @Override // Implement the abstract floatValue method in Number    public float floatValue() {     return (float)doubleValue();   }   @Override // Implement the doubleValue method in Number    public double doubleValue() {     return numerator * 1.0 / denominator;   }   @Override // Implement the abstract longValue method in Number   public long longValue() {     return (long)doubleValue();   }   @Override // Implement the compareTo method in Comparable   public int compareTo(Rational o) {     if (this.subtract(o).getNumerator() > 0)       return 1;     else if (this.subtract(o).getNumerator() < 0)       return -1;     else       return 0;   } }

C++ Programming: From Problem Analysis to Program Design
8th Edition
ISBN:9781337102087
Author:D. S. Malik
Publisher:D. S. Malik
Chapter12: Points, Classes, Virtual Functions And Abstract Classes
Section: Chapter Questions
Problem 18SA
icon
Related questions
Question

(Convert decimals to fractions)

Write a program that prompts the user to enter a decimal number and displays the number in a fraction.

Hint: read the decimal number as a string, extract the integer part and fractional part from the string, and use the Rational class in LiveExample 13.13 to obtain a rational number for the decimal number. Use the template at

https://liveexample.pearsoncmg.com/test/Exercise13_19.txt

The problem can not use BigInteger

//Below is the Rational LiveExample 13.13 that goes with the problem/question; notice "long" instead of "BigInteger"

class Rational extends Number implements Comparable<Rational> {
  // Data fields for numerator and denominator
  private long numerator = 0;
  private long denominator = 1;

  /** Construct a rational with default properties */
  public Rational() {
    this(0, 1);
  }

  /** Construct a rational with specified numerator and denominator */
  public Rational(long numerator, long denominator) {
    long gcd = gcd(numerator, denominator);
    this.numerator = (denominator > 0 ? 1 : -1) * numerator / gcd;
    this.denominator = Math.abs(denominator) / gcd;
  }

  /** Find GCD of two numbers */
  private static long gcd(long n, long d) {
    long n1 = Math.abs(n);
    long n2 = Math.abs(d);
    int gcd = 1;
    
    for (int k = 1; k <= n1 && k <= n2; k++) {
      if (n1 % k == 0 && n2 % k == 0) 
        gcd = k;
    }

    return gcd;
  }

  /** Return numerator */
  public long getNumerator() {
    return numerator;
  }

  /** Return denominator */
  public long getDenominator() {
    return denominator;
  }

  /** Add a rational number to this rational */
  public Rational add(Rational secondRational) {
    long n = numerator * secondRational.getDenominator() +
      denominator * secondRational.getNumerator();
    long d = denominator * secondRational.getDenominator();
    return new Rational(n, d);
  }

  /** Subtract a rational number from this rational */
  public Rational subtract(Rational secondRational) {
    long n = numerator * secondRational.getDenominator()
      - denominator * secondRational.getNumerator();
    long d = denominator * secondRational.getDenominator();
    return new Rational(n, d);
  }

  /** Multiply a rational number to this rational */
  public Rational multiply(Rational secondRational) {
    long n = numerator * secondRational.getNumerator();
    long d = denominator * secondRational.getDenominator();
    return new Rational(n, d);
  }

  /** Divide a rational number from this rational */
  public Rational divide(Rational secondRational) {
    long n = numerator * secondRational.getDenominator();
    long d = denominator * secondRational.numerator;
    return new Rational(n, d);
  }

  @Override  
  public String toString() {
    if (denominator == 1)
      return numerator + "";
    else
      return numerator + "/" + denominator;
  }

  @Override // Override the equals method in the Object class 
  public boolean equals(Object other) {
    if ((this.subtract((Rational)(other))).getNumerator() == 0)
      return true;
    else
      return false;
  }

  @Override // Implement the abstract intValue method in Number 
  public int intValue() {
    return (int)doubleValue();
  }

  @Override // Implement the abstract floatValue method in Number 
  public float floatValue() {
    return (float)doubleValue();
  }

  @Override // Implement the doubleValue method in Number 
  public double doubleValue() {
    return numerator * 1.0 / denominator;
  }

  @Override // Implement the abstract longValue method in Number
  public long longValue() {
    return (long)doubleValue();
  }

  @Override // Implement the compareTo method in Comparable
  public int compareTo(Rational o) {
    if (this.subtract(o).getNumerator() > 0)
      return 1;
    else if (this.subtract(o).getNumerator() < 0)
      return -1;
    else
      return 0;
  }
}

 

Expert Solution
trending now

Trending now

This is a popular solution!

steps

Step by step

Solved in 3 steps with 3 images

Blurred answer
Knowledge Booster
Program on Numbers
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
Recommended textbooks for you
C++ Programming: From Problem Analysis to Program…
C++ Programming: From Problem Analysis to Program…
Computer Science
ISBN:
9781337102087
Author:
D. S. Malik
Publisher:
Cengage Learning