نجوه محاسبه چند عمل در برنامه ماشین حساب ؟
سلام خدمت همه اساتید
در برنامه ماشین حساب که طراحی نموده ام به طور هم زمان فقط قادر به انجام یک عملگر می باشد
یعنی فقط می توان 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);
نقل قول: نجوه محاسبه چند عمل در برنامه ماشین حساب ؟
ممنون از راهنماییتون
ولی این ماشین حساب که طراحی کردم تحت ویندوزه اگه میشه یک کمک بنمایید که راحت باشه به طوری که بشه تو کلاس ارائه کرد
نقل قول: نجوه محاسبه چند عمل در برنامه ماشین حساب ؟
ممنون از راهنماییتون
ولی این ماشین حساب که طراحی کردم تحت ویندوزه اگه میشه یک کمک بنمایید که راحت باشه به طوری که بشه تو کلاس ارائه کرد
نقل قول: نجوه محاسبه چند عمل در برنامه ماشین حساب ؟
ممنون از راهنماییتون
ولی این ماشین حساب که طراحی کردم تحت ویندوزه اگه میشه یک کمک بنمایید که راحت باشه به طوری که بشه تو کلاس ارائه کرد