Różnice

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

Odnośnik do tego porównania

pl:dydaktyka:jimp2:2016:part2:ex:ex2 [2019/06/27 15:50]
pl:dydaktyka:jimp2:2016:part2:ex:ex2 [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
 +====== Ćwiczenie 2: Szablony klas ====== ​
  
 +===== Po co =====
 +  * Ogólne doskonalenie posługiwania się C++.
 +  * Poznanie sposobu interpretacji szablonu klas.
 +  * Zapoznanie się z mechanizmem działania szablonów klas.
 +  * Definiowanie szablonów klas:
 +    * Definiowanie metod specjalizowanych.
 +    * Umiejętność zastosowania szablonów klas dla typów wbudowanych,​ jak również typów definiowanych przez użytkownika.
 +
 +===== Oddawanie ćwiczenia =====
 +  * Przed oddaniem ćwiczenia, program należy przetestować używając następującego pliku ''​ex2main.cpp''​ zawartego w paczce: {{:​pl:​dydaktyka:​jimp2:​2016:​part2:​ex:​ex2.zip|}}
 +  * Powyższy plik wymaga istnienia pliku ''​aghInclude.h''​ poprzez który włączane są wszystkie niezbędne pliki.
 +
 +===== Przebieg ćwiczenia =====
 +  - Definiujemy szablon klasy **''​aghMatrix''​** która będzie reprezentowała macierz danych.
 +  - Klasa powinna umożliwiać tworzenie macierzy o różnych wymiarach (także prostokątnych).
 +  - Indeksowanie wierszy i kolumn rozpoczyna się od **zera**.
 +  - Typem przechowywanym w macierzy jest **typ parametryczny**.
 +  - W klasie należy:
 +    - Zdefiniować metodę **''​setItem''​** ustawiającą wartość elementu macierzy która przyjmie trzy argumenty: pierwszy numer wiersza, drugi numer kolumny, trzeci wartość elementu na przecięciu podanego wiersza i kolumny.
 +    - Zdefiniować **dwie** metody o nazwie **''​setItems''​** które jako argument/​argumenty przyjmą wartości wszystkich współczynników macierzy niezależnie od jej wymiarów:
 +      * Pierwsza przyjmuje tylko jeden argument, którym jest wskaźnik do początku jednowymiarowej tablicy z której pobierane są wszystkie współczynniki macierzy.
 +      * Druga metoda jako pierwszy argument przyjmuje ilość wierszy (''​r''​) macierzy, następnie jako drugi argument ilość kolumn (''​c''​) macierzy, oraz jako pozostałe, ''​r*c''​ argumentów będących współczynnikami macierzy.
 +    - Przeładować operatory:
 +      * Przypisania ''​=''​
 +      * Dodawania ''​+''​
 +      * Mnożenia ''​*''​
 +      * Porównaia ''​=='',​ ''​!=''​
 +      * ''​()''​ - służący do odnoszenia się do poszczególnych elementów macierzy. Operator ten definiujemy jako dwuargumentowy przyjmujący dwie liczy całkowite będące odpowiednio indeksem wiersza i kolumny.
 +    - Zdefiniować dla klasy **''​aghMatrix''​** operatory **specjalizowane** ''​+'',''​*''​ dla typu **''​char''​** które kolejne małe litery alfabetu będą traktowały jako kolejne liczby naturale: ''​a=0,​ b=1, c=2, d=3,​...''​ np.:
 +        * ''​a+b=b''​ co odpowiada to działaniu: ''​0+1=1''​
 +        * ''​d*c=g''​ co odpowiada to działaniu: ''​3*2=6''​
 +        * Działania powinny dawać **poprawne** wyniki w zakresie **małych** liter:
 +        * Chcąc **utrzymać** wynik zawsze **w zakresie**, po przekroczeniu zakresu można wykonywać działanie **modulo**:
 +          * Podczas **dodawania** macierzy pierwszym argumentem działania modulo jest **suma odpowiednich elementów macierzy wejściowych**.
 +          * Podczas **mnożenia** macierzy pierwszym argumentem działania modulo jest **suma wszystkich iloczynów elementów macierzy wejściowych**.
 +    - Zdefiniować dla klasy **''​aghMatrix''​** operator specjalizowany ''​+''​ dla typu **''​std::​string''​**:​
 +      * Operator ten wykonuje dodawanie macierzy wg. powszechnie znanego algorytmu.
 +      * Argumentami tego operatora są wyrazy (napisy), które traktujemy jako **zbiory** liter.
 +      * Wynikiem dodawania dwóch wyrazów jest zbiór liter które należą do co najmniej jednego ze składników.
 +    - Zdefiniować dla klasy **''​aghMatrix''​** operator specjalizowany ''​*''​ dla typu **''​std::​string''​**:​
 +      * Operator ten wykonuje mnożenie macierzy wg. powszechnie znanego algorytmu.
 +        * Obliczenie pojedynczego elementu macierzy **wyjściowej** wymaga obliczenia **sumy iloczynów** wyrazów z odpowiedniego wiersza i odpowiedniej kolumny macierzy **wejściowych**.
 +      * Argumentami iloczynu są wyrazy (napisy), które traktujemy jako **zbiory** liter.
 +      * Wynikiem mnożenia dwóch wyrazów jest zbiór liter należących do **obu** wyrazów.
 +      * Sumowanie przebiega tak jak opisano powyżej.
 +  - Definiujemy klase **''​aghComplex''​** która reprezentuje liczby zespolone.
 +    - Przyjmujemy że wartości zarówno części rzeczywistej jak też urojonej są **zmiennoprzecinkowe**.
 +    - Klasa powinna być tak zdefiniowana aby mogła zostać użyta jako parametr szablonu klasy **''​aghMatrix''​!**
 +    - Wewnątrz szablonu klasy **''​aghMatrix''​** nie definiujemy żadnych metod/​operatorów specjalizowanych dla klasy **''​aghComplex''​**.
 +  - 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 ''​ex2main.cpp''​
 +
 + 
pl/dydaktyka/jimp2/2016/part2/ex/ex2.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