Zadanko z kontenerami

0

Siemanko. Mam do napisania pewien program jednak kompletnie nie wiem jak się za niego zabrać. Jest tam coś takiego jak vector, czyli kontener. W symfonii niestety nic o tym nie ma a wykład jak zwykle jest do tyłu jeżeli chodzi o te kwestie. Coś sobie już czytam o tych vectorach ale na razie zaczynam.
Więc do rzeczy, mam takie polecenie:

Stwórz program kodujący hierarchię figur. Program powinien składać się z 5 klas:
abstrakcyjnej klasy figura posiadającej parametry wierzchołki,
klasy trójkąt posiadającej trzy wierzchołki (definiowane w konstruktorze),
klasy czworokąt posiadającej cztery wierzchołki (definiowane jak powyżej),
klasy kwadrat (definiowane jak powyżej),
klasy ośmiokąt (definiowane jak powyżej).
Klasy trójkąt, czworokąt i ośmiokąt mają dziedziczyć po klasie figura, zaś klasa kwadrat po klasie
czworokąt. Klasa figura ma udostępniać metody:
 wyświetlanie wierzchołków figury,
 liczenie pola figury,
 liczenie obwodu figury.
Klasa Figura powinna mieć kontener na wierzchołki w formie wektora, zaś wszystkie figury
powinny być przetrzymywane w liście list (lista nadrzędna zawierająca listy obiektów danej
klasy).
Program powinien umożliwiać dynamiczne dodawanie nowych figur do istniejących kontenerów
oraz wyświetlanie zadanego typu figur z listy.

Jak widzicie zadanie jest dość rozbudowane. Na początku wszystko wygląda dobrze, ale to:
//Klasa Figura powinna mieć kontener na wierzchołki w formie wektora, zaś wszystkie figury
powinny być przetrzymywane w liście list (lista nadrzędna zawierająca listy obiektów danej
klasy). Program powinien umożliwiać dynamiczne dodawanie nowych figur do istniejących kontenerów
oraz wyświetlanie zadanego typu figur z listy. //
Budzi u mnie grozę...

Czyli w klasie FIGURA ma być jeden wektor, który trzyma wierzchołki? Czytałem że wektor to coś w rodzaju dynamicznej tablicy. Czy w takim razie tablica ma mieć 2 wymiary? Wierzchołek mam oznaczyć jako para X-ów i Y-ków?
O co chodzi z tą listą list. To już nie wiem kompletnie...
Proszę o pomoc :)
Oczywiście w C++

1

Zdefiniuj sobie punkt jako klasę/strukturę z dwoma polami float X i Y. W klasie figura stwórz wektor obiektów typu punkt.

0

Gdzie można poczytać o tych kontenerach, wektorach bo nie mam pojęcia co z tym zrobić i jak to zrobić...

0

Zaraz zaraz. Bo czegoś tu nie kumam.

Mam mieć tak?:

klasa wierzchołek
{ zadeklarowany int x oraz int y ?? }

klasa figura : public wierzchołek
{ tutaj zadeklarowany wektor trzymający obiekty klasy wierzchołek??
   oraz funkcja wyświetl wierzchołki, licz pole figury, licz obwód figury
}

?????

W poleceniu jest napiane aby klasa figura miała w sobie parametry wierzchołki oraz kontener na wierzchołki. Mam robić osobną klasę na X oraz Y??

Czy może mam zrobić tablice 2D o nazwie wierzchołki i tam trzymać X-a oraz Y-ka?

0

Figura rozszerza wierzchołek? WTF?
Masz mieć wektor punktów, więc najlepiej zdefiniować typ punkt.

0

Punkt w Figurze masz to zrobić na zasadzie agregacji a nie dziedziczenia.

0

To w jaki sposób mam zdefiniować punkt? Jako co? To jest para x i y przecież
Dodam tylko że temat zajęć jest taki: //Na laboratorium utrwalą Państwo tematykę dziedziczenia oraz zapoznają się z
dynamicznymi strukturami danych – kontenerami.//

Więc mam korzystać z dziedziczenia, nawet nie wiem co to ta agregacja

1
struct Punkt
  {
   double x,y;
   Punkt():x(0),y(0) {}
   Punkt(double x,double y):x(x),y(y) {}
  };
vector<Punkt> Lst;
Lst.push_back(Punkt(3,4));
Lst.push_back(Punkt(x,y));
0

Czy jeżeli gdziekolwiek dalej w programie użyje lista.push_back(Punkt(x,y)); to do wektora doda mi się automatycznie nowy element?
W jaki sposób mam ogarnąć to jaki element jest na poszczególnym miejscu w danym wektorze? Czy to w ogóle jest mi potrzebne to wiedzieć?

Oraz jeżeli w konstruktorze mam stworzyć wierzchołki (np. 3 wierzchołki dla trójkąta) to wartości mam manualnie wprowadzić w konstruktorze np:

lista.push_back(Punkt(1,3));
lista.push_back(Punkt(5,7));
lista.push_back(Punkt(2,4));

Czy da się jakoś te wszystkie 6 wartości wprowadzić jako argumenty konstruktora. Nie byłoby to bez sensu? Może użyć srand i wylosować tam liczby? Czy to sztuka dla sztuki?

1
Bakayaro napisał(a):

Czy jeżeli gdziekolwiek dalej w programie użyje lista.push_back(Punkt(x,y)); to do wektora doda mi się automatycznie nowy element?
O ile lista jest vector<Punkt> lista; to tak.

Bakayaro napisał(a):

W jaki sposób mam ogarnąć to jaki element jest na poszczególnym miejscu w danym wektorze?
elementów jest lista.size(); na miejscu i-tym jest element lista[i].x,lista[i].y

Bakayaro napisał(a):

Czy to w ogóle jest mi potrzebne to wiedzieć?
To raczej powinieneś spytać wróżkę lub psychologa.

Bakayaro napisał(a):

Czy da się jakoś te wszystkie 6 wartości wprowadzić jako argumenty konstruktora. Nie byłoby to bez sensu?
A może prościej trzy punkty?

Bakayaro napisał(a):

Może użyć srand i wylosować tam liczby? Czy to sztuka dla sztuki?
Możesz robić w programie co tylko zechcesz, albo tylko to co masz w zadaniu.

0

Naskrobałem coś takiego, co wysłałem wszystkim wypowiadjącym się w tym temacie na priva.

Niech ktoś sprawdzi czy to jest dobrze zrobione w ogóle.
Teoretycznie zrobiłem wszystko oprócz tego punktu:

wszystkie figury powinny być przetrzymywane w liście list (lista nadrzędna zawierająca listy obiektów danej
klasy). Program powinien umożliwiać dynamiczne dodawanie nowych figur do istniejących kontenerów
oraz wyświetlanie zadanego typu figur z listy.

Nie mam pojęcia o co chodzi z tą listą. Podpowie ktoś coś?

0

Nawet nie będę czytał tego kodu, bo jak Ci już napisałem, nie chce mi się.
http://www.cplusplus.com/reference/list/list/

0

Kurcze. Wektory były nawet zjadliwe ale te listy to już są dziwne.
Jakieś iteratory...
Oto mój program so far:
http://pastebin.com/4D2gTXk6

Mam zrobić listę obiektów (np. obiektów kwadrat).
Może mi ktoś wyjaśnić jak mniej więcej przykładowa lista tych obiektów ma wyglądać?
Tę listę mam zrobić w mainie z racji tego, że do niej mam wkładać już konkretne obiekty danej klasy?

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