Wyrazenia arytmetyczne w drzewie.

0

Mam do zrobienia zadanie w javie, której nigdy nie używałem i nie do końca wiem jak sobie z nim poradzić póki co zrobiłem.

Wyrażenia arytmetyczne można reprezentować jako drzewa, gdzie w liściach pamiętane
są liczby, a w węzłach symbole operacji arytmetycznych. Zaimplementuj w Javie odpowiednie
klasy reprezentujące węzły i liście takiego drzewa jako podklasy klasy Wyrażenie.
W każdej klasie zdefiniuj metodę
public int oblicz();
obliczającą wartość wyrażenia reprezentowanego przez obiekt. Zdefiniuj odpowiednie konstruktory.
Przyjmij, że w liściach mogą być zarówno stałe liczbowe jak i zmienne. Przyjmij,
że wartości zmiennych są przechowywane np. tablicy haszującej (możesz wykorzystać tu klasy
biblioteczne).
Uwaga: nie jest konieczne parsowanie wyrażeń, wyrażenia można budować np. tak:
wyrazenie = new Dodaj(new Stala(4), new Zmienna("x"))
Zaprogramuj w każdej klasie metodę String toString() zwracającą wyrażenie w postaci
napisu.

class Dodaj implements Wyrazenie 
{
	Wyrazenie a;
	Wyrazenie b;
	
	public Dodaj (Wyrazenie a, Wyrazenie b) { this.a = a; this.b = b; }
	public int Oblicz() { return a.Oblicz() + b.Oblicz(); }
	public String toString() { return "(" + a + "+" + b + ")"; }	
}

Mam też resztę operacji ale nie wiem jak zrobić to drzewo i obsługiwać zmienne.

0

Mam takie coś w Pythonie, ale mam też kilka uwag; dla mnie przynajmniej, to jest na ogłoszenie drobne - bo sporo pisania.
Design, po co tworzyć osobne kasy dla operatorów i liczb? Dla mnie to jest bez sensu i tak bym tego nie robił. Wystarczy jedna klasa, binary_tree, czy parse_tree i funkcje: build_tree i eval - przekazujemy do nich, jako wyrażenie arytmetyczne, stringa - wtedy sie to robi łatwo i czytelnie.

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