Aplikacja do odczytywania plików z przedziałów czasowych

0

Cześć!

Jestem na pierwszym roku studiów i dostaliśmy zadanie na obiektówce, żeby stworzyć program, który będzie pobierał za każdym razem jakiś nowy przedział czasowy (od, do -> czyli podajemy dwie daty) i tylko przysłowiowo odczytywał spod tego czasu jakieś pliki. Potrzebujemy zapisywać te przedziały, żeby później podając kolejne, wiedzieć co już się pojawiło. No i przy podawaniu trzeba porównywać te przedziały w taki sposób, że jeśli jakiś okres czasu z nowo podanego przedziału już wcześniej podaliśmy to dla optymalizacji nie wczytujemy plików spod tego fragmentu czasu który się powtarza, tylko bierzemy fragmenty czasu gdzie pliki wcześniej nie były załadowane. Tutaj przykład jak to powinno wyglądać po wypisaniu w konsoli

title

Tutaj rozpisałem sobie różne przypadki:

  • kiedy nowe przedziały czasowe zawierają się częściowo we wcześniejszych
  • kiedy nowe przedziały czasowe NIE zawierają się we wcześniejszych
  • i kiedy nowe przedziały czasowe nakładają się w całości na te wcześniejsze

Przy każdym przejściu wypisujemy

  • jakie przedziały już wcześniej były
  • jakie musieliśmy załadować
  • i jakie ostatecznie uzyskaliśmy i przechowujemy (te przedziały będziemy porównywać z następnym przejściem)

title

Macie jakieś rady, podpowiedzi? Właśnie zaczyna się majówka, chce to jak najszybciej ogarnąć :/

// Czy da się brać całą date na raz i porównywać ją mniejsze/większe od jakiejś daty?
W sensie czy np. gdy nowy przedział nachodzi na stary, to czy da się wziąć DATA 3 i jeśli większe > od DATA 1 i mniejsze < od DATA 2
później wziąć DATA 4 i jeśli większe > od DATA 1 i mniejsze < od DATA 2 ------> to wtedy wiadomo że drugi przedział zawiera się w pierwszym,
więc nie musimy wczytywać żadnych plików spod podanej właśnie daty, bo już wcześniej taka data była podana i pliki zostały wczytane

2

Zapoznaj się z biblioteką std::chrono.

  1. Stwórz klasę X zawierającą przedział czasowy (początek i koniec).
  2. Zaimplementuj w klasie X operator < odpowiedzialny za sortowanie przedziałów czasowych.
  3. Dodawaj obiekty klasy X do kontenera std::set<X>.
  4. Opracuj algorytm obliczający część wspólną wszystkich przedziałów czasowy.

Jak to zrobisz to resztę będziesz miał już z górki.

0
TomaszLiMoon napisał(a):

Zapoznaj się z biblioteką std::chrono.

  1. Stwórz klasę X zawierającą przedział czasowy (początek i koniec).
  2. Zaimplementuj w klasie X operator < odpowiedzialny za sortowanie przedziałów czasowych.
  3. Dodawaj obiekty klasy X do kontenera std::set<X>.
  4. Opracuj algorytm obliczający część wspólną wszystkich przedziałów czasowy.

Jak to zrobisz to resztę będziesz miał już z górki.

Jeśli dobrze rozumiem Twoje rozwiązanie zakłada jako pierwsze podanie wszystkich zbiorów, na których chcemy pracować, a później operacje na nich? Chodzi, żeby przy każdym wklepaniu nowego przedziału na bieżąco wypisywać te przedziały, które już były i które są w tej chwili dodawane. A później robienie z tego jednego przedziału, do którego będziemy przyrównywać następny podany.

1
bidzior57 napisał(a):
TomaszLiMoon napisał(a):

Zapoznaj się z biblioteką std::chrono.

  1. Stwórz klasę X zawierającą przedział czasowy (początek i koniec).
  2. Zaimplementuj w klasie X operator < odpowiedzialny za sortowanie przedziałów czasowych.
  3. Dodawaj obiekty klasy X do kontenera std::set<X>.
  4. Opracuj algorytm obliczający część wspólną wszystkich przedziałów czasowy.

Jak to zrobisz to resztę będziesz miał już z górki.

Jeśli dobrze rozumiem Twoje rozwiązanie zakłada jako pierwsze podanie wszystkich zbiorów, na których chcemy pracować, a później operacje na nich? Chodzi, żeby przy każdym wklepaniu nowego przedziału na bieżąco wypisywać te przedziały, które już były i które są w tej chwili dodawane. A później robienie z tego jednego przedziału, do którego będziemy przyrównywać następny podany.

W std::set<X> będziesz miał wszystkie dodane do tej pory przedziały. Możesz utworzyć std::stack<X> z oczekującymi na dodanie, jeżeli dodawanych jest więcej niż jeden na raz. Oczywiście w 4. powinna być suma wszystkich przedziałów którą możesz zapisać w jakieś strukturze/klasie Y, zawierającą posortowane punkty czasowe.

0

Wykorzystałem bibliotekę boost i wszystko śmiga jak należy.
Początkowo kompletnie nie wiedziałem jak się za to zabrać i był to dla mnie totalny kosmos.
Dzięki za pomoc!

Do zamknięcia.

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