TECHNOLOGIES
FORUMS
JOBS
BOOKS
EVENTS
INTERVIEWS
Live
MORE
LEARN
Training
CAREER
MEMBERS
VIDEOS
NEWS
BLOGS
Sign Up
Login
No unread comment.
View All Comments
No unread message.
View All Messages
No unread notification.
View All Notifications
Answers
Post
An Article
A Blog
A News
A Video
An EBook
An Interview Question
Ask Question
Forums
Monthly Leaders
Forum guidelines
Prime b
NA
810
347k
Classes and operator overload
Jan 31 2012 11:34 PM
!~
using System;
class Fraction
{
int wholeNumber;
int numerator;
int denominator = 1;
public int WholeNumber
{
get{ return wholeNumber; }
set{ wholeNumber = value; }
}
public int Numerator
{
get{ return numerator; }
set{ numerator = value; }
}
public int Denominator
{
get{ return denominator; }
set{ denominator = (value != 0) ? value : 1; }
}
public Fraction(int wholeNumber, int numerator, int denominator)
{
this.wholeNumber = wholeNumber;
this.numerator = numerator;
this.Denominator = denominator; // use the property to validate here
}
public Fraction(int numerator, int denominator)
{
this.wholeNumber = 0;
this.numerator = numerator;
this.Denominator = denominator; // use the property to validate here
}
public Fraction()
{
this.wholeNumber = 0;
this.numerator = 0;
this.denominator = 1;
}
public void Reduce()
{
if (numerator == 0)
{
denominator = 1;
return;
}
int gcd = GetGCD(Math.Abs(numerator), Math.Abs(denominator));
numerator /= gcd;
denominator /= gcd;
}
public override string ToString()
{
return String.Format("{0} {1}/{2}", wholeNumber, numerator, denominator);
}
public static Fraction operator +(Fraction f1, Fraction f2)
{
f1.numerator += f1.wholeNumber * f1.denominator;
f1.wholeNumber = 0;
f2.numerator += f2.wholeNumber * f2.denominator;
f2.wholeNumber = 0;
int commonDenom = f1.denominator * f2.denominator;
f1.numerator *= f2.denominator;
f2.numerator *= f1.denominator;
f1.denominator = commonDenom;
f2.denominator = commonDenom;
Fraction f3 = new Fraction(f1.numerator + f2.numerator, commonDenom);
f3.Reduce();
if (Math.Abs(f3.numerator) >= Math.Abs(f3.denominator))
{
f3.wholeNumber += f3.numerator / f3.denominator;
f3.numerator = f3.numerator % f3.denominator;
if (f3.numerator == 0) f3.denominator = 1;
}
return f3;
}
static int GetGCD(params int[] numbers)
{
// get the smallest number as the GCD can't be larger than that
Array.Sort(numbers);
int min = numbers[0];
if (min < 1) throw new ArgumentException("The array can't include a number less than 1");
if (min == 1) return 1; // GCD must be 1
for(int i = min; i >= 1; i--)
{
int rem = min % i;
if (rem > 0) continue; // 'i' can't be a factor of min
bool isFactor = true;
for(int j = 1; j < numbers.Length; j++)
{
int rem2 = numbers[j] % i;
if (rem2 > 0) // 'i' can't be a factor of numbers[j]
{
isFactor = false;
break;
}
}
if (isFactor) return i; // 'i' must be the GCD
}
return 1; // needed to keep compiler happy, but will never get to this line
}
}
class FractionDemo
{
static void Main()
{
Fraction f1 = new Fraction(12, 24);
Console.Write("f1 = ");
Console.WriteLine(f1);
f1.Reduce();
Console.Write("f1 now = ");
Console.WriteLine(f1);
Fraction f2 = new Fraction(4, 8, 16);
Console.Write("f2 = ");
Console.WriteLine(f2);
f2.Reduce();
Console.Write("f2 now = ");
Console.WriteLine(f2);
Fraction f3 = f1 + f2;
Console.Write("f3 = f1 + f2 = ");
Console.WriteLine(f3);
Console.ReadKey();
}
}
Reply
Answers (
2
)
Display column data into rows!
How to implement a web service that respond in json?