How do I get the sum of two complex numbers in two different text boxes. For example if I had
3/4 + 1/2 * 1/4 - 2 the program will return the product of 19/16 - 11/8
txtbox1 * txtbox2 = txtbox3
Having to use two Gaussian Rationals a+b and c+d placing them in a form and having them to add, subtract, multiply and divide. I already have a class made to reduce and the overload for the +,-,*,/
Its a simple form with just 3 textboxes and 4 buttons for the +,-,*,/
Any help would be great
class CRational
{
#region Fields
private int fiNum;
private int fiDenom;
private bool fbValid;
#endregion
#region Constructors
public CRational()
{
fiNum = 0;
fiDenom = 1;
fbValid = true;
}
public CRational(string strRat)
{
Parse(strRat);
}
#endregion
#region Methods
public override string ToString()
{
string strRat;
if (!fbValid)
strRat = "NaN";
else
{
strRat = fiNum.ToString();
if (fiDenom > 1)
strRat += "/" + fiDenom.ToString();
}
return strRat;
}
public void Parse(string strRat)
{
bool bSlash = false, bLegal = true, bNeg = false;
string strNum = "0", strDenom = "0";
if (strRat != "")
{
for (int i = 0; i < strRat.Length; i++)
{
if (!char.IsDigit(strRat[i]))
{
if ((i == 0 && strRat[i] == '-'))
bNeg = true;
else if ((i > 0 && strRat[i] == '/' && !bSlash))
bSlash = true;
else
bLegal = false;
}
else
{
if (bSlash)
strDenom += strRat[i];
else
strNum += strRat[i];
}
}
if (bLegal)
{
fiNum = int.Parse(strNum);
if (bNeg)
fiNum *= -1;
fiDenom = int.Parse(strDenom);
if (!bSlash)
fiDenom = 1;
if (fiDenom == 0)
fbValid = false;
else
fbValid = true;
}
else
fbValid = false;
}
else
fbValid = false;
}
public void Reduce()
{
if (fbValid)
{
if (fiNum == 0)
fiDenom = 1;
else
{
if (fiDenom < 0)
{
fiNum *= -1;
fiDenom *= -1;
}
int iGCD = 1;
for (int i = 1; i <= fiDenom; i++)
if (fiNum % i == 0 && fiDenom % i == 0)
iGCD = i;
fiNum = fiNum / iGCD;
fiDenom = fiDenom / iGCD;
}
}
}
#endregion
#region Overloaded Operators
public static CRational operator +(CRational ratNum1, CRational ratNum2)
{
CRational ratSum = new CRational();
if (ratNum1.fbValid && ratNum2.fbValid)
{
ratSum.fiNum = ratNum1.fiNum * ratNum2.fiDenom + ratNum2.fiNum * ratNum1.fiDenom;
ratSum.fiDenom = ratNum1.fiDenom * ratNum2.fiDenom;
ratSum.fbValid = true;
}
else
ratSum.fbValid = false;
return ratSum;
}
public static CRational operator -(CRational ratNum1, CRational ratNum2)
{
CRational ratDiff = new CRational();
if (ratNum1.fbValid && ratNum2.fbValid)
{
ratDiff.fiNum = ratNum1.fiNum * ratNum2.fiDenom - ratNum2.fiNum * ratNum1.fiDenom;
ratDiff.fiDenom = ratNum1.fiDenom * ratNum2.fiDenom;
ratDiff.fbValid = true;
}
else
ratDiff.fbValid = false;
return ratDiff;
}
public static CRational operator *(CRational ratNum1, CRational ratNum2)
{
CRational ratProd = new CRational();
if (ratNum1.fbValid && ratNum2.fbValid)
{
ratProd.fiNum = ratNum1.fiNum * ratNum2.fiNum;
ratProd.fiDenom = ratNum1.fiDenom * ratNum2.fiDenom;
ratProd.fbValid = true;
}
else
ratProd.fbValid = false;
return ratProd;
}
public static CRational operator /(CRational ratNum1, CRational ratNum2)
{
CRational ratQuot = new CRational();
if (ratNum1.fbValid && ratNum2.fbValid && ratNum2.fiNum != 0)
{
ratQuot.fiNum = ratNum1.fiNum * ratNum2.fiDenom;
ratQuot.fiDenom = ratNum1.fiDenom * ratNum2.fiNum;
ratQuot.fbValid = true;
}
else
ratQuot.fbValid = false;
return ratQuot;
}
#endregion
}