با سلام
الگوریتمی برای تبدیل یک عبارت میانوندی به یک عبارت پسوندی یا لهستانی میخواستم که مثلا با دریافت
a+b
عبارت ab+ را ایجاد کند و یا با دریافت
(a+b)*(c-(d/f)*h)عبارت
ab-c*/dfh+*را تولید کند
Printable View
با سلام
الگوریتمی برای تبدیل یک عبارت میانوندی به یک عبارت پسوندی یا لهستانی میخواستم که مثلا با دریافت
a+b
عبارت ab+ را ایجاد کند و یا با دریافت
(a+b)*(c-(d/f)*h)عبارت
ab-c*/dfh+*را تولید کند
http://www.codepedia.com/1/Art_Expressions_p1
۱ـ عبارت میانوندی را بر عکس کنید.
۲ـ عنصر بعدی را امتحان کنید.
۳ـ اگر عنصری است که عملیات بروش انجام میشود (مثلاً x,y,z)، به استرینگ جواب اضافهاش کنید.
۴ـ اگر پرانتز بسته شدن هست به استک هلش بدید.
۵ـاگر عنصر عملیاتی است (مثلاً +،-،×،÷):
آ) اگر استک خالی است عنصر عملیاتی را به استک هلش بدید.
ب)اگر بالاترین محموله در استک پرانتز بسته شدن است، عنصر عملیاتی را به استک هل بدید.
ج) اگر اولویت عنصر عملیاتی از آنچه که در بالایه استک است مقدمتر است (مثلاً × بر + ، - تقدم دارد)
عنصر عملیاتی را به استک هل بدید.
و اگرکه نیست ، عنصر عملیاتی را از اتک بیرون بکشید و به استرینگ جواب اضافهاش کنید، برگرد به ۵.
۶ـاگر پرانتز باز شدن است، عناصر عملیاتی را از استک بیرون بکشید و به استرینگ جواب اضافهاش کنید تا به پرانتز بسته شدن برخورد شود. پرانتز بسته شدن را از استک بیرون بکشید و دور بیاندازید.
۷ـاگر هنوز عبارت میانوندی تمام نشده برگرد به ۲.
۸ـ اگر عبارت میانوندی تمام شده، از استک عناصر عملیاتی را بیرون بکشید و به جواب استرینگ اضافهاش کنید.
۹ـ جواب استرینگ را بر عکس کنید.
Algorithm
1) Reverse the input string.
2) Examine the next element in the input.
3) If it is operand, add it to output string.
4) If it is Closing parenthesis, push it on stack.
5) If it is an operator, then
i) If stack is empty, push operator on stack.
ii) If the top of stack is closing parenthesis, push operator on stack.
iii) If it has same or higher priority than the top of stack, push operator on stack.
iv) Else pop the operator from the stack and add it to output string, repeat step 5.
6) If it is a opening parenthesis, pop operators from stack and add them to output string until a closing parenthesis is encountered. Pop and discard the closing parenthesis.
7) If there is more input go to step 2
8) If there is no more input, unstack the remaining operators and add them to output string.
9) Reverse the output string.
این برنامه عبارتی مثل این x+y*z/r رو میگیره و به فرم Postfix تبدیل میکنه. بعد دونه دونه مقادیر متغیر هارو میگیره و حاصل کل عبارت رو حساب میکنه. :چشمک: همونیه که می خواستین ؟
کسی میتونه همین جواب رو در دلفی ارائه کنه؟
سلام من برنامه ای می خواهم که یک عبارت میانوندی را بگیرد و یک عبارت پسوندی تولید کند.به زبان C#
برنامه بالا (profix.zip)هم نمیتونم dl کنم:گریه: