[Useful Info] Evaluate expression
Здравейте,
първата задача от домашното, от втората лекция на курса по Linux е да се напише програма, която да решава уравнение от порядъка на:
f = a + b * c - d / k
Парсването си е гадно, това е ясно, но по-важното са приоритетите на операторите - умножение, деление, изваждане.. !
След известно ровене из интернет се натъкнах на нещо наречено Shunting-yard algorithm и Reverse Polish notation (RPN).
Също така, след 4-5 часа нагласяне стигнах до този резултат:
За момента решава само уравнения с операторите +, -, * и / като спазва приоритета на оператора. Следва да се пробвам да вкарам и скобите и степенуването.. линк към моето решение github
На всеки, на когото му е интересно нека отдели 30 мин да изгледа долните клипове..
1. https://www.youtube.com/watch?v=QzVVjboyb0s
2. https://www.youtube.com/watch?v=LQ-iW8jm6Mk
3. https://www.youtube.com/watch?v=zMDm2MbRG6w
За мен бе полезно...
Поздрави
Би ли споделил тоето решение.. интересно ми е да видя друг подход, благодаря.
Поздрави,
И аз не съм сигурен, че това са правилните домашни за целите на този курс. Първото беше горе-долу добре, поне имаше да се прави Makefile, но на второто се чувствам като на курс по алгоритми на С (с изключение на 3-тата задача да кажем). Надявам се на изпита това, което се има предвид под "C task" да е нещо символично, колкото да имаме код, върху който да правим другите неща от курса. Естествено, не на два реда, но не и за 2-3 часа.
Относно типа на задачата - напълно ви подкрепям колеги! Относно решението: правил съм я на друг език - малко хинт за скобите (не съм го имплементирал в това домашно :D) търсите първата затваряща и като стигнете до нея взимате субстринг до нея от последната отваряща и това ви е събекспрешън който решевате и резултата го слагате на мястото на субстринга ;). Другото вече е тривиално!
Подозирам, че тази задача е направена за подбор на хората, на които ще им бъдат дадени допълнителни задачи за допълнителни точки.
Задачата, само предполагам, е дадена защото в Shunting Yard-а се използват стекове, а в лекцията ставаше въпрос за алокиране на променливи върху стека... Не е особено устойчива теория, двете неща нямат много общо точно в този случай, но все пак изглежда правдоподобно.