PDA

View Full Version : محاسبه عبارت پسوندی در سی شارپ



v30sharp
دوشنبه 05 اردیبهشت 1390, 06:53 صبح
سلام دوستان یک مشکل دلرم میخوام یه برنامه بنویسم یه یه عبارن پسوندی رو محاسبه کنه و جوابشو بده و تعداد pop$ push رو نشود بده که چدن تا پاپ و پوش انجام داده اما نمیدونم از کجا بلید شروع کنم اگه امکانش هست راهنمایی کنید
به زبان سی شارپ میخوام بنویسم اگه کدی نصفه کدی مقاله ای د برنامه دبدید ممنون میشم
تا حالا برنامه زیاد نوشتم اما این نوعش و نه
مرسی دوستان منتظره یاری تون هستم. :قلب::متفکر::تشویق:

ali.rezaei7
دوشنبه 05 اردیبهشت 1390, 15:10 عصر
سلام؛ تابعی که نوشتم عبارت Postfix رو از یک String Array می خواند و نتیجه محاسبه رو برمی گردونه.

private double PostfixCalculation(string[] Expression)
{
string[] Operator = { "*", "/", "+", "-" };

double pop1, pop2;

Stack<double> stack = new Stack<double>();

foreach (string ex in Expression)
{

if (!Operator .Contains(ex))
{
stack.Push(double.Parse(ex));//Is an operand (1,2,3,....)
}
else//Is an operator(+,-,/,*)
{
switch (ex)
{
case "/":
pop2 = stack.Pop();
pop1 = stack.Pop(); ;
stack.Push(pop1 / pop2);
break;
case "*":
pop2 = stack.Pop();
pop1 = stack.Pop(); ;
stack.Push(pop1 * pop2);
break;
case "+":
pop2 = stack.Pop();
pop1 = stack.Pop(); ;
stack.Push(pop1 + pop2);
break;
case "-":
pop2 = stack.Pop();
pop1 = stack.Pop(); ;
stack.Push(pop1 - pop2);
break;
}
}
}
return stack.Pop();
}


هر کدام از عملگر ها و عملوندها باید در خانه های جداگانه، در آرایه ذخیره شوند. به عنوان نمونه عبارت 2 1 3 - * 14 / که Postfix شده 2*(1-3)/14 است را بصورت زیر به تابع ارسال می کنیم:

string[] ex = { "2", "1", "3", "-", "*", "14", "/"};
double res = PostfixCalculation(ex);