Odwrotna Notacja Polska

Odpowiedz Nowy wątek
xyzzz
2014-04-04 22:50
xyzzz
0

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.

Pozostało 580 znaków

2014-04-04 23:05
Moderator

Rejestracja: 13 lat temu

Ostatnio: 1 godzina temu

Lokalizacja: Wrocław

0

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.


edytowany 1x, ostatnio: Patryk27, 2014-04-04 23:06

Pozostało 580 znaków

xyzzz
2014-04-04 23:08
xyzzz
0

Chodzi mi o sposob w jaki moge to wyrazenie przeksztalcic na poprawne wyrazenie ONP tak by po obliczeniu tego ONP wynikiem byla wartosc x.

Pozostało 580 znaków

xyzzz
2014-04-04 23:12
xyzzz
0

A dokladnie do postaci ogolnej ( ( ( 4 + 2 ) - 2 ) / 6 ) - 1 ) co w ONP da to co napisalem w 1st poscie

Pozostało 580 znaków

2014-04-04 23:30
Moderator

Rejestracja: 13 lat temu

Ostatnio: 1 godzina temu

Lokalizacja: Wrocław

1

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.


edytowany 3x, ostatnio: Patryk27, 2014-04-04 23:32

Pozostało 580 znaków

xyzzz
2014-04-04 23:35
xyzzz
0

Dzieki! Nie podchodzilem do tego problemu w ten sposob :) biore sie za pisanie.

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0