Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
pl:dydaktyka:jimp2:2017:labs:wyjatki [2017/07/17 08:08]
127.0.0.1 edycja zewnętrzna
pl:dydaktyka:jimp2:2017:labs:wyjatki [2018/04/30 15:35] (aktualna)
mwp [Ćwiczenia]
Linia 375: Linia 375:
       * InvalidNameSurname,​ InvalidNameCharacters, ​ InvalidAge, InvalidProgram       * InvalidNameSurname,​ InvalidNameCharacters, ​ InvalidAge, InvalidProgram
     * dopisać main z możliwością wczytywania danych o studencie i tworzącym studentów w pętli wstawiającym poprawnie utworzone obiekty do repozytorium.     * dopisać main z możliwością wczytywania danych o studencie i tworzącym studentów w pętli wstawiającym poprawnie utworzone obiekty do repozytorium.
-  - **[5 punktów] Napisz program, który będzie służył do opóźniania,​ lub przyspieszania wyświetlania napisów do filmów w formacie MicroDVD ;-). Czas pojawienia się napisu oznaczany jest w tym formacie dwiema liczbami umieszczonymi pomiędzy nawiasami klamrowymi. Pierwsza liczba to numer klatki pojawienia się napisu, druga to numer klatki zniknięcia. Program powinien posiadać metodę //​delay(const char* in, const char* out,int delay, int fps)// wykonującą opóźnienie (lub przyspieszenie) napisów o podaną ilość milisekund w zależności od tego jaki film ma //​framerate//​. \\ Program powinien przyjmować jako parametry cztery wartości: ścieżkę do pliku wejściowego,​ ścieżkę do pliku wyjściowego i liczbę milisekund i //​framerate//​. ​ Metoda //delay// powinna wyrzucać wyjątek gdy w pliku pojawi się niepoprana sekwencja znaków. Np. zamiast {1234}{4565} pojawia się {sdfg}{33ff}.** 
  
 +======Zadanie domowe======
 +Napisz program, który będzie służył do opóźniania,​ lub przyspieszania wyświetlania napisów do filmów w dwóch różnych formatach: MicroDVD i SubRip. Elementem centralnym interfejsu biblioteki jest abstrakcyjna klasa: **MovieSubtitles** z dwoma wirtualnymi metodami (przestrzeń nazw **moviesubs**): ​
 +    * <code cpp>void ShiftAllSubtitlesBy(int offset_in_micro_seconds,​ int frame_per_second,​ std::​istream *in, std::​ostream *out)</​code>​ - metoda nie powinna posiadać domyślnej implementacji (abstrakcyjna,​ czysto wirtualna).
 +    * Destruktor (domyślna implementacja)
 +  - **[1 punkt]** (lab8_micro_dvd_correct_cases_tests) Zaimplementuj klasę **MicroDvdSubtitles** implementującą metody z klasy bazowej **MovieSubtitles** i wspierającą format **MicroDvd**. Każda linia ma następujący format: //​{INT_ON}{INT_OFF}SUBTITLE//​ gdzie nawiasy klamrowe wystepują w tej linii jak widać, natomiast INT_ON oznacza numer klatki filmu, w której pojawia się napis; INT_OFF numer klatki filmu w której znika napis; SUBTITLE oznacza napis do wyświetlenia. W tym formacie napis do wyświetlenia może zawierać dodatkowe informacje sterujące wyświetlaniem,​ np. | rozdzielający linie napisu, czy {y:b} wprowadzający pogrubienie. ​
 +  - **[1 punkt]** (lab8_micro_dvd_error_cases_tests) Przesuwanie napisów powinno również obsługiwać przypadki, gdy podany plik (zawrtość strumienia wejściowego) zawiera niepoprawnie sformatowany tekst:
 +    * próba przesunięcia klatek wstecz która skutkowałaby ujemnymi wartościami INT_ON i/lub INT_OFF powinna być zasygnalizowana przez wyjątkiem **NegativeFrameAfterShift**
 +    * jeśli klatka ma zniknąć przed pojawieniem się (INT_ON >= INT_OFF) należy zasygnalizować to wyjątkiem **SubtitleEndBeforeStart**
 +    * jeżeli jest inny błąd formatowania lini np. brak {INT_OFF}, brak nawiasu klamrowego, itp. należy zwrócić wyjątek **InvalidSubtitleLineFormat**
 +    * jeżeli kolejne napisy pojawiają sie przed niż wcześniejszymi napisami powinine zostać zgłoszony wyjątek **OutOfOrderFrames**
 +    * wszystkie te wyjątki powinny dziedziczyć po klasie **SubtitlesException**,​ która przyjmuje dwa argumenty w konstruktorze:​ numer linii, w której wystąpił błąd, treść tej linii (cała linia, nie tylko etykieta). A z kolei klasa **SubtitlesException** powinna dziedziczyć po klasie **std::​invalid_argument** z biblioteki stdexcept
 +  - **[1 punkt]** (lab8_sub_rip_correct_cases_tests) Zaimplementuj klasę **SubRipSubtitles** implementującą metody z klasy bazowej **MovieSubtitles** i wspierającą format **SubRip**. Każda napis ma następujący format: //INDEX NEW_LINE TIME_IN -> TIME_OFF NEW_LINE SUBTITLE1 NEW_LINE SUBTITLE2 NEW_LINE NEW_LINE//, gdzie INDEX - to numer klatki, NEW_LINE to znak nowej linii, TIME_IN i TIME_OFF to moment pojawienia się i zniknięcia klatki w formacie HH:​MM:​SS,​mmm (godzina:​minuta:​sekundy,​milisekundy). Napisy mogą być wielolinijkowe,​ nowa klatka pojawia się po pustej linii.
 +  - **[1 punkt]** (lab8_sub_rip_error_cases_tests) poza wyjątkami wymienionymi w punkcie drugim należy zaimplementować też:
 +    * numery klatek są nie pokolei **OutOfOrderFrames** ​
 +    * jeśli klatka nie posiada secyfikacji kiedy miałaby się pojawić **MissingTimeSpecification**
 +  - **[1 punkt]** (lab8_movie_subtitles_tests) sprawdzić czy wszystko działa ok. 
pl/dydaktyka/jimp2/2017/labs/wyjatki.txt · ostatnio zmienione: 2018/04/30 15:35 przez mwp
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0