Click here to Skip to main content
15,891,409 members
Please Sign up or sign in to vote.
3.00/5 (1 vote)
See more:
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

C#
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)    //Reduce only if valid CRational
        {
            if (fiNum == 0) //To avoid things like 0/8
                fiDenom = 1;
            else
            {
                if (fiDenom < 0)    //Handles the possibility of negative
                {                   //fiDenom from / overload
                    fiNum *= -1;
                    fiDenom *= -1;
                }
                int iGCD = 1;
                for (int i = 1; i <= fiDenom; i++)
                    if (fiNum % i == 0 && fiDenom % i == 0)
                        iGCD = i;   //GCD when loop is exited
                fiNum = fiNum / iGCD;
                fiDenom = fiDenom / iGCD;   //Reduced!
            }
        }
    }
    
    #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();
        //Handles division by zero
        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
}
Posted
Updated 2-Apr-15 18:23pm
v3
Comments
Sergey Alexandrovich Kryukov 2-Apr-15 12:08pm    
This not C... Could it possibly be C++? :-)
The problem is pretty clear. You did no comment on your code though. What's the problem?
—SA
Member 11520855 2-Apr-15 12:16pm    
how do you add two complex numbers in one textbox and the same for textbox 2 and get the sum
Sinisa Hajnal 3-Apr-15 2:31am    
You have to parse the content as string separating rational and imaginary parts and then doing math with them.
KarstenK 2-Apr-15 15:02pm    
you should implement some action is your CRational class to simplify your in coding.

You use C#!!!

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900