Różnice

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

Odnośnik do tego porównania

pl:dydaktyka:jimp2:2016:part2:ex:ex5 [2019/06/27 15:50]
pl:dydaktyka:jimp2:2016:part2:ex:ex5 [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
 +====== Ćwiczenie 5: Iteratory ======
 + 
 +**Ćwiczenie 5.** polega na zaimplementowaniu **iteratora o dostępie swobodnym** dla pojemników wykonywanych podczas ćwiczeń [[ex3|3]], [[ex4|4]].
  
 +===== Po co =====
 +
 +  * Doskonalenie umiejętności definiowania szablonów.
 +  * Zapoznanie się z podstawowymi strukturami danych.
 +  * Doskonalenie umiejętności przeładowywania operatorów.
 +  * Zapoznanie się z konstrukcją iteratorów.
 +
 +===== Oddawanie ćwiczenia =====
 +
 +  * Przed oddaniem ćwiczenia, program należy przetestować używając następującego pliku main: {{:​pl:​dydaktyka:​jimp2:​2016:​part2:​ex:​ex5.zip|}}
 +  * Powyższy plik wymaga istnienia pliku ''​aghInclude.h''​ poprzez który włączane są wszystkie niezbędne pliki.
 +
 +===== Przebieg ćwiczenia =====
 +
 +  - Wykonanie ćwiczenia polega na zdefiniowaniu szablonu **iteratora** dla pojemników wykonanych w trakcie poprzednich ćwiczeń.
 +  - Budujemy klasę **''​aghIterator''​**,​ która będzie reprezentować szablon iteratora.
 +  - Do realizacji ćwiczenia **nie można** wykorzystywać już gotowych rozwiązań (STL, Qt, tip).
 +  - Klasa powinna umożliwiać "​pokazywanie"​ iteratorem na **dowolny** z zaprojektowanych trakcie poprzednich ćwiczeń pojemników.
 +  - Obiekt klasy **''​aghIterator''​** powinien wykazywać zachowanie maksymalnie zbliżone do zwykłego wskaźnika.
 +  - Klasa powinna implementować następujące metody:
 +    * **''​first()''​** - zwraca iterator pokazujący na **pierwszy** element w pojemniku.
 +    * **''​last()''​** - zwraca iterator pokazujący na **ostatni** element w pojemniku.
 +    * **''​next()''​** - przesuwa iterator na **następny** element.
 +    * **''​prev()''​** - przesuwa iterator na **poprzedni** element.
 +    * **''​current()''​** - zwraca **aktualnie** pokazywany element w pojemniku, oraz umożliwia zmianę wartości tego elementu.
 +    * **''​atFirst()''​** - przenosi iterator na pierwszy element w pojemniku.
 +    * **''​atLast()''​** - przenosi iterator na ostatni element w pojemniku.
 +    * **''​size()''​** - zwraca ilość elementów od aktualnie pokazywanego do ostatniego elementu w pojemniku.
 +  - Staramy się aby obiekt iteratora zachowywał się jak **zwyczajny wskaźnik**,​ tzn. powinien umożliwiać następującą składnię zapisu: \\ (''​iterator''​ - obiekt iteratora, ''​pojemnik''​ - obiekt pojemnika na który pokazuje iterator, ''​i''​ - dowolna liczba całkowita, ''​b''​ - typ parametryczny przechowywany przez obiekt pojemnika):
 +    * ''​iterator = &​pojemnik''​ - ustawia pojemnik na który iterator pokazuje.
 +    * ''​if((int)iterator == NULL)''​ - sprawdzenie czy iterator pokazuje na pojemnik, ewentualnie czy pojemnik zawiera przynajmniej jeden element oraz czy aktualnie pokazywany element jest poprawny.
 +    * ''​*iterator''​ - zwraca aktualnie pokazywany element.
 +    * ''​*iterator = b''​ - zapisuje wartość zmiennej ''​b''​ pod **aktualnie** pokazywany element.
 +    * ''​iterator[i]''​ - zwraca element znajdujący się o ''​i''​ pozycji **dalej** względem **aktualnego** elementu.
 +    * ''​iterator[i] = b''​ - zapisuje wartość zmiennej ''​b''​ jako element znajdujący się ''​i''​ pozycji **dalej** względem **aktualnego** elementu.
 +    * ''​iterator + i''​ - zwraca iterator przesunięty o ''​i''​ elementów **dalej**.
 +    * ''​iterator += i''​ - przesuwa iterator o ''​i''​ elementów **dalej**.
 +    * ''​iterator - i''​ - zwraca iterator przesunięty o ''​i''​ elementów **bliżej**.
 +    * ''​iterator -= i''​ - przesuwa iterator o ''​i''​ elementów **wcześniej**.
 +    * ''​iterator++''​ - zwraca iterator pokazujący na ''​i''​-ty element a następnie przesuwa iterator na ''​i+1''​ element.
 +    * ''​++iterator''​ - przesuwa iterator na ''​i+1''​ element i zwraca iterator pokazujący na ''​i+1''​ element.
 +    * ''​iterator--''​ - zwraca iterator pokazujący na ''​i-ty''​ element a następnie przesuwa iterator na ''​i-1''​ element.
 +    * ''​--iterator''​ - przesuwa iterator na ''​i-1''​ element i zwraca iterator pokazujący na ''​i-1''​ element.
 +    * ''​iterator1 == iterator2''​ - porównanie dwóch iteratorów - są sobie równe tylko wtedy gdy pokazują na ten sam element.
 +    * ''​iterator1 != iterator2''​ - analogicznie jak powyżej.
 +  - Wszystkie metody zwracające wartość elementu powinny wyrzucać wyjątek typu **''​aghException''​** jeżeli żądany element jest poza zakresem :!:
 +  - Nie ma przymusu tworzenia metod czy też klas specjalizowanych.
 +  - Zaistniałe nieprawidłowe sytuacje powinny zostać obsłużone poprzez wyrzucenie wyjątku przy pomocy klasy **''​[[..:​org:​codepolicy#​obsluga_wyjatkow|aghException]]''​**.
 +  - Program powinien się poprawnie kompilować i uruchomić wraz z dostarczonym plikiem {{:​pl:​dydaktyka:​jimp2:​2016:​part2:​ex:​ex5.zip|}}
pl/dydaktyka/jimp2/2016/part2/ex/ex5.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
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