نجوه محاسبه چند عمل در برنامه ماشین حساب ؟
	
	
		سلام خدمت همه اساتید 
در برنامه ماشین حساب که طراحی نموده ام به طور هم زمان فقط قادر به انجام یک عملگر می باشد 
یعنی فقط می توان 2را ضربدر 3 کرد و مساوی را زد و دبار عملگر بعدی 
حالا شوال ؟ اگه بخوام مثلا 2*3+4/2 کنم و جوابش رو بهم بده چکار باید بکنم ؟
توضیح : در برنامه فقط دو تا متغیر وجود داره
	 
	
	
	
		نقل قول: نجوه محاسبه چند عمل در برنامه ماشین حساب ؟
	
	
		با سلام
بهترین حالت استفاده از الگوریتم های PreOrder و  PostOrder می باشد
در مورد این دو سرچ کنی هم کد و هم الگوریتم هاشو پیدا می کنی
	 
	
	
	
		نقل قول: نجوه محاسبه چند عمل در برنامه ماشین حساب ؟
	
	
		من قبلا برای این کار یک کلاس هم طراحی کردم 
حالشو ببر :لبخندساده:
public class Calculator
    {
        private string[] _operator = {"(","+", "-", "*", "/" , " "};
        private int[] _weightOPerator = { 0, 12, 12, 13, 13 ,13};
        private string _strString ;
        public string strString
        {
            get { return (_strString); }
            set { _strString = value; }
         
        }
        public double Calculate()
        {
            System.Collections.Generic.List<char> Postfix = new System.Collections.Generic.List<char>();
            PostfixtoInfix(strString,ref Postfix);
            return(Proccess(Postfix));
        }
        private void PostfixtoInfix(string infix,ref System.Collections.Generic.List<char> Postfix)
        {
            System.Collections.Stack stack = new System.Collections.Stack();
            char op=' ';
            for (int i = 0; i < infix.Length; i++)
            {
                if (infix[i] == '(')
                    stack.Push('(');
                else if (infix[i] == ')')
                {
                    char tmp;
                    while (stack.Count != 0)
                    {
                        tmp = (char)stack.Pop();
                        if (tmp != '(')
                            Postfix.Add(tmp);
                        else
                            break;
                    }
                } 
                else if (infix[i] >= '0' && infix[i] <= '9')
                    Postfix.Add(infix[i]);
                else 
                {
                    try
                    {
                        op = (char)stack.Pop();
                        stack.Push(op);
                    }
                    catch { }
                    //op >= str
                    if (!Pred(op, strString[i])==true || stack.Count==0 )
                    {
                        //if(op!=' ')
                        //    stack.Push(op);
                        stack.Push(strString[i]);
                    }
                    else
                    {
                        op = (char)stack.Pop();
                        while (Pred(op,strString[i])==true)
                        {           
                            Postfix.Add(op);
                            if (stack.Count == 0)
                                break;
                            op = (char)stack.Pop();
                        }
                        stack.Push(strString[i]);
                    }
                }
                
            }
            
            while (stack.Count!=0)
            {
                op =(char) stack.Pop();
                Postfix.Add(op);
            }
        }
        private bool Pred(char op1,char op2)
        {
            int p1=0, p2=0;
            for (int i = 0; i < _operator.Length; i++)
            {
                if (op1.ToString()==_operator[i])
                {
                    p1 = i;
                }
            }
            for (int i = 0; i < _operator.Length; i++)
            {
                if (op2.ToString() == _operator[i])
                {
                    p2 = i;
                }
            }
            if (_weightOPerator[p1] >= _weightOPerator[p2])
                return true;
            else
                return false;
        }
        private double Proccess(System.Collections.Generic.List<char> Postfix)
        {
            System.Collections.Generic.Stack<double> stack = new System.Collections.Generic.Stack<double>();
            char symbol;
            double operand1, operand2,result;
            for (int i = 0; i < Postfix.Count; i++)
            {
                symbol = Postfix[i];
                if (symbol >= '0' && symbol <= '9')
                {
                    stack.Push((double)Postfix[i]-48);
                }
                else
                {
                    operand2 = stack.Pop();
                    operand1 = stack.Pop();
                    result = Operate(symbol, operand1, operand2);
                    stack.Push(result);
                }
            }
            return( stack.Pop());
        }
        private double Operate(char symbol, double opr1, double opr2)
        {
            double result=0.0;
            switch (symbol.ToString())
            {
                case "+":
                    result = opr1 + opr2;
                    break;
                case "-":
                    result = opr1 - opr2;
                    break;
                case "*":
                    result = opr1 * opr2;
                    break;
                case "/":
                    result = opr1 / opr2;
                    break;
            }
            return (result);
        }
    }
فقط کافیه مقدار ورودی و به strString بدی و متد Calculate() رو فراخوانی کن
	 
	
	
	
		نقل قول: نجوه محاسبه چند عمل در برنامه ماشین حساب ؟
	
	
		راستی برنامه کامل شده همین کلاس رو داخل تاپیک نمونه برنامه های کوچک و مفيد در سي شارپ قرار داده ام
لینک
https://barnamenevis.org/showthread.p...=1#post1788913
	 
	
	
	
		نقل قول: نجوه محاسبه چند عمل در برنامه ماشین حساب ؟
	
	
		چرخ رو دوباره اختراع نکن:
var result = new DataTable().Compute("2-3/4*12", null);
	 
	
	
	
		نقل قول: نجوه محاسبه چند عمل در برنامه ماشین حساب ؟
	
	
		ممنون از راهنماییتون 
ولی این ماشین حساب که طراحی کردم تحت ویندوزه اگه میشه یک کمک بنمایید که راحت باشه  به طوری که بشه تو کلاس ارائه کرد
	 
	
	
	
		نقل قول: نجوه محاسبه چند عمل در برنامه ماشین حساب ؟
	
	
		ممنون از راهنماییتون 
ولی این ماشین حساب که طراحی کردم تحت ویندوزه اگه میشه یک کمک بنمایید که راحت باشه به طوری که بشه تو کلاس ارائه کرد
	 
	
	
	
		نقل قول: نجوه محاسبه چند عمل در برنامه ماشین حساب ؟
	
	
		ممنون از راهنماییتون 
ولی این ماشین حساب که طراحی کردم تحت ویندوزه اگه میشه یک کمک بنمایید که راحت باشه به طوری که بشه تو کلاس ارائه کرد