Професионална програма
Loading...
manito_17711 avatar manito_17711 43 Точки

[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

За мен бе полезно...

Поздрави

Тагове:
5
Linux Курсове
Filkolev avatar Filkolev 4482 Точки

Shunting Yard съм го правил преди време и си беше доста занимавка, затова сега по-скоро ще се спра на нещо по-изпипано: http://en.literateprograms.org/Shunting_yard_algorithm_(C). Нямам никакво желание да преоткривам топлата вода.

Не съм сигурен каква е целта на това домашно. Тази задача е доста сложна. В крайна сметка не ми става много ясно Линукс ли учим или алгоритми и какво в крайна сметка се очаква да научим от курса и да може да правим след като го завършим.

7
manito_17711 avatar manito_17711 43 Точки

Би ли споделил тоето решение.. интересно ми е да видя друг подход, благодаря.

 

Поздрави,

0
RosenKrumov avatar RosenKrumov 203 Точки

И аз не съм сигурен, че това са правилните домашни за целите на този курс. Първото беше горе-долу добре, поне имаше да се прави Makefile, но на второто се чувствам като на курс по алгоритми на С (с изключение на 3-тата задача да кажем). Надявам се на изпита това, което се има предвид под "C task" да е нещо символично, колкото да имаме код, върху който да правим другите неща от курса. Естествено, не на два реда, но не и за 2-3 часа.

4
25/01/2016 13:19:59
g.stoyanov avatar g.stoyanov 776 Точки

Относно типа на задачата - напълно ви подкрепям колеги! Относно решението: правил съм я на друг език - малко хинт за скобите (не съм го имплементирал в това домашно :D) търсите първата затваряща и като стигнете до нея взимате субстринг до нея от последната отваряща и това ви е събекспрешън който решевате и резултата го слагате на мястото на субстринга ;). Другото вече е тривиално!

2
vladiant avatar vladiant 41 Точки

Подозирам, че тази задача е направена за подбор на хората, на които ще им бъдат дадени допълнителни задачи за допълнителни точки.

0
dZf1aeA-rsmarinoff avatar dZf1aeA-rsmarinoff 49 Точки

Задачата, само предполагам, е дадена защото в Shunting Yard-а се използват стекове, а в лекцията ставаше въпрос за алокиране на променливи върху стека... Не е особено устойчива теория, двете неща нямат много общо точно в този случай, но все пак изглежда правдоподобно.

0