public Integer getMeasureOf(Rational r) { TimeSignature ts = getObjectAt(r); Rational lastTSChange = _data.lowerKey(r); // Calculate the measures since the last time signature change Integer measures = Double.valueOf(Math.ceil((r.minus(lastTSChange)).times(new Rational(1, ts.TOP)).toDouble())) .intValue(); // Go backwards through underlying data to count all measures defined in the piece (ideally // there are none before 0?) for (Map.Entry<Rational, TimeSignature> e : _data.headMap(lastTSChange, false).descendingMap().entrySet()) { measures = measures + Double.valueOf( Math.ceil( (lastTSChange.minus(e.getKey())) .times(new Rational(1, e.getValue().TOP)) .toDouble())) .intValue(); lastTSChange = e.getKey(); } return measures; }
public void subtract(Rational r1, Rational r2) { int s = (r1.getNum() * r2.getDen()) - (r2.getNum() * r1.getDen()); int s2 = r1.getDen() * r2.getDen(); num = s; den = s2; }
/** Glavna metoda */ public static void main(String[] args) { // Provjeri argumente if (args.length != 3) { System.out.println("Koristite: operand1 operator operand2"); System.exit(0); } String operand1 = args[0]; // Prvi operand String operator = args[1]; // Operator String operand2 = args[2]; // Drugi operand // Prvi broj int numerator1 = 0; int denominator1 = 0; // Drugi broj int numerator2 = 0; int denominator2 = 0; // Pretvori argumente u brojeve try { // Prvi broj numerator1 = Integer.parseInt(operand1.split("/")[0]); denominator1 = Integer.parseInt(operand1.split("/")[1]); // Drugi broj numerator2 = Integer.parseInt(operand2.split("/")[0]); denominator2 = Integer.parseInt(operand2.split("/")[1]); } catch (NumberFormatException e) { System.out.println("Greska u argumentima!"); System.exit(0); } // Kreiraj objekte Rational r1 = new Rational(numerator1, denominator1); Rational r2 = new Rational(numerator2, denominator2); // Kreiraj objekat za rezultat Rational rezultat = new Rational(); // Izracunaj rezultat switch (operator) { case "+": rezultat = r1.add(r2); break; case "-": rezultat = r1.subtract(r2); break; case ".": rezultat = r1.multiply(r2); break; case "/": rezultat = r1.divide(r2); break; default: System.out.println("Neispravan unos!"); System.exit(0); } // Ispisi rezultat System.out.println(operand1 + " " + operator + " " + operand2 + " = " + rezultat); }
public static void main(String[] args) { Rational half = new Rational(1, 2); try { System.out.println("Root of half is " + half.root()); } catch (IllegalArgumentToSquareRootException e) { e.printStackTrace(); } }
public int compareTo(Object r) { Rational t = (Rational) r; this.reduce(); t.reduce(); if (this.n * t.d > t.n * this.d) return 1; else if (this.n * t.d == t.n * this.d) return 0; else return -1; }
@Override // Comparison between the 2 objects // Cross multiplies the rationals and checks the numerator and denominator values public int compare(Rational o1, Rational o2) { int lhs = o1.getNumerator() * o2.getDenominator(); int rhs = o1.getDenominator() * o2.getNumerator(); if (lhs < rhs) return -1; // rhs is greater than lhs --> r is less than current Rational else if (lhs > rhs) return 1; // lhs is greater than rhs --> r is greater than current Rational else return 0; // lhs and rhs are both equal --> Rationals are equal }
// bin search based square root computation, // works for rationals in the range [0,2147483647] public Rational root() throws IllegalArgumentToSquareRootException { Rational low = new Rational(0, 1); // Max Int value is 2147483647, square root is 46341 // Rational high = new Rational(46341,1); Rational high = new Rational(46340, 1); if (this.isLessThan(low) || !this.isLessThan(high)) { throw new IllegalArgumentToSquareRootException(this); } System.out.println("46341* 46341 = " + (46341 * 46341)); System.out.println("46340* 46340 = " + (46340 * 46340)); Rational half = new Rational(1, 2); Rational midpoint = (low.plus(high)).times(half); Rational tmp = null; while (!high.minus(low).abs().isLessThan(TOLERANCE)) { System.out.println("low high: " + low + " " + high); System.out.println("square of midpoint is: " + midpoint.times(midpoint)); if (midpoint.times(midpoint).isLessThan(this)) { tmp = new Rational(midpoint); midpoint = high.plus(midpoint).times(half); low = tmp; } else { tmp = new Rational(midpoint); midpoint = low.plus(midpoint).times(half); high = tmp; } } return midpoint; }
static Rational operate(Rational op1, Rational op2, int operation) { if (operation == 0) { return Rational.add(op1, op2); } else if (operation == 1) { return Rational.subtract(op1, op2); } else if (operation == 2) { return Rational.multiply(op1, op2); } else { return Rational.divide(op1, op2); } }
public static void main(String[] args) { Rational d, e, f; d = new Rational(1, 2); e = new Rational(2, 3); f = new Rational(2, 4); // System.out.println(d.getA()); System.out.println(d.ratNum()); System.out.println(d.equals(e)); System.out.println(d.equals(f)); System.out.println((d.mult(f)).ratNum()); System.out.println(d.compareTo(e)); }
public Rational abs() { Rational result = new Rational(1, 1); if ((this.numerator() >= 0 && this.denominator() >= 0) || (this.numerator() < 0 && this.denominator() < 0)) { result._numerator = this.numerator(); result._denominator = this.denominator(); } else { result._numerator = -this.numerator(); result._denominator = this.denominator(); } return result; }
public boolean equals(Object obj) { if (this == obj) { // if same alias return true; } if (obj instanceof Rational) { Rational rightSide = (Rational) obj; // if it is a Rational this.reduce(); // both reduce rightSide.reduce(); return numerator == rightSide.numerator && // returns if both numerator and denominator are the same denominator == rightSide.denominator; } return false; }
public Rational plus(Rational b) { Rational a = this; int x = gcd(a._numerator, b._numerator); int y = gcd(a._denominator, b._denominator); Rational z = new Rational( (a._numerator / x) * (b._denominator / y) + (b._numerator / x) * (a._denominator / y), lcm(a._denominator, b._denominator)); z._numerator *= x; System.out.print("Sum" + z); return z; }
public static void main(String[] args) { // creates new rationals from Rational.java Rational a = new Rational(8, 16); Rational b = new Rational(2, 3); // run method print result System.out.printf( "It is " + a.lessThanRat(b) + " to say %d/%d is less than %d/%d.\n", 8, 16, 2, 3); // To show false case Rational c = new Rational(2, 3); Rational d = new Rational(8, 16); System.out.printf( "It is " + c.lessThanRat(d) + " to say %d/%d is less than %d/%d.\n", 2, 3, 8, 16); }
/** @param args the command line arguments */ public static void main(String[] args) { int x = args.length; System.out.println("Hello"); // without the new there would not be an object created just a reference to one Rational r = new Rational(); Rational r2 = new Rational(1, 2); r.display(); String[] names = new String[100]; for (int i = 0; i < 100; i++) { names[i] = new String(); } r2.display(); r2.equals(r); }
/** * Return the next downbeat (beat 1) after the given point * * @param r * @return */ public Rational nextDownBeat(Rational r) { Rational meterEstablishedAt = _data.floorKey(r); TimeSignature ts = _data.get(meterEstablishedAt); Rational result = meterEstablishedAt; Rational inc = Rational.get(ts.TOP); while (result.compareTo(r) <= 0) { result = result.plus(inc); } // Look ahead - if a new Time Signature overrode our // old time signature before it completed a measure // we need to compensate for that. Rational higher = _data.higherKey(r); if (higher != null && result.compareTo(higher) > 0) result = higher; return result; }
public static void main(String args[]) { Rational zero = new Rational(), half = new Rational(1, 2), halfCopy = new Rational(half); zero.setNumerator(1); zero.setDenominator(3); System.out.println("zero's numerator: " + zero.getNumerator()); System.out.println("zero's denominator: " + zero.getDenominator()); halfCopy.addWith(half); System.out.println("halfCopy:" + halfCopy); }
/** * Returns a property for a tag with a RATIONAL value. If rawOutput is true, returns a property * with type RATIONAL. Otherwise, returns a property with type STRING, and the text representation * of the Rational value as a floating-point ratio. */ protected Property addRationalProperty(String name, Rational r, boolean rawOutput) { Property prop = null; if (!rawOutput) { prop = new Property(name, PropertyType.STRING, _format.format(r.toDouble())); } if (prop == null) { prop = new Property(name, PropertyType.RATIONAL, r); } return prop; }
public Rational getBeatOf(Rational r) { TimeSignature ts = getObjectAt(r); if (ts == null) { return null; } Rational meterEstablishedAt = _data.floorKey(r); if (meterEstablishedAt == null) return null; Rational newResult = r.minus(meterEstablishedAt).mod(new Rational(ts.TOP)).plus(Rational.ONE); return newResult; // Rational n = r.minus(meterEstablishedAt); // Integer i = Double.valueOf( n.toDouble() ).intValue() % ts.TOP; // Rational result = n.minus( new Rational(ts.TOP, 1).times(new Rational(i, 1)) ); // return result; }
public void divide() { operand_0 = operand_1.div(operand_0); operand_1 = new Rational(); }
public void subtract() { operand_0 = operand_1.minus(operand_0); operand_1 = new Rational(); }
public void multiply() { operand_0 = operand_1.mul(operand_0); operand_1 = new Rational(); }
// to divide, multiply by a flipped version public Rational divides(Rational b) { Rational a = this; Rational c = new Rational(b._denominator, b._numerator); return a.times(c); }
public void add() { operand_0 = operand_1.plus(operand_0); operand_1 = new Rational(); }
public static void main(String[] args) { Rational r1 = new Rational(1, 5); // rational number 1/5 Rational r2 = new Rational(1, 2); // rational number 1/2 r1.multiply(r2); // Multiplies r1 by r2, changes r1 to 1/10 (0.1) System.out.println(r1); System.out.println(r1.denominator); // 10 System.out.println(r1.numerator); // 1 System.out.println(); r2.divide(r1); // Divides r2 by r1, changes r2 to 5/1 (5.0) System.out.println(r2); System.out.println(r2.denominator); // 2 System.out.println(r2.numerator); // 10 System.out.println(); System.out.println(r2.gcd()); // 2 System.out.println(); r2.reduce(); System.out.println(r2.denominator); // 1 System.out.println(r2.numerator); // 5 System.out.println(); System.out.println(r1.compareTo(r2)); // -1 System.out.println(r2.compareTo(r1)); // 1 System.out.println(); System.out.println(gcd(32, 12)); // 4 System.out.println(); r1.add(r2); System.out.println(r1); // 5.1 System.out.println(); r2.subtract(r1); System.out.println(r2); // -0.1 System.out.println(); System.out.println(r1.compareTo(r2)); // 1 System.out.println(r2.compareTo(r1)); // -1 Rational r3 = new Rational(3, 4); Rational r4 = new Rational(4, 5); System.out.println(); System.out.println(r3.compareTo(r4)); // -1 System.out.println(r4.compareTo(r3)); // 1 Rational r5 = new Rational(33333333, 100000000); Rational r6 = new Rational(1, 3); System.out.println(); System.out.println(r5); // 0.33333333 System.out.println(r6); // 1/3 System.out.println(r5.compareTo(r6)); // 1 System.out.println(r6.compareTo(r5)); // -1 System.out.println("-------------"); System.out.println("-- .equals --"); System.out.println(r3.equals(r4)); // false Rational re0 = new Rational(0, 10); Rational re1 = new Rational(0, 3); System.out.println(re0.equals(re1)); // true System.out.println(re1.equals(re0)); // true Rational re2 = new Rational(2, 4); Rational re3 = new Rational(12, 24); Rational re4 = new Rational(-12, -24); System.out.println(re2.equals(re3)); // true System.out.println(re4.equals(re2)); // true Rational re5 = new Rational(3, 7); Rational re6 = new Rational(3, -7); Rational re7 = new Rational(-3, 7); System.out.println(re5.equals(re6)); // false System.out.println(re7.equals(re5)); // false System.out.println(re6.equals(re7)); // true }
// to subtract, just add a negated version public Rational minus(Rational b) { Rational a = this; Rational c = new Rational(b._numerator * -1, b._denominator); return a.plus(c); }
public IllegalArgumentToSquareRootException(Rational r) { super("Illegal argument to square root, should be in range [0,2147483647] got " + r.toString()); }
public static int gcd(int n, int d) { Rational r = new Rational(n, d); return r.gcd(); }
protected static Rational average(Rational r1, Rational r2) { long d1 = r1.getDenominator(); long d2 = r2.getDenominator(); Rational f1 = new Rational(r1.getNumerator() * d2, r1.getDenominator() * d2); Rational f2 = new Rational(r2.getNumerator() * d1, r2.getDenominator() * d1); return new Rational((f1.getNumerator() + f2.getNumerator()) / 2, f1.getDenominator()); }
public static void main(String[] args) { Rational r = new Rational(2, 3); // Stores the rational number 2/3 Rational s = new Rational(1, 2); // Stores the rational number 1/2 Rational t = new Rational(4, 18); // Stores the rational number 4/18 Rational v = new Rational(4, 8); Object a = 42; Object b = "hi"; r.add(s); // Adds r to s, changes r to 7/6. s remains 1/2 t.reduce(); // Changes t to 2/9 System.out.println(r + "\tshould be 7/6"); System.out.println(s + "\tshould be 1/2"); System.out.println(t + "\tshould be 2/9"); System.out.println(r.compareTo(s) + "\tshould be 1"); System.out.println(s.compareTo(r) + "\tshould be -1"); System.out.println(s.compareTo(s) + "\t should be 0"); System.out.println(s.compareTo(v) + "\t should be 0"); System.out.println(s.equals(a) + "\tshould be false"); System.out.println(s.equals(b) + "\tshould be false"); System.out.println(s.equals(r) + "\tshould be false"); System.out.println(s.equals(s) + "\tshould be true"); System.out.println(s.equals(v) + "\tshould be true"); }
public static void main(String[] args) { Rational r = new Rational(); Rational s = new Rational(8, 18); Rational t = new Rational(4, 6); Rational v = new Rational(7, 21); Rational w = new Rational(7, 21); /* System.out.println("~~--------------------------------~~"); System.out.println("Testing toString(): \n"); System.out.println(); System.out.println("Rational r:"); System.out.println(r); System.out.println("Rational s:"); System.out.println(s); System.out.println("Rational t:"); System.out.println(t); System.out.println("Rational v:"); System.out.println(v); System.out.println("~~--------------------------------~~"); System.out.println("Testing multiply(): "); System.out.println(); System.out.println("s * v"); System.out.println(); System.out.println("BEFORE:"); System.out.println("Rational s:"); System.out.println(s); System.out.println("Rational v:"); System.out.println(v); s.multiply(v); System.out.println("AFTER:"); System.out.println("Rational s:"); System.out.println(s); System.out.println("Rational v:"); System.out.println(v); System.out.println("~~--------------------------------~~"); System.out.println("Testing divide(): "); System.out.println(); System.out.println("v / s"); System.out.println(); System.out.println("BEFORE:"); System.out.println("Rational s:"); System.out.println(s); System.out.println("Rational v:"); System.out.println(v); v.divide(s); System.out.println("AFTER:"); System.out.println("Rational s:"); System.out.println(s); System.out.println("Rational v:"); System.out.println(v); System.out.println("~~--------------------------------~~"); System.out.println("Testing add(): "); System.out.println(); System.out.println("r + t"); System.out.println(); System.out.println("BEFORE:"); System.out.println("Rational r:"); System.out.println(r); System.out.println("Rational t:"); System.out.println(t); r.add(t); System.out.println("AFTER:"); System.out.println("Rational r:"); System.out.println(r); System.out.println("Rational t:"); System.out.println(t); System.out.println("~~--------------------------------~~"); System.out.println("Testing subtract(): "); System.out.println(); System.out.println("t - r"); System.out.println(); System.out.println("BEFORE:"); System.out.println("Rational t:"); System.out.println(t); System.out.println("Rational r:"); System.out.println(r); t.subtract(r); System.out.println("AFTER:"); System.out.println("Rational t:"); System.out.println(t); System.out.println("Rational r:"); System.out.println(r); */ System.out.println("~~--------------------------------------------~~"); System.out.println("Testing compareTo(): "); System.out.println(); System.out.println("Rational r:"); System.out.println(r); System.out.println("Rational w:"); System.out.println(w); System.out.print("compare r and w: "); System.out.print(r.compareTo(w) + "\n\n"); // what how does compareTo function when numbers are equal? floats are weird Rational apple = new Rational(3, 9); Rational banana = new Rational(1, 3); System.out.println("Testing compareTo(): "); System.out.println(); System.out.println("Rational apple:"); System.out.println(apple); System.out.println("Rational banana:"); System.out.println(banana); System.out.println("compare apple and banana: "); System.out.println(apple.compareTo(banana) + "\n\n"); System.out.println("Rational v:"); System.out.println(v); System.out.println("Rational w:"); System.out.println(w); System.out.print("compare v and w: "); System.out.print(v.compareTo(w) + "\n\n"); System.out.println("Rational t:"); System.out.println(t); System.out.println("Rational s:"); System.out.println(s); System.out.print("compare t and s: "); System.out.print(t.compareTo(s) + "\n\n"); System.out.println("~~--------------Testing equals()------------------~~"); Object a = new Rational(1, 7); Object b = new Rational(2, 14); Object c = new Rational(3, 14); Object d = new Rational(1, 7); System.out.println(a.equals(b)); System.out.println(a.equals(c)); System.out.println(a.equals(d)); System.out.println(b.equals(c)); System.out.println("~~--------------------------------~~"); }