PDA

View Full Version : میانوندی به پسوندی



amir master
پنج شنبه 24 آذر 1384, 16:44 عصر
با سلام
الگوریتمی برای تبدیل یک عبارت میانوندی به یک عبارت پسوندی یا لهستانی میخواستم که مثلا با دریافت
a+b
عبارت ab+ را ایجاد کند و یا با دریافت

(a+b)*(c-(d/f)*h)
عبارت

ab-c*/dfh+* را تولید کند

اَرژنگ
شنبه 26 آذر 1384, 19:50 عصر
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.

pcseven
دوشنبه 28 آذر 1384, 04:28 صبح
این برنامه عبارتی مثل این x+y*z/r رو میگیره و به فرم Postfix تبدیل میکنه. بعد دونه دونه مقادیر متغیر هارو میگیره و حاصل کل عبارت رو حساب میکنه. :چشمک: همونیه که می خواستین ؟

reza4257
چهارشنبه 06 خرداد 1388, 07:32 صبح
کسی میتونه همین جواب رو در دلفی ارائه کنه؟

pegah_seyedmashhadi
جمعه 25 فروردین 1391, 13:35 عصر
سلام من برنامه ای می خواهم که یک عبارت میانوندی را بگیرد و یک عبارت پسوندی تولید کند.به زبان c#
برنامه بالا (profix.zip)هم نمیتونم dl کنم:گریه: