راهنمایی در مورد تبدیل عبارت پسوندی به میانوندی
در مورد زیر کمی راهنمایی می خواستم:
من برنامه تبدیل عبارت پسوندی به میانوندی را در 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
نقل قول: کمی راهنمایی !!!!
خیلی ساده میتونید از الگوریتم زیر استفاده کنید :
فرض می کنیم رشته ای بصورت 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
موفق باشید .
نقل قول: راهنمایی در مورد تبدیل عبارت پسوندی به میانوندی
با سلام خدمت شما
یکم کمک برای تبدیل عبارت زیر به عبارت میانوندی نیاز دارم ممنون میشم کمک کنید .
+* ab/cd+-ks