Problem z projektem

Problem z projektem
MT
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:6
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.

edytowany 1x, ostatnio: Mateusz Tobor
cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:dzień
  • Lokalizacja:Poznań
  • Postów:8802
2

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


edytowany 1x, ostatnio: cerrato
Silv
Ale to chyba nie pomoże rozwiązać problemu.
cerrato
Po pierwsze - łatwiej będzie coś doradzić widząc, co pacjent już posiada. A po drugie - w ten sposób się upewnimy, że kolega rzeczywiście coś zrobił i prosi o pomoc, a nie że przyszedł wyłudzić zrobienie za niego zadania domowego :P
Silv
Nie rozumiem. Przecież OP pyta o to, jak zastosować strukturę danych w projekcie, a nie o napisanie z tego kodu. Moim zdaniem chodzi mu o sam projekt. Może masz na myśli pokazanie projektu opisanego przez kod? Ale projekty mogą też być opisywane bez użycia kodu.
MT
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:6
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ć".

edytowany 1x, ostatnio: Mateusz Tobor
Silv
Co ma udostępnienie kodu do oddania projektu?
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
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:

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

edytowany 2x, ostatnio: vpiotr
MT
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:6
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ć".

edytowany 1x, ostatnio: cerrato
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
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:

Kopiuj
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.

Kopiuj
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.

_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:8 dni
2

Raczej sugerowałbym:

Kopiuj
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;
};

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:około godziny
  • Postów:4935
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/


vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
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.".

_13th_Dragon
To pewnie pod linkiem :D No i zależy od definicji "Te same elementy"
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:około godziny
  • Postów:4935
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ł.


MT
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:6
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 ;)

edytowany 2x, ostatnio: Mateusz Tobor
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:około godziny
  • Postów:4935
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?


MT
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:6
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ąć.

Kopiuj
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.

vpiotr
Ogółem trochę porażka, sporo do nauki w domu. - na tym wlasnie chyba polegaja studia, heloł?
MT
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:6
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 :(

edytowany 2x, ostatnio: Mateusz Tobor
lion137
Nie zamykamy tutaj tematów, zostają dla potomności :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.