Last active
January 1, 2016 04:19
-
-
Save mr-fool/8091255 to your computer and use it in GitHub Desktop.
Rational Calculator added normalize function in the Rational classand reduce functionMatrixRational fixed shallow copy on transpose
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| public class MatrixRational | |
| { | |
| private Rational matrix [][] = new Rational[0][0]; //initialize it in case of weird errors | |
| private Rational transpose [][] = new Rational[0][0]; | |
| public MatrixRational(int size) | |
| { | |
| matrix = new Rational[size][size]; | |
| for (int i = 0; i < size; i++) | |
| { | |
| for (int j= 0; j < size; j++) | |
| { | |
| matrix[i][j] = new Rational(); | |
| System.out.println(matrix[i][j]); | |
| } | |
| } | |
| } | |
| public void setMatrix(Rational m[][]) | |
| { | |
| for (int i = 0; i < matrix.length; i++) | |
| { | |
| for (int j= 0; j < matrix.length; j++) | |
| { | |
| this.matrix[i][j] = m[i][j]; | |
| System.out.println("setMatrix" +this.matrix[i][j]); | |
| } | |
| } | |
| } | |
| public Rational [][] matSqr() | |
| { | |
| Rational sum = new Rational(); | |
| Rational sqrt[][] = new Rational [matrix.length][matrix.length]; | |
| for (int i = 0; i < matrix.length; i++) | |
| { | |
| for (int j= 0; j < matrix.length; j++) | |
| { | |
| for (int k = 0 ; k < matrix.length ; k++ ) | |
| { | |
| sum = sum.add(matrix[i][k].multiplication( matrix[k][j])); | |
| } | |
| sqrt[i][j] = sum; | |
| } | |
| } | |
| return sqrt; | |
| } | |
| public boolean isSymmetric() | |
| { | |
| for (int i = 0; i < matrix.length; ++i) | |
| { | |
| for (int j = 0; j < i; ++j) | |
| { | |
| if (!matrix[i][j].equals(matrix[j][i])) | |
| { | |
| System.out.println("Matrix is not symmetric"); | |
| return false; | |
| } | |
| } | |
| } | |
| System.out.println("Matrix is symmetric"); | |
| return true; | |
| } | |
| public void transpose () | |
| { | |
| //Checking if it is a square matrix | |
| if (matrix.length == matrix[0].length) | |
| { | |
| System.out.println("Condition for transpose is satisfied"); | |
| for (int i = 0; i < matrix.length; ++i) | |
| { | |
| for (int j = 0; j < i; ++j) | |
| { | |
| //Deep Copy | |
| transpose [i][j] = new Rational( matrix[j][i].getNumerator(), matrix[j][i].getDenominator()); | |
| } | |
| } | |
| } | |
| else | |
| { | |
| System.err.println("Condition for transpose not satisfied"); | |
| System.exit(0); | |
| } | |
| } | |
| public String toString(){ | |
| String str = ""; // holds the running string | |
| // Loop through each index of the matrix | |
| for (int i = 0; i < matrix.length; i++){ | |
| for (int j=0; j < matrix[i].length; j++){ | |
| // append the value at current index | |
| str += (matrix[i][j].toString() + " "); | |
| } | |
| // end of row, append a new line | |
| str += "\n"; | |
| } | |
| // return the string | |
| return str; | |
| } | |
| } | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| public class Rational | |
| { | |
| //declaring variables | |
| private int numerator = 0; //initialization in case of weird error | |
| private int denominator = 0; //initialization in case of weird error | |
| public Rational (int num, int denomin) | |
| { | |
| this.numerator = num; | |
| this.denominator = denomin; | |
| //System.out.println(this.numerator +"/"+this.denominator); | |
| } | |
| public Rational (int wholeNumber) | |
| { | |
| this.denominator = 1; | |
| this.numerator = wholeNumber; | |
| //System.out.println(this.numerator +"/"+this.denominator); | |
| } | |
| public Rational () | |
| { | |
| this.numerator = 0; | |
| this.denominator = 1; | |
| //System.out.println(this.numerator +"/"+this.denominator); | |
| } | |
| public int getNumerator() | |
| { | |
| return (this.numerator); | |
| } | |
| public int getDenominator() | |
| { | |
| return (this.denominator); | |
| } | |
| public void setNumerator(int numerator) | |
| { | |
| this.numerator = numerator; | |
| } | |
| public void setDenominator(int denominator) | |
| { | |
| this.denominator = denominator; | |
| } | |
| public boolean equals (Rational rationalNumber2) | |
| { | |
| int firstStep = this.getNumerator() * rationalNumber2.getDenominator(); | |
| int secondStep = this.getDenominator() * rationalNumber2.getNumerator(); | |
| if ( firstStep == secondStep ) | |
| { | |
| //System.out.print("input 1 equals to input 2\n"); | |
| return true; // no idea why we need it | |
| } | |
| else | |
| { | |
| //System.out.print("input 1 does not equal to input 2\n"); | |
| return false; | |
| } | |
| } | |
| public String toString() | |
| { | |
| String number = String.valueOf(getNumerator() )+ "/ "+ String.valueOf(getDenominator() ); | |
| return (number); //no idea why we need it | |
| } | |
| public static Rational add(Rational rationalNumber1, Rational rationalNumber2) | |
| { | |
| if (rationalNumber1.getDenominator() == 0) | |
| { | |
| System.out.print("Invalid Denominator Input"); | |
| System.exit(0); | |
| } | |
| if (rationalNumber2.getDenominator() == 0) | |
| { | |
| System.out.print("Invalid Denominator Input"); | |
| System.exit(0); | |
| } | |
| int finalDenominator = (rationalNumber1.getDenominator() * rationalNumber2.getDenominator() ); | |
| int rationalNumber1Numerator = (rationalNumber1.getNumerator() * rationalNumber2.getDenominator() ); | |
| int rationalNumber2Numerator = (rationalNumber2.getNumerator() * rationalNumber1.getDenominator() ); | |
| int sum = rationalNumber1Numerator + rationalNumber2Numerator; | |
| Rational additionResult = new Rational(sum, finalDenominator); | |
| return (additionResult); | |
| } | |
| public static Rational subtraction(Rational rationalNumber1, Rational rationalNumber2) | |
| { | |
| if (rationalNumber1.getDenominator() == 0) | |
| { | |
| System.out.print("Invalid Denominator Input"); | |
| System.exit(0); | |
| } | |
| if (rationalNumber2.getDenominator() == 0) | |
| { | |
| System.out.print("Invalid Denominator Input"); | |
| System.exit(0); | |
| } | |
| int finalDenominator = (rationalNumber1.getDenominator() * rationalNumber2.getDenominator() ); | |
| int rationalNumber1Numerator = (rationalNumber1.getNumerator() * rationalNumber2.getDenominator() ); | |
| int rationalNumber2Numerator = (rationalNumber2.getNumerator() * rationalNumber1.getDenominator() ); | |
| int subtraction = rationalNumber1Numerator - rationalNumber2Numerator; | |
| Rational subtractionResult = new Rational(subtraction, finalDenominator); | |
| return (subtractionResult); | |
| } | |
| public static Rational multiplication(Rational rationalNumber1, Rational rationalNumber2) | |
| { | |
| if (rationalNumber1.getDenominator() == 0) | |
| { | |
| System.out.print("Invalid Denominator Input"); | |
| System.exit(0); | |
| } | |
| if (rationalNumber2.getDenominator() == 0) | |
| { | |
| System.out.print("Invalid Denominator Input"); | |
| System.exit(0); | |
| } | |
| int finalDenominator = rationalNumber1.getDenominator() * rationalNumber2.getDenominator() ; | |
| int finalNumerator = rationalNumber1.getNumerator() * rationalNumber2.getNumerator(); | |
| Rational multiplicationResult = new Rational(finalNumerator, finalDenominator); | |
| return (multiplicationResult); | |
| } | |
| public static Rational division(Rational rationalNumber1, Rational rationalNumber2) | |
| { | |
| if (rationalNumber1.getDenominator() == 0) | |
| { | |
| System.out.print("Invalid Denominator Input"); | |
| System.exit(0); | |
| } | |
| if (rationalNumber2.getDenominator() == 0) | |
| { | |
| System.out.print("Invalid Denominator Input"); | |
| System.exit(0); | |
| } | |
| int finalDenominator = rationalNumber1.getDenominator() * rationalNumber2.getNumerator() ; | |
| int finalNumerator = rationalNumber1.getNumerator() * rationalNumber2.getDenominator(); | |
| Rational divisionResult = new Rational(finalNumerator, finalDenominator); | |
| return (divisionResult); | |
| } | |
| public Rational add(Rational rationalNumber) | |
| { | |
| if (this.getDenominator() == 0) | |
| { | |
| System.out.print("Invalid Denominator Input"); | |
| System.exit(0); | |
| } | |
| if (rationalNumber.getDenominator() == 0) | |
| { | |
| System.out.print("Invalid Denominator Input"); | |
| System.exit(0); | |
| } | |
| int finalDenominator = (this.getDenominator() * rationalNumber.getDenominator() ); | |
| int rationalNumber1Numerator = (this.getNumerator() * rationalNumber.getDenominator() ); | |
| int rationalNumber2Numerator = (rationalNumber.getNumerator() * this.getDenominator() ); | |
| int sum = rationalNumber1Numerator + rationalNumber2Numerator; | |
| Rational additionResult2 = new Rational(sum, finalDenominator); | |
| return (additionResult2); | |
| } | |
| public Rational subtraction(Rational rationalNumber) | |
| { | |
| if (this.getDenominator() == 0) | |
| { | |
| System.out.print("Invalid Denominator Input"); | |
| System.exit(0); | |
| } | |
| if (rationalNumber.getDenominator() == 0) | |
| { | |
| System.out.print("Invalid Denominator Input"); | |
| System.exit(0); | |
| } | |
| int finalDenominator = (this.getDenominator() * rationalNumber.getDenominator() ); | |
| int rationalNumber1Numerator = (this.getNumerator() * rationalNumber.getDenominator() ); | |
| int rationalNumber2Numerator = (rationalNumber.getNumerator() * this.getDenominator() ); | |
| int subtraction = rationalNumber1Numerator - rationalNumber2Numerator; | |
| Rational subtractionResult2 = new Rational(subtraction, finalDenominator); | |
| return (subtractionResult2); | |
| } | |
| public Rational multiplication(Rational rationalNumber) | |
| { | |
| if (this.getDenominator() == 0) | |
| { | |
| System.out.print("Invalid Denominator Input"); | |
| System.exit(0); | |
| } | |
| if (rationalNumber.getDenominator() == 0) | |
| { | |
| System.out.print("Invalid Denominator Input"); | |
| System.exit(0); | |
| } | |
| int finalDenominator = this.getDenominator() * rationalNumber.getDenominator() ; | |
| int finalNumerator = this.getNumerator() * rationalNumber.getNumerator(); | |
| Rational multiplicationResult2 = new Rational(finalNumerator, finalDenominator); | |
| return (multiplicationResult2); | |
| } | |
| public Rational division(Rational rationalNumber) | |
| { | |
| if (this.getDenominator() == 0) | |
| { | |
| System.out.print("Invalid Denominator Input"); | |
| System.exit(0); | |
| } | |
| if (rationalNumber.getDenominator() == 0) | |
| { | |
| System.out.print("Invalid Denominator Input"); | |
| System.exit(0); | |
| } | |
| int finalDenominator = this.getDenominator() * rationalNumber.getNumerator() ; | |
| int finalNumerator = this.getNumerator() * rationalNumber.getDenominator(); | |
| Rational divisionResult2 = new Rational(finalNumerator, finalDenominator); | |
| return (divisionResult2); | |
| } | |
| public void normalize(){ | |
| // If the denominator is negative | |
| if (denominator < 0){ | |
| // Multiple both numerator and denominator by -1 | |
| numerator *= -1; | |
| denominator *= -1; | |
| } | |
| } | |
| public void reduce() { | |
| //Creating a copy of numerator and denominator to work with | |
| int num = this.numerator; | |
| int denom = this.denominator; | |
| //Calculating gcd | |
| while (denom != 0) { | |
| int times = denom; | |
| denom = num % denom; | |
| num = times; | |
| } | |
| int gcd = num; | |
| //Setting the result | |
| this.numerator = this.numerator/ gcd; | |
| this.denominator = this.denominator/ gcd; | |
| } | |
| public void reduce(Rational rationalNumber) { | |
| //Creating a copy of numerator and denominator to work with | |
| int num = rationalNumber.numerator; | |
| int denom = rationalNumber.denominator; | |
| //Calculating gcd | |
| while (denom != 0) { | |
| int times = denom; | |
| denom = num % denom; | |
| num = times; | |
| } | |
| int gcd = num; | |
| //Setting the result | |
| rationalNumber.numerator = rationalNumber.numerator/ gcd; | |
| rationalNumber.denominator = rationalNumber.denominator/ gcd; | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment