PDA

View Full Version : سوال: سوال در مورد برنامه نویسی C



hoo_555
چهارشنبه 18 دی 1392, 16:36 عصر
با سلام خدمت دوستان
من یه تازه کار هستم و می خواستم بدونم چطوری می تونم یک عبارت ریاضی رو بدون پرانتز به صورت رشته وارد کنم و خود برنامه با توجه به اولیت ها حساب کنه
مثلا
1+2-3*6 / 2-7

omidshaman
چهارشنبه 18 دی 1392, 18:35 عصر
2 تا Queue بساز (صف--> std::queue<int> std::queue<char>; )
یک تابع دیگه هم بساز که ورودیش 2 jتا علامت و این 2 تا Queue باشه (2 تا به خاطره اینه که */ و +- اولویت یکسانی دارن )
تابع هم این جوری کار می کنه که کل رشته رو از اول تا آخر میره اگر یکی از اون ها علامت داخلش بود مثلا + علامت رو میزاره توی یکی از queue ها و 2تا عدد 2 طرفشو هم از رشته به عدد تبدیل می کنه و میزاره توی اون یکی بعد 2 تا عدد و علامت رو از رشته حذف می کنه .
این تابع رو برای 4 تا علامت 2 تا 2 تا صدا بزن اول */ بعد +-(یا اگر بخوای ^ ! و...)
نهایتا 2 تا لیست داری عددا رو از توی لیست اول یکی یکی بردار علامت رو هم از تو لیست دوم و عبارت رو حساب کن .
مثلا :
2+6/3*9-4+1

Queue 1 : 6 3 9 2 4 1
Queue 2 : / * + - +
--->> (((((6/3)*9)+2)-4)+1)
البته اگر عبارتی که وارد شده نصفش پرانتز داشت نصفش نداشت اول باید پرانتز ها رو حذف کنی یعنی یک تابع دیگه هم نیاز داری برای حذف پرانتز که عبارت بین پرانتز ها رو جدا می کنه میفرسته به تابع .