Witam, czy stanal ktos kiedys przed problemem rozwiazywania rownan metoda ONP? Otoz poszukuje wskazowek jak uzywajac algorytmu ONP by obliczyc rownanie typu:
( ( x + 1 ) * 6 + 2 )= ( 4 + 2 )
Nie prosze o kod a wskazowki w toku rozmumowiania. Probowalem na wiele sposobow robiac osobne stosy dla prawej i lewej strony a nastepnie przerzucac je jednak odp zawsze byla bledna. Jak dojsc do rozwiaznia 4 2 + 2 - 6 / 1 -? Odczyt z onp na liczbe jest juz trywialny.
Pytasz o wczytanie wyrażenia czy programowe rozwiązywanie równań?
Jeżeli to drugie, problem sprowadza się do czegoś zupełnie innego, niż samo ONP.
Chodzi mi o sposob w jaki moge to wyrazenie przeksztalcic na poprawne wyrazenie ONP tak by po obliczeniu tego ONP wynikiem byla wartosc x.
A dokladnie do postaci ogolnej ( ( ( 4 + 2 ) - 2 ) / 6 ) - 1 ) co w ONP da to co napisalem w 1st poscie
Czyli pytasz właśnie o to, jak rozwiązywać równania z jedną niewiadomą w pierwszej potędze...
Na Twoim miejscu zacząłbym od przeparsowania równania do binarnego drzewa wyrażeniowego, czyli w Twoim przypadku:
=
/ \
+ \
/ \ +
* 2 / \
/ \ 4 2
+ 6
/ \
x 1
Mając to, możemy przeprowadzać na nim operacje.
Z każdym krokiem musimy upraszczać wyrażenie coraz bardziej, aż pozostanie ono w formie x=(...)
.
Z punktu widzenia człowieka (aby było łatwiej, dalsze kroki będę zapisywał w formie "zwykłych" wyrażeń):
6*(x+1)+2=4+2
6x+6+2=6
6x+8=6
6x=-2
x=-2/6
x=-0.(3)
Z punktu widzenia Twojego programiku (pomijając, że ofc. będzie operował na drzewach, a nie notacji infixowej (chociaż w sumie...)) musisz po prostu doprowadzać do tego, aby w każdym kroku drzewo miało coraz mniejszą wysokość, aż w końcu będzie ona wynosić 1
, poprzez obliczanie stałych oraz wymnażanie/dodawanie(...) liczb wraz ze zmiennymi.
Trochę ciężej będzie w przypadkach takich jak:
(1/3)x=3x+5
Lecz wszystko opierać się będzie na wykrywaniu przez program pewnych szablonów i stosowaniu reguł.
Ciężej stwierdzić coś konkretnego, ponieważ wszystko zależy od tego, jak podejdzie się do tematu.
Dzieki! Nie podchodzilem do tego problemu w ten sposob :) biore sie za pisanie.