پروزه infix to post fix به صورت پیشرفته
سلام دوستان
من یه سوال داشتم و واقعا به راهنمایی شما دوستان احتیاج دارم
من پروزه infix to postfix نوشتم و خدا رو شکر کامله
حالا استاد اومده گفته همین پروزه رو به صورت پیشرفته میخوام
یعنی اینکه اگه کاربر زده num +1*(var/e)
بیاد یه جای دیگه ی برنامه به اون num , var , e مقدار بده و حاصل کل رو حساب کنه
(اول برنامه هم که باید متوجه شده باشید میانوندی به پسوندی رو انجام بده که اون کامله)
دوستان اگه سورسی چیزی ندارید حداقل فکری اگه دارید بگید تا من کدشو بزنم
نقل قول: پروزه infix to post fix به صورت پیشرفته
یعنی هیچکی نمی تونه کمکم کنه!!!! :افسرده:
نقل قول: پروزه infix to post fix به صورت پیشرفته
برای درک کد: http://www.codeproject.com/Articles/405361/Converting-Postfix-Expressions-to-Infix##
//
// class used to represent intermediate expressions on the stack.
//
public class Intermediate
{
public string expr; // subexpression string
public string oper; // the operator used to create this expression
public Intermediate(string expr, string oper)
{
this.expr = expr;
this.oper = oper;
}
}
//
// PostfixToInfix
//
static string PostfixToInfix(string postfix)
{
// Assumption: the postfix expression to be processed is space-delimited.
// Split the individual tokens into an array for processing.
var postfixTokens = postfix.Split(' ');
// Create stack for holding intermediate infix expressions
var stack = new Stack<Intermediate>();
foreach(string token in postfixTokens)
{
if (token == "+" || token == "-")
{
// Get the left and right operands from the stack.
// Note that since + and - are lowest precedence operators,
// we do not have to add any parentheses to the operands.
var rightIntermediate = stack.Pop();
var leftIntermediate = stack.Pop();
// construct the new intermediate expression by combining the left and right
// expressions using the operator (token).
var newExpr = leftIntermediate.expr + token + rightIntermediate.expr;
// Push the new intermediate expression on the stack
stack.Push(new Intermediate(newExpr, token));
}
else if (token == "*" || token == "/")
{
string leftExpr, rightExpr;
// Get the intermediate expressions from the stack.
// If an intermediate expression was constructed using a lower precedent
// operator (+ or -), we must place parentheses around it to ensure
// the proper order of evaluation.
var rightIntermediate = stack.Pop();
if (rightIntermediate.oper == "+" || rightIntermediate.oper == "-")
{
rightExpr = "(" + rightIntermediate.expr + ")";
}
else
{
rightExpr = rightIntermediate.expr;
}
var leftIntermediate = stack.Pop();
if (leftIntermediate.oper == "+" || leftIntermediate.oper == "-")
{
leftExpr = "(" + leftIntermediate.expr + ")";
}
else
{
leftExpr = leftIntermediate.expr;
}
// construct the new intermediate expression by combining the left and right
// using the operator (token).
var newExpr = leftExpr + token + rightExpr;
// Push the new intermediate expression on the stack
stack.Push(new Intermediate(newExpr, token));
}
else
{
// Must be a number. Push it on the stack.
stack.Push(new Intermediate(token, ""));
}
}
// The loop above leaves the final expression on the top of the stack.
return stack.Peek().expr;
}
نقل قول: پروزه infix to post fix به صورت پیشرفته
دوست عزیز من برنامه ام واسه میانوندی به پیش وندی هستش
اون قسمت تبدیل درست کار میکنه
فقط میخوام که محاسبات هم انجام بده
num*2+(t/f+8)
مثلا این
میخوام که به جای num بزارم 3.یعنی مساوی 3 بعد جواب رو بده
نقل قول: پروزه infix to post fix به صورت پیشرفته
سلام دوست عزیز
کار مشکلی نیست شما توی رشته ای که میگیری عملوند ها داری و اعداد و حروف که میشه متغیرهاتون
با استفاده از ی پشته میتونی متغیرهارو جدا کنی و به ازای هر متغیر مثلا تکست باکسی و لیبلی رو add کنی به فرمت که کاربر بتونه از این طریق مقادیر رو وارد کنه و جایگزینی و محاسبه ی عبارت بازم با پشته ها
امیدوارم توضیحم مفید باشه
موفق باشی
نقل قول: پروزه infix to post fix به صورت پیشرفته
واسه ادد کردن لیبل یا تکس باکس ...منظورتون اینه که همون لحظه توی برنامه ایجاد شه؟
نقل قول: پروزه infix to post fix به صورت پیشرفته
نقل قول:
نوشته شده توسط
mafaman2003
در تاپیک زیر توضیح دادم. به کمک استک باید اینکار رو انجام بدی. توجه کن که اعداد در پشته قرار میگیرن نه نام متغیر. البته خروجی یک رشته infix هست منتها شما میتونی بر حسب عملوند عمل جمع،تفریق و... رو انجام بدی و حاصل رو در پشته قرار بدید. در آخر هم به جای رشته infix جواب عددی دریافت میکنید.
تبدیل Postfix به Infix
دوست عزیز این راه کار به درد من نمیخوره...چون واسه من مثله مثالی که زدم چند تا عملوند با هم میشن یه متغیر ...ولی اینجا این طور نیست
نقل قول: پروزه infix to post fix به صورت پیشرفته
نقل قول:
نوشته شده توسط
mousa1992
سلام دوست عزیز
کار مشکلی نیست شما توی رشته ای که میگیری عملوند ها داری و اعداد و حروف که میشه متغیرهاتون
با استفاده از ی پشته میتونی متغیرهارو جدا کنی و به ازای هر متغیر مثلا تکست باکسی و لیبلی رو add کنی به فرمت که کاربر بتونه از این طریق مقادیر رو وارد کنه و جایگزینی و محاسبه ی عبارت بازم با پشته ها
امیدوارم توضیحم مفید باشه
موفق باشی
همه مشکل من اینه که نمیتونم متغیر ها رو از هم جدا کنم
یکی به من کمک کنهه
نقل قول: پروزه infix to post fix به صورت پیشرفته
http://upload.ustmb.ir/do.php?filena...to-postfix.rar
این فقط میانوندی رو به پسوندی تبدیل میکنه
واسه بقیه هنوز کاری نکردم روش
ولی هیچ ایده ای هم ندارم
نقل قول: پروزه infix to post fix به صورت پیشرفته
چی شد کسی نمیتونه کمک کنه؟
نقل قول: پروزه infix to post fix به صورت پیشرفته
با این الگوریتمی که پیاده کردید نبایدم بتونید که متغیرهارو جدا کنید. چون فقط و فقط روی یه عددی کار میکنه برای همین اگه متغییر چند کاراکتری باشه شدیدا به مشکل میخورید.
بشین الگوریتمو تغییر بده تا وقتی چندتا عدد کنار هم بود به عنوان یه عملوند بشناسه و بتونی بریزی تو پشته اینطوری میتونی متغیرر که چند کاراکتر هستش رو تشخیص بدی.
برنامتون هم کامل نیست.
کمی هم با ملایمت صحبت کنید همه از روی خیرخواهی جوابتون رو میدن بدهکار که نیستن عزیز
نقل قول: پروزه infix to post fix به صورت پیشرفته
اینجا کامل توضیح دادم.
با اون چیزی که شما نوشتید متفاوته. برای پشته هم از کلاس Stack استفاده کردم که در دات نت موجود هست.
نقل قول: پروزه infix to post fix به صورت پیشرفته
ببخشید من اصلا قصد جسارت نداشتم...سوتفاهم شده....