Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C# (http://www.go4expert.com/forums/c-sharp/)
-   -   Need help to make line calculator. (http://www.go4expert.com/forums/help-line-calculator-t23784/)

klimito 6Nov2010 23:42

Need help to make line calculator.
 
So far i can only do 1 command at a time. e.g. 1+1 = 2, but not 1+1+1 = 3 or 1+1*3 = 4 (cause multiplication goes first). This one turns out that 1+1+1 = 5. I need it to make it do complicated task such as 2.3+6.2*3 = 20.9.

Code:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 namespace Calci
{
    public partial class Form1 : Form
    {
        int k;
        public Form1()
        {
            InitializeComponent();
            tb.Text = "0";
            k = 0;
        }
        int preference(char a)
        {
            if (a == '+' || a == '-')
                return 1;
            else if (a == 'x' || a == '/')
                return 2;
            else if (a == '^')
                return 3;
            else
                return 0;
        }
        void evalExpression(String expr)
        {
            char[] delimiters = new char[] { '+', '-','x','/','%','^'};
            double result=0.0;
            string[] numbers = expr.Split(delimiters,StringSplitOptions.RemoveEmptyEntries);
            int no = numbers.GetUpperBound(0);
            no++;
            char[] op=new char[no];
            int opi=-1,nmi=0;
            for (int i = 0; i < expr.Length; i++)
            {
                if (expr[i] == '+' || expr[i] == '-' || expr[i] == 'x' || expr[i] == '/' || expr[i] == '%' || expr[i] == '^')
                {
                    if (opi == -1)
                        op[++opi] = expr[i];
                    else
                    {
                        if (preference(expr[i]) > preference(op[opi]))
                        {
                            op[++opi] = expr[i];
                        }
                        else
                        {
                            do
                            {
                            char o = op[opi];
                            double num1 = Double.Parse(numbers[nmi++]);
                            double num2 = Double.Parse(numbers[nmi]);
                            if (o == '+')
                                result = result + (num1 + num2);
                            else if (o == '-')
                                result = result + (num1 - num2);
                            else if (o == 'x')
                                result = result + (num1 * num2);
                            else if (o == '/')
                                result = result + (num1 / num2);
                            else if (o == '^')
                            {
                                double power=1;
                                for (int j = 1; j <= num2; j++)
                                    power = power * num1;
                                result = result + power;
                            }
                            else if (o == '%')
                            {
                                int modn1 = Convert.ToInt32(num1);
                                int modn2 = Convert.ToInt32(num2);
                                result = result + Convert.ToDouble(num1 % num2);
                            }
                            numbers[nmi] = Convert.ToString(result);
                            opi--;
                            }while((opi>=0)&&(preference(expr[i])>preference(op[opi])));
                            op[++opi] = expr[i];
                        }
                    }
                }
            }
            while (opi >= 0)
            {
                char o = op[opi];
                double num1 = Double.Parse(numbers[nmi++]);
                double num2 = Double.Parse(numbers[nmi]);
                if (o == '+')
                    result = result + (num1 + num2);
                else if (o == '-')
                    result = result + (num1 - num2);
                else if (o == 'x')
                    result = result + (num1 * num2);
                else if (o == '/')
                    result = result + (num1 / num2);
                else if (o == '^')
                {
                    double power = 1;
                    for (int j = 1; j <= num2; j++)
                        power = power * num1;
                    result = result + power;
                }
                else if (o == '%')
                {
                    int modn1 = Convert.ToInt32(num1);
                    int modn2 = Convert.ToInt32(num2);
                    result = result + Convert.ToDouble(num1 % num2);
                }
                numbers[nmi] = Convert.ToString(result);
                opi--;
            }
            tb.Text = Convert.ToString(result);
        }
        private void b7_Click(object sender, EventArgs e)
        {
            if (tb.Text == "0")
                tb.Text = b7.Text;
            else
                tb.Text = tb.Text + b7.Text;
            if (k == 1)
                k = 0;
        }
        private void b8_Click(object sender, EventArgs e)
        {
            if (tb.Text == "0")
                tb.Text = b8.Text;
            else
                tb.Text = tb.Text + b8.Text;
            if (k == 1)
                k = 0;
        }
        private void bCE_Click(object sender, EventArgs e)
        {
            if (tb.Text == "0")
                tb.Text = "0";
            else if (tb.Text.Length == 1)
                tb.Text = "0";
            else
                tb.Text = tb.Text.Remove(tb.Text.Length - 1);
            if (k == 1)
                k = 0;
        }
        private void b9_Click(object sender, EventArgs e)
        {
            if (tb.Text == "0")
                tb.Text = b9.Text;
            else
                tb.Text = tb.Text + b9.Text;
            if (k == 1)
                k = 0;
        }
        private void b4_Click(object sender, EventArgs e)
        {
            if (tb.Text == "0")
                tb.Text = b4.Text;
            else
                tb.Text = tb.Text + b4.Text;
            if (k == 1)
                k = 0;
        }
        private void b5_Click(object sender, EventArgs e)
        {
            if (tb.Text == "0")
                tb.Text = b5.Text;
            else
                tb.Text = tb.Text + b5.Text;
            if (k == 1)
                k = 0;
        }
        private void b6_Click(object sender, EventArgs e)
        {
            if (tb.Text == "0")
                tb.Text = b6.Text;
            else
                tb.Text = tb.Text + b6.Text;
            if (k == 1)
                k = 0;
        }
        private void b1_Click(object sender, EventArgs e)
        {
            if (tb.Text == "0")
                tb.Text = b1.Text;
            else
                tb.Text = tb.Text + b1.Text;
            if (k == 1)
                k = 0;
        }
        private void b2_Click(object sender, EventArgs e)
        {
            if (tb.Text == "0")
                tb.Text = b2.Text;
            else
                tb.Text = tb.Text + b2.Text;
        }
        private void b3_Click(object sender, EventArgs e)
        {
            if (tb.Text == "0")
                tb.Text = b3.Text;
            else
                tb.Text = tb.Text + b3.Text;
        }
        private void b0_Click(object sender, EventArgs e)
        {
            if (tb.Text == "0")
                tb.Text = b0.Text;
            else
                tb.Text = tb.Text + b0.Text;
        }
        private void button11_Click(object sender, EventArgs e)
        {
            if (tb.Text == "0")
                tb.Text = "0";
            else if (tb.Text.EndsWith("+") || tb.Text.EndsWith("-") ||  tb.Text.EndsWith("X") || tb.Text.EndsWith("/") || tb.Text.EndsWith("%")  || tb.Text.EndsWith("^"))
                tb.Text = "Error as 0.";
            else if (tb.Text.EndsWith("."))
                tb.Text = "Error Check again";
            else
                tb.Text = tb.Text + ".";
        }
        private void bequal_Click(object sender, EventArgs e)
        {
            evalExpression(tb.Text);
        }
        private void bplus_Click(object sender, EventArgs e)
        {
            tb.Text += "+";
        }
        private void bX_Click(object sender, EventArgs e)
        {
            tb.Text += "x";
        }
        private void bminus_Click(object sender, EventArgs e)
        {
            tb.Text += "-";
        }
        private void bdiv_Click(object sender, EventArgs e)
        {
            tb.Text += "/";
        }
        private void bmod_Click(object sender, EventArgs e)
        {
            tb.Text += "%";
        }
        private void bpow_Click(object sender, EventArgs e)
        {
            tb.Text += "^";
        }
        private void bCL_Click(object sender, EventArgs e)
        {
            tb.Text = "0";
        }
        private void Form1_Load(object sender, EventArgs e)
        {
        }
    }
}

Thx. any help may hasten my to fix my mathematical errors.


All times are GMT +5.5. The time now is 22:22.