From 9f2340729f785906df3b10fb12814c688eac318b Mon Sep 17 00:00:00 2001 From: Alexander Ruban <131919965+AlexanderORuban@users.noreply.github.com> Date: Tue, 5 Nov 2024 22:50:25 +0000 Subject: [PATCH 1/7] Started the project. --- archive/c/c-sharp/FractionMath.cs | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 archive/c/c-sharp/FractionMath.cs diff --git a/archive/c/c-sharp/FractionMath.cs b/archive/c/c-sharp/FractionMath.cs new file mode 100644 index 000000000..e69de29bb From 4cf0a6bbb0c50ed93eb8e8979304b275ba2bc476 Mon Sep 17 00:00:00 2001 From: Alexander Ruban <131919965+AlexanderORuban@users.noreply.github.com> Date: Tue, 12 Nov 2024 08:17:29 +0000 Subject: [PATCH 2/7] Began FractionMath, adding fields, a constructor, and starting the GCD/GCF method. --- archive/c/c-sharp/FractionMath.cs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/archive/c/c-sharp/FractionMath.cs b/archive/c/c-sharp/FractionMath.cs index e69de29bb..778a114dc 100644 --- a/archive/c/c-sharp/FractionMath.cs +++ b/archive/c/c-sharp/FractionMath.cs @@ -0,0 +1,24 @@ +namespace SamplePrograms +{ + public class FractionMath + { + private int numerator; + private int denominator; + + public FractionMath(int numerator, int denominator) { + if (denominator == 0) { + System.Console.WriteLine("Denominator cannot be zero"); // Look into different types of exceptions + } + + this.numerator = numerator; + this.denominator = denominator; + + // Make sure to simplify the fraction using GCD + } + + private int GCD(int x, int y) { + // look into creating the GCD method + } + + } +} \ No newline at end of file From bbd5f4453af85eddf15ffa280d4b726df6471aaf Mon Sep 17 00:00:00 2001 From: Alexander Ruban <131919965+AlexanderORuban@users.noreply.github.com> Date: Tue, 12 Nov 2024 16:35:04 +0000 Subject: [PATCH 3/7] Added exception handling to FractionMath, Finished GCD, and created both Simplify and StringToFraction. --- archive/c/c-sharp/FractionMath.cs | 68 +++++++++++++++++++++++++------ 1 file changed, 56 insertions(+), 12 deletions(-) diff --git a/archive/c/c-sharp/FractionMath.cs b/archive/c/c-sharp/FractionMath.cs index 778a114dc..909dba1f4 100644 --- a/archive/c/c-sharp/FractionMath.cs +++ b/archive/c/c-sharp/FractionMath.cs @@ -4,21 +4,65 @@ public class FractionMath { private int numerator; private int denominator; - - public FractionMath(int numerator, int denominator) { - if (denominator == 0) { - System.Console.WriteLine("Denominator cannot be zero"); // Look into different types of exceptions + + public FractionMath(int numerator, int denominator) + { + if (denominator == 0) + { + throw new ArgumentException("Denominator cannot be zero."); } - + this.numerator = numerator; this.denominator = denominator; - // Make sure to simplify the fraction using GCD + Simplify(); + } + + // GCD method using the Euclidean algorithm in an iterative approach + // Orginal algorithm was found on GeeksforGeeks, modified for clarity: + // https://www.geeksforgeeks.org/program-to-find-gcd-or-hcf-of-two-numbers/# + private int GCD(int x, int y) + { + + while (y != 0) + { + int z = x; + x = y; + y %= z; + } + + return x; } - - private int GCD(int x, int y) { - // look into creating the GCD method + + private void Simplify() + { + int gcd = GCD(numerator, denominator); + + numerator /= gcd; + denominator /= gcd; + + if (denominator < 0) + { + numerator = -numerator; + denominator = -denominator; + } + } + + public FractionMath StringToFraction(string fractionString) { + string[] numbers = fractionString.Split('/'); + + if (numbers.Length != 2) { + throw new FormatException("Invalid fraction. A format of 'numerator/denominator' is expected."); + } + + int numerator = int.Parse(numbers[0]); + int denominator = int.Parse(numbers[1]); + + if (denominator == 0) + { + throw new ArgumentException("Denominator cannot be zero."); + } + + return new FractionMath(numerator, denominator); } - - } -} \ No newline at end of file + } \ No newline at end of file From e714cf33cb855ab9f013aec11e34ad1540035e16 Mon Sep 17 00:00:00 2001 From: Alexander Ruban <131919965+AlexanderORuban@users.noreply.github.com> Date: Tue, 12 Nov 2024 17:07:15 +0000 Subject: [PATCH 4/7] Added operator methods. --- archive/c/c-sharp/FractionMath.cs | 117 ++++++++++++++++++++++++++++-- 1 file changed, 112 insertions(+), 5 deletions(-) diff --git a/archive/c/c-sharp/FractionMath.cs b/archive/c/c-sharp/FractionMath.cs index 909dba1f4..3e870c4c8 100644 --- a/archive/c/c-sharp/FractionMath.cs +++ b/archive/c/c-sharp/FractionMath.cs @@ -48,21 +48,128 @@ private void Simplify() } } - public FractionMath StringToFraction(string fractionString) { + public FractionMath StringToFraction(string fractionString) + { string[] numbers = fractionString.Split('/'); - if (numbers.Length != 2) { + if (numbers.Length != 2) + { throw new FormatException("Invalid fraction. A format of 'numerator/denominator' is expected."); - } + } int numerator = int.Parse(numbers[0]); int denominator = int.Parse(numbers[1]); - + if (denominator == 0) { throw new ArgumentException("Denominator cannot be zero."); } - return new FractionMath(numerator, denominator); + return FractionMath(numerator, denominator); + } + + public FractionMath Add(FractionMath f1, FractionMath f2) + { + int newNumerator = f1.numerator * f2.denominator + f2.numerator * f1.denominator; + int newDenominator = f1.denominator * f2.denominator; + return FractionMath(newNumerator, newDenominator); + } + + public FractionMath Subtract(FractionMath f1, FractionMath f2) + { + int newNumerator = f1.numerator * f2.denominator - f2.numerator * f1.denominator; + int newDenominator = f1.denominator * f2.denominator; + return FractionMath(newNumerator, newDenominator); + } + + public FractionMath Multiply(FractionMath f1, FractionMath f2) + { + int newNumerator = f1.numerator * f2.numerator; + int newDenominator = f1.denominator * f2.denominator; + return FractionMath(newNumerator, newDenominator); + } + + public FractionMath Divide(FractionMath f1, FractionMath f2) + { + int newNumerator = f1.numerator * f2.denominator; + int newDenominator = f1.denominator * f2.numerator; + return FractionMath(newNumerator, newDenominator); + } + + public int EqualsTo(FractionMath f1, FractionMath f2) + { + if (f1.numerator * f2.denominator == f1.denominator * f2.numerator) + { + return 1; + } + else + { + return 0; + } + } + + public int GreaterThan(FractionMath f1, FractionMath f2) + { + if (f1.numerator * f2.denominator > f1.denominator * f2.numerator) + { + return 1; + } + else + { + return 0; + } + } + + public int LessThan(FractionMath f1, FractionMath f2) + { + if (f1.numerator * f2.denominator < f1.denominator * f2.numerator) + { + return 1; + } + else + { + return 0; + } + } + + public int GreaterThanEquals(FractionMath f1, FractionMath f2) + { + if (f1.numerator * f2.denominator >= f1.denominator * f2.numerator) + { + return 1; + } + else + { + return 0; + } + } + + public int LessThanEquals(FractionMath f1, FractionMath f2) + { + if (f1.numerator * f2.denominator <= f1.denominator * f2.numerator) + { + return 1; + } + else + { + return 0; + } + } + + public int NotEquals(FractionMath f1, FractionMath f2) + { + if (f1.numerator * f2.denominator != f1.denominator * f2.numerator) + { + return 1; + } + else + { + return 0; + } + } + + public static void Main(string[] args) + { + } } \ No newline at end of file From 64cbc88c0910a899e5a39ebf5ad9cef05f7c771d Mon Sep 17 00:00:00 2001 From: Alexander Ruban <131919965+AlexanderORuban@users.noreply.github.com> Date: Tue, 12 Nov 2024 17:46:29 +0000 Subject: [PATCH 5/7] Finished projectm, but encountering errors. --- archive/c/c-sharp/FractionMath.cs | 193 ++++++++++++++++++------------ 1 file changed, 114 insertions(+), 79 deletions(-) diff --git a/archive/c/c-sharp/FractionMath.cs b/archive/c/c-sharp/FractionMath.cs index 3e870c4c8..93e80b904 100644 --- a/archive/c/c-sharp/FractionMath.cs +++ b/archive/c/c-sharp/FractionMath.cs @@ -1,3 +1,5 @@ +using System; + namespace SamplePrograms { public class FractionMath @@ -5,7 +7,7 @@ public class FractionMath private int numerator; private int denominator; - public FractionMath(int numerator, int denominator) + public FractionMath(int numerator = 0, int denominator = 0) { if (denominator == 0) { @@ -18,26 +20,35 @@ public FractionMath(int numerator, int denominator) Simplify(); } - // GCD method using the Euclidean algorithm in an iterative approach - // Orginal algorithm was found on GeeksforGeeks, modified for clarity: - // https://www.geeksforgeeks.org/program-to-find-gcd-or-hcf-of-two-numbers/# + // public override bool Equals(object obj) + // { + // if (obj is FractionMath other) + // { + // return this == other; // Use the overloaded `==` operator + // } + // return false; + // } + + // public override int GetHashCode() + // { + // return (numerator, denominator).GetHashCode(); + // } + + private int GCD(int x, int y) { - while (y != 0) { int z = x; x = y; y %= z; } - return x; } private void Simplify() { int gcd = GCD(numerator, denominator); - numerator /= gcd; denominator /= gcd; @@ -48,10 +59,11 @@ private void Simplify() } } - public FractionMath StringToFraction(string fractionString) + public override string ToString() => $"{numerator}/{denominator}"; // Fixed semicolon here + + public static FractionMath Parse(string fractionString) // Fixed Parse method { string[] numbers = fractionString.Split('/'); - if (numbers.Length != 2) { throw new FormatException("Invalid fraction. A format of 'numerator/denominator' is expected."); @@ -60,116 +72,139 @@ public FractionMath StringToFraction(string fractionString) int numerator = int.Parse(numbers[0]); int denominator = int.Parse(numbers[1]); - if (denominator == 0) - { - throw new ArgumentException("Denominator cannot be zero."); - } - - return FractionMath(numerator, denominator); + return new FractionMath(numerator, denominator); } - public FractionMath Add(FractionMath f1, FractionMath f2) + public static FractionMath operator +(FractionMath f1, FractionMath f2) { int newNumerator = f1.numerator * f2.denominator + f2.numerator * f1.denominator; int newDenominator = f1.denominator * f2.denominator; - return FractionMath(newNumerator, newDenominator); + FractionMath result = new FractionMath(newNumerator, newDenominator); + result.Simplify(); // Only simplify after the operation + return result; } - public FractionMath Subtract(FractionMath f1, FractionMath f2) + public static FractionMath operator -(FractionMath f1, FractionMath f2) { int newNumerator = f1.numerator * f2.denominator - f2.numerator * f1.denominator; int newDenominator = f1.denominator * f2.denominator; - return FractionMath(newNumerator, newDenominator); + return new FractionMath(newNumerator, newDenominator); // Fixed return } - public FractionMath Multiply(FractionMath f1, FractionMath f2) + public static FractionMath operator *(FractionMath f1, FractionMath f2) { int newNumerator = f1.numerator * f2.numerator; int newDenominator = f1.denominator * f2.denominator; - return FractionMath(newNumerator, newDenominator); + FractionMath result = new FractionMath(newNumerator, newDenominator); + result.Simplify(); // Only simplify after the operation + return result; } - public FractionMath Divide(FractionMath f1, FractionMath f2) + public static FractionMath operator /(FractionMath f1, FractionMath f2) { int newNumerator = f1.numerator * f2.denominator; int newDenominator = f1.denominator * f2.numerator; - return FractionMath(newNumerator, newDenominator); + return new FractionMath(newNumerator, newDenominator); // Fixed return } - public int EqualsTo(FractionMath f1, FractionMath f2) + public static bool operator ==(FractionMath f1, FractionMath f2) { - if (f1.numerator * f2.denominator == f1.denominator * f2.numerator) - { - return 1; - } - else - { - return 0; - } + return f1.numerator * f2.denominator == f1.denominator * f2.numerator; } - public int GreaterThan(FractionMath f1, FractionMath f2) + public static bool operator !=(FractionMath f1, FractionMath f2) { - if (f1.numerator * f2.denominator > f1.denominator * f2.numerator) - { - return 1; - } - else - { - return 0; - } + return !(f1 == f2); } - public int LessThan(FractionMath f1, FractionMath f2) + public static bool operator >(FractionMath f1, FractionMath f2) { - if (f1.numerator * f2.denominator < f1.denominator * f2.numerator) - { - return 1; - } - else - { - return 0; - } + return f1.numerator * f2.denominator > f1.denominator * f2.numerator; } - public int GreaterThanEquals(FractionMath f1, FractionMath f2) + public static bool operator <(FractionMath f1, FractionMath f2) { - if (f1.numerator * f2.denominator >= f1.denominator * f2.numerator) - { - return 1; - } - else - { - return 0; - } + return f1.numerator * f2.denominator < f1.denominator * f2.numerator; } - public int LessThanEquals(FractionMath f1, FractionMath f2) + public static bool operator >=(FractionMath f1, FractionMath f2) { - if (f1.numerator * f2.denominator <= f1.denominator * f2.numerator) - { - return 1; - } - else - { - return 0; - } + return f1 > f2 || f1 == f2; } - public int NotEquals(FractionMath f1, FractionMath f2) + public static bool operator <=(FractionMath f1, FractionMath f2) { - if (f1.numerator * f2.denominator != f1.denominator * f2.numerator) - { - return 1; - } - else - { - return 0; - } + return f1 < f2 || f1 == f2; } public static void Main(string[] args) { - + if (args.Length != 3) + { + Console.WriteLine("Usage: ./fraction-math operand1 operator operand2"); + return; + } + + try + { + FractionMath operand1 = Parse(args[0]); + string operation = args[1]; + FractionMath operand2 = Parse(args[2]); + + FractionMath result; + bool comparisonResult; + + switch (operation) + { + case "+": + result = operand1 + operand2; + Console.WriteLine(result); + break; + case "-": + result = operand1 - operand2; + Console.WriteLine(result); + break; + case "*": + result = operand1 * operand2; + Console.WriteLine(result); + break; + case "/": + result = operand1 / operand2; + Console.WriteLine(result); + break; + case "==": + comparisonResult = operand1 == operand2; + Console.WriteLine(comparisonResult ? "1" : "0"); + break; + case "!=": + comparisonResult = operand1 != operand2; + Console.WriteLine(comparisonResult ? "1" : "0"); + break; + case ">": + comparisonResult = operand1 > operand2; + Console.WriteLine(comparisonResult ? "1" : "0"); + break; + case "<": + comparisonResult = operand1 < operand2; + Console.WriteLine(comparisonResult ? "1" : "0"); + break; + case ">=": + comparisonResult = operand1 >= operand2; + Console.WriteLine(comparisonResult ? "1" : "0"); + break; + case "<=": + comparisonResult = operand1 <= operand2; + Console.WriteLine(comparisonResult ? "1" : "0"); + break; + default: + Console.WriteLine($"Error: Invalid operator '{operation}'"); + break; + } + } + catch (Exception e) + { + Console.WriteLine($"Error: {e.Message}"); + } } - } \ No newline at end of file + } +} From 7cf200086ef05d972feb535ce6ab6d347f3a1a4a Mon Sep 17 00:00:00 2001 From: Alexander Ruban <131919965+AlexanderORuban@users.noreply.github.com> Date: Tue, 12 Nov 2024 20:41:18 +0000 Subject: [PATCH 6/7] Finised, passing all tests. --- archive/c/c-sharp/FractionMath.cs | 39 +++++++++---------------------- 1 file changed, 11 insertions(+), 28 deletions(-) diff --git a/archive/c/c-sharp/FractionMath.cs b/archive/c/c-sharp/FractionMath.cs index 93e80b904..7db363ae9 100644 --- a/archive/c/c-sharp/FractionMath.cs +++ b/archive/c/c-sharp/FractionMath.cs @@ -7,7 +7,7 @@ public class FractionMath private int numerator; private int denominator; - public FractionMath(int numerator = 0, int denominator = 0) + public FractionMath(int numerator = 0, int denominator = 1) { if (denominator == 0) { @@ -16,25 +16,8 @@ public FractionMath(int numerator = 0, int denominator = 0) this.numerator = numerator; this.denominator = denominator; - - Simplify(); } - // public override bool Equals(object obj) - // { - // if (obj is FractionMath other) - // { - // return this == other; // Use the overloaded `==` operator - // } - // return false; - // } - - // public override int GetHashCode() - // { - // return (numerator, denominator).GetHashCode(); - // } - - private int GCD(int x, int y) { while (y != 0) @@ -59,9 +42,13 @@ private void Simplify() } } - public override string ToString() => $"{numerator}/{denominator}"; // Fixed semicolon here + public override string ToString() + { + Simplify(); + return $"{numerator}/{denominator}"; + } - public static FractionMath Parse(string fractionString) // Fixed Parse method + public static FractionMath Parse(string fractionString) { string[] numbers = fractionString.Split('/'); if (numbers.Length != 2) @@ -79,32 +66,28 @@ public static FractionMath Parse(string fractionString) // Fixed Parse method { int newNumerator = f1.numerator * f2.denominator + f2.numerator * f1.denominator; int newDenominator = f1.denominator * f2.denominator; - FractionMath result = new FractionMath(newNumerator, newDenominator); - result.Simplify(); // Only simplify after the operation - return result; + return new FractionMath(newNumerator, newDenominator); } public static FractionMath operator -(FractionMath f1, FractionMath f2) { int newNumerator = f1.numerator * f2.denominator - f2.numerator * f1.denominator; int newDenominator = f1.denominator * f2.denominator; - return new FractionMath(newNumerator, newDenominator); // Fixed return + return new FractionMath(newNumerator, newDenominator); } public static FractionMath operator *(FractionMath f1, FractionMath f2) { int newNumerator = f1.numerator * f2.numerator; int newDenominator = f1.denominator * f2.denominator; - FractionMath result = new FractionMath(newNumerator, newDenominator); - result.Simplify(); // Only simplify after the operation - return result; + return new FractionMath(newNumerator, newDenominator); } public static FractionMath operator /(FractionMath f1, FractionMath f2) { int newNumerator = f1.numerator * f2.denominator; int newDenominator = f1.denominator * f2.numerator; - return new FractionMath(newNumerator, newDenominator); // Fixed return + return new FractionMath(newNumerator, newDenominator); } public static bool operator ==(FractionMath f1, FractionMath f2) From 0177df3d7a450b38309a91398307f7d978ece938 Mon Sep 17 00:00:00 2001 From: Alexander Ruban <131919965+AlexanderORuban@users.noreply.github.com> Date: Wed, 13 Nov 2024 01:34:41 +0000 Subject: [PATCH 7/7] Solved failing test cases. --- archive/c/c-sharp/FractionMath.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/archive/c/c-sharp/FractionMath.cs b/archive/c/c-sharp/FractionMath.cs index 7db363ae9..5738389cb 100644 --- a/archive/c/c-sharp/FractionMath.cs +++ b/archive/c/c-sharp/FractionMath.cs @@ -17,14 +17,17 @@ public FractionMath(int numerator = 0, int denominator = 1) this.numerator = numerator; this.denominator = denominator; } - + + // GCD method using the Euclidean algorithm in an iterative approach + // Orginal algorithm was found on GeeksforGeeks, modified for clarity: + // https://www.geeksforgeeks.org/program-to-find-gcd-or-hcf-of-two-numbers/# private int GCD(int x, int y) { while (y != 0) { int z = x; x = y; - y %= z; + y = z % y; } return x; }