PDA

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



m.@.@.i
سه شنبه 15 دی 1388, 01:26 صبح
در مورد زیر کمی راهنمایی می خواستم:
من برنامه تبدیل عبارت پسوندی به میانوندی را در C برای حالتی که عبارت ورودی ما شامل عدد و عملگر باشد نوشته ام مثلا: /+12*3+41
این برنامه خروجی را به صورت حاصل عبارت نشان می دهد که در اینجا برابر 5 میشود.
بدین صورت که در هر مرحله اعداد را در stack میریزد و با push و pop های متعدد این کار را انجام میدهد.
حالا اگر بخواهم عبارت ورودی فقط شامل عملگر و کاراکتر باشد مثلا : /*AB+CA
که جواب به صورت مقابل چاپ شود: A+B/C*A
این کار را چطور انجام دهم .مثلا در ابتدا که A در stack ریخته می شود ، بعد B ، بعد که علامت + را میبیند A و B را با هم جمع میکند. حالا چطور عبارت A+B را دوباره به stack برگرداند http://www.iran-eng.com/images/smilies/a063.gifhttp://www.iran-eng.com/images/smilies/a063.gifhttp://www.iran-eng.com/images/smilies/a063.gifhttp://www.iran-eng.com/images/smilies/a063.gif

Salar Ashgi
سه شنبه 15 دی 1388, 10:56 صبح
خیلی ساده میتونید از الگوریتم زیر استفاده کنید :

فرض می کنیم رشته ای بصورت postfix (پسوندی) در اختیار داریم و میخواهیم آنرا به infix (میانوندی) تبدیل

کنیم :

روش کار:رشته پسوندی را از چپ به راست در نظر می گیریم ، با رسیدن به هر عملوند ، آن عملوند در پشته

push میشود تا برسیم به یک عملگر ، وقتی که به یه عملگری رسیدیم دو تا عملوند از پشته pop کرده و آنرا

بشکل infix با عملگر مورد نظر نوشته و دوباره در پشته push می کنیم :

نکات مهم :

1) در این حالت همیشه عملوند top پشته ، عملوند سمت راست خواهد بود .

2) پشته اولیه ، باید پشته ای از رشته ها باشد .

در این مثال :




A , B
A+B
A+B,C,A
A+B,C*A
A+B/C*A ==>END


موفق باشید .

akram 1380
دوشنبه 03 آبان 1400, 15:38 عصر
با سلام خدمت شما
یکم کمک برای تبدیل عبارت زیر به عبارت میانوندی نیاز دارم ممنون میشم کمک کنید .

+* ab/cd+-ks