Problem z projektem

0

Cześć, mam do wykonania projekt na studia, mianowicie mam napisać translator.
Sam translator napisałem, ale nie uwzględniłem założenia projektu.
Takowym założeniem jest to, że wykorzystane musi być drzewo binarne.
Nie rozumiem w jaki sposób wykorzystać to założenie.
Wiem, że drzewo binarne to drzewo, w którym jeden element ma 2 elementy (Dzieci), ale za nic nie potrafię pojąć jak zrobić z tego pliki językowe, a tym bardziej to wykorzystać.
I tak jak wspominałem wyżej, stworzyłem już ten projekt tłumacza w oparciu o tablice (i to było dosyć proste), ale bez później podanych założeń.

W załączniku wstawiam temat projektu.
Z góry dziękuję za wszelaką pomoc.

2

Podstawowa sprawa - zamiast pisać, że "translator sobie napisałem" to wrzuć tutaj kod :P

0

Tutaj mam jedno zawahanie co do udostępniania tego kodu, gdyż to są tak jakby moje plecy, gdybym nie dał rady napisać nowego z uwzględnieniem założeń.
A udostępniając ten kod automatycznie skazuję siebie na to, że nie mogę oddać nawet tego "źle zrobionego" projektu.
Muszę i tak wszystko napisać od nowa, więc ten kod nie będzie w niczym pomocny.

Problem dotyczy tego, że muszę wykorzystać drzewo binarne, tak jak jest w założeniach projektu (w załączniku w pierwszym poście), a za Chiny nie wiem jak to zrobić.

Już upraszczając i pomijając całkowite działanie programu: muszę zrobić drzewo binarne ze słowami języka polskiego i słowami języka angielskiego. Następnie na podstawie tego drzewa muszę wczytać wartość.
Np. mając już to drzewo, oraz mając słowo "be" muszę uzyskać wartość "być".

1
Mateusz Tobor napisał(a):

Wiem, że drzewo binarne to drzewo, w którym jeden element ma 2 rodziców, ale za nic nie potrafię pojąć jak zrobić z tego pliki językowe, a tym bardziej to wykorzystać.

Węzeł drzewa binarnego to rodzic z maks. dwoma dziećmi (left, right).

Tutaj masz węzły takie:

struct node {
  string word[2];
  node *left[2];
  node *right[2];
};

0

Wiem, że drzewo binarne to drzewo, w którym jeden element ma 2 rodziców, ale za nic nie potrafię pojąć jak zrobić z tego pliki językowe, a tym bardziej to wykorzystać.

Węzeł drzewa binarnego to rodzic z maks. dwoma dziećmi (left, right).

Tak, masz rację, przejęzyczyłem się :P
Wiem, jak wygląda samo drzewo, ale nie rozumiem jak je wykorzystać w tym przypadku.
Oraz jak później identyfikować wartości tego drzewa, że np. gdy mam słowo "be", to jak znaleźć po tym "be" słowo "być".

4
Mateusz Tobor napisał(a):

Oraz jak później identyfikować wartości tego drzewa, że np. gdy mam słowo "be", to jak znaleźć po tym "be" słowo "być".

Startujesz od węzła. Dla przypomnienia struktura:

struct node {
  string word[2]; // [0] - English, [1] - Polish
  node *left[2];
  node *right[2];
};

Porównujesz zawartość, np. "have", słowo "be" jest mniejsze, więc idziesz na lewo. Tam masz np. "baby". Słowo "be" jest większe więc idziesz na prawo. Tam masz słowo "be", odczytujesz polski odpowiednik, koniec.

have - mieć
     left[ENGLISH] --> baby
                left[ENGLISH] -> NULL
                right[ENGLISH] -> be - być

Dla uproszczenia najpierw zbuduj sam takie drzewko tworząc węzły tak jak powinny być powiązane.
Potem dodaj wyświetlenie całego drzewa (np. w formacie jak powyżej).
Potem dodaj tłumaczenie słowa.
Potem dodaj tłumaczenie w obie strony.
Potem dodaj budowanie drzewa na podstawie pliku wejściowego.
Potem zrealizuj zadanie.

2

Raczej sugerowałbym:

class tree
{
	struct node
	{
		string word;
		node *lf,*rt,*up,*pair; //up niepotrzebny jeżeli nie robimy równoważenia, pair wskazuje odpowiedni węzeł w sąsiednim drzewie
	];
	node *enroot,*plroot;
};
1

Jesli dobrze zrozumiałem, to Masz stworzyć dwa BST (Binary Search Tree), jedno dla tłumaczenia ang -> pl i drugie dla pl -> ang. W pierwszym kluczami bedą słowa polskie, a wartościami angielskie, w drugim odwrotnie.
https://en.wikipedia.org/wiki/Binary_search_tree
https://www.geeksforgeeks.org/binary-search-tree-set-1-search-and-insertion/

2

W dwóch powyższych postach (o ile je dobrze zrozumiałem) może brakować tego:
"Te same elementy, które należą do drzewa dla języka polskiego, są też elementami drzewa dla języka angielskiego zbudowanego według porządku alfabetycznego wyrazów angielskich.".

1

Te same elementy, które należą do drzewa dla języka polskiego, są też elementami drzewa dla języka angielskiego zbudowanego według porządku alfabetycznego wyrazów angielskich

Może być i tak, ale Zauważ, że plik słownika jest jeden, więc dokładnie te same elementy/pary będą w obu drzewach - tylko w innym porządku; generalnie, bez dodatkowych informacji, ja bym ten projekt tak zrobił.

0

Szczerze mówiąc mam problem ze zrozumieniem tego.
Sam do tej pory nie korzystałem z C++, a moja wiedza na temat tego języka była minimalna (tyle ile trzeba wiedzieć).
Jednakże działanie w oparciu o PHP (z którego korzystałem i znam ten język) pomaga mi na działanie także w C++.

Gdybym miał to sam robić, nie wykorzystywałbym żadnego drzewa (którego nigdy wcześniej nie używałem) tylko tablice dwuwymiarowe, bo to jest o wiele łatwiejsze w zrozumieniu.
Już od ponad godziny siedzę nad tym, jak zrobić takie drzewo w najprostszej postaci.

Dziękuję, lion137. Naprowadziłeś mnie na BST i wydaje mi się, że to właśnie jest klucz do tego projektu.
Oczywiście jeżeli dobrze rozumiem BTS, a rozumiem to tak, że to drzewo, dla któego jest możliwość wyszukania jakby wartości dla klucza.
Tak, jakby wyobrazić sobie prostą bazę danych, gdzie mamy ID oraz VALUE. I po ID mozemy znalezc VALUE.

Jeżeli macie jakieś ciekawe kursy, tutoriale, poradniki na ten temat (BTS), to bardzo bym prosił o udostępnienie.
Pozdrawiam ;)

1

Tu: https://runestone.academy/runestone/books/published/pythonds/Trees/SearchTreeImplementation.html Masz znakomity wykład, jak zaimplementować BST (Python, ale przepisanie do C++ będzie banalne, nie potrzeba generyków: Key: Value -> string: string). A w ogóle skąd Masz projekt w BST, skoro nie miałeś z nim do czynienia?

0
lion137 napisał(a):

Tu: https://runestone.academy/runestone/books/published/pythonds/Trees/SearchTreeImplementation.html Masz znakomity wykład, jak zaimplementować BST (Python, ale przepisanie do C++ będzie banalne, nie potrzeba generyków: Key: Value -> string: string).

Dziękuję, od razu biorę si za lekturę, żeby to ogarnąć.

A w ogóle skąd Masz projekt w BST, skoro nie miałeś z nim do czynienia?

Politechnika, pierwszy rok i do tego ostry przesiew.
Ogółem trochę porażka, sporo do nauki w domu.

0

Projekt ukończony, translator napisany :D
Wykorzystałem BST.
Zrobiłem dwa drzewa (takie założenie projektu) i w zależności, czy jest kierunek enpl czy plen, to tworzy słownik angielsko-polski lub polsko-angielski (pobierając słówka z pliku .txt).

Dziękuję bardzo za pomoc :)

Niestety kodu nie mogę udostępnić, ze względu, że to projekt na studia :(

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