Zadanie 1. Utworzyć klasę reprezentującą liczby wymierne. Obiekty klasy powinny przechowywać licznik i mianownik rozłożone na czynniki pierwsze. Klasa powinna mieć zdefiniowane operatory czterech podstawowych działań arytmetycznych oraz operator konwersji do typu double, zwracający wartość (być może nieco niedokładną). Ilość czynników zarówno licznika jak i mianownika nie można ograniczać. return Niepoprawny wynik działania funkcji mnoz(a,b) klasy liczba
Zadanie 2. Utworzyć klasę Wektor reprezentującą wektor N elementów rzeczywistych oraz klasę Permulatacja reprezentujące permutacje elementów tego wektora. Wartość N jest określana podczas tworzenia i nie może mieć żadnego ograniczenia. Klasy powinny mieć konstruktory umożliwiające określenie N i poszczególnych elementósw, a klasa Permulatacja dodatkowo konstruktor tworzący permutację tożsamą. W klasach powinny być zdefiniowane również operatory przypisania zarówno od innych obiektów tej klasy jak i od tablic parametrów (w tym przypadku nie można określić N powinno być nie zmieniane). Na obiektach tych klas należy zdefiniować następujące operacje: 1. Permulatcja * Permulatcja / Permulatcja składanie permutacji 2. Permulatcja * Wektor / Wektor zastosowanie permutacji do wektora Klasy powinny mieć operatory indeksowania, zwracające podany parametr oraz operatory konwersji na tablicę parametrow. Parametry klasy Wektor mają typ double, a klasy Perm typ int. return Niepoprawny wynik działania funkcji mnoz(a,b) klasy liczba
Zadanie 3. Utworzyć klasę Liczba reprezentują dowolnie długie liczby całkowite i operacje na nich. Klasa powinna mieć szereg konstruktorów: 1. bez argumentowy tworzący obiekt reprezentujący liczbę 0 2. o argumencie long tworzący obiekt reprezentujący podaną liczbę 3. o argumencie const *short tworzący object o cyfrach zapisanych w podanej tablicy 4. o argumencie const *char tworzący object o cyfrach zapisanych w podanym tekście Dla obiektow klasy umożliwić wykonanie następujących operacji: Liczba + Liczba / Liczba Liczba + long / Liczba long + Liczba / Liczba Liczba Liczba / Liczba Liczba long / Liczba long Liczba / Liczba Klasa powinna mieć operator indeksowania, zwracający podaną cyfrę oraz operator konwersji na typ long (ignorujący możliwość wystąpienia przepełnienia). Zdefiniować należy rownież operatory wczytywania obiektow ze strumienia i wyprowadzania do strumienia. Ilość cyfr nie może być ograniczona. return Niepoprawny wynik działania funkcji mnoz(a,b) klasy liczba
Zadanie 4. Utworzyć klasę Wektor reprezentującą wektory liczb rzeczywistych i realizującą operacje na nich. Długość wektora nie może być ograniczona. W przypadku przekroczenia domyślnej długości należy za alokować dodatkową pamięć. Klasa powinna mieć następujące kostruktory: 1. konstruktor określający ilość elementów wektora, oraz opcjonalny argument typu const double*, określający adres tablicy z elementami inicjującymi. W przypadku pominięcia drugiego argumentu, konstruktor powinien inicjować wektor zerami. 2. konstruktor określający ilość elementów wektora, oraz argument typu double,tworzący wektor o jednakowych elementach. 3. dodatkowe dwa konstruktory, umożliwiające inicjowanie za pomocą elementów typu float. Klasa powinna umożliwiać wykonanie przypisania od wartości: 1. float inicjalizacja wszystkich elementów wektora jednakową wartością 2. double inicjalizacja wszystkich elementów wektora jednakową wartością 3. const float* inicjalizacja elementów wektora na podstawie tablicy (tak jak w konstruktorze, ale bez możliwości zmiany rozmiaru) 4. const double* inicjalizacja elementów wektora na podstawie tablicy (tak jak w konstruktorze, ale bez możliwości zmiany rozmiaru) 5. const Wektor& przypisanie wektora z możliwością zmiany rozmiaru W klasie powinny być zaimplementowanie operacje dodawania, odejmowania wektorow oraz mnożenia przez skalar. Dodatkowo należy zdefiniować operator konwersji do typu double zwracający długość wektora, operator konwersji na typ const double* (zwracający wskazanie na tablicę kolejnych elementów wektora) oraz operator indeksowania, zwracający podany element wektora. Dodatkowo należy zdefiniować operatory porównania == i!=. return Niepoprawny wynik działania funkcji mnoz(a,b) klasy liczba
Zadanie 5. Utworzyć klasę Punkt reprezentującą punkty N-wymiarowej przestrzeni (każdy obiekt reprezentuje jeden punkt) i klasę Transformacja reprezentującą liniowe przekształcenia na tych punktach. Ilość wspołrzędnych N nie może być ograniczona. Liniowe przekształcenie punktu N- wymiarowego uzyskuje się przez pomnożenie współrzędnych punktu przez macierz i dodaniu wektora wyrazow wolnych. Macież jak i wyrazy wolne są parametrami przekształcenia. Klasy powinny mieć konstruktory o argumentach określających N i tablice parametrów. Na elementach tych klas można wykonywać następujące operacje: 1. Transformacja * Punkt / Punkt wykonanie przekształcenia 2. Transformacja + Transformacja / Transformacja składanie przekształceń Klasa Punkt powinna mieć operator indeksowania, zwracający podany element, a klasa Transformacja metody publiczne umożliwiające poznanie parametrow przekształcenia. return Niepoprawny wynik działania funkcji mnoz(a,b) klasy liczba
Zadanie 6. Utworzyć klasę Liczba reprezentującą stało pozycyjne liczby rzeczywiste o dowolnej długości i operacje na nich. Klasa powinna mieć następujące konstruktory: 1. bez argumentowy, tworzący obiekt reprezentujący 0.0 2. o argumencie double tworzący obiekt reprezentujący podaną liczbę Dla obiektow klasy umożliwić wykonanie następujących operacji: 1. Liczba + Liczba / Liczba 2. Liczba + double / Liczba 3. double + Liczba / Liczba 4. Liczba Liczba / Liczba 5. Liczba double / Liczba 6. double Liczba / Liczba Klasa powinna mieć też operator konwersji na typ double oraz operator wczytywania obiektów ze strumienia i wyprowadzania do strumienia. Ilość cyfr zarówno przed przecinkiem jak i po przecinku nie można ograniczyć. return Niepoprawny wynik działania funkcji mnoz(a,b) klasy liczba
Zadanie 7. Utworzyć klasę Macierz reprezentującą macierze liczb rzeczywistych i operacje na nich. Dla obiektów utworzonej klasy umożliwić wykonywanie następujących operacji: 1. Macierz + Macierz! Macierz 2. Macierz - Macierz! Macierz 3. Macierz * Macierz! Macierz 4. Macierz * double! Macierz 5. double * Macierz! Macierz Klasa powinna mieć konstruktor dwu argumentowy typu int, tworzący macierz zerową o podanych rozmiarach. Dodatkowo klasa powinna umożliwić wykonanie wyrażenia M[a][b] (gdzie M jest typu Macierz&, a a i b typu int) zwracającego double&. Klasa powinna mieć też operator wczytywania obiektów ze strumienia i wyprowadzania do strumienia. Rozmiaru macierzy nie można ograniczyć. return Niepoprawny wynik działania funkcji mnoz(a,b) klasy liczba
Zadanie 8. Utworzyć klasę Wielomian reprezentującą wielomiany jednej zmiennej i operacje na nich. Klasa powinna mieć konstruktor o argumencie całkowitym, tworzący wielomian podanego stopnia o zerowych współczynnikach oraz drugi konstruktor o argumencie całkowitym (określającym rząd) i cost double* (określającym wspołczynniki). Dla obiektow utworzonej klasy umożliwić wykonywanie następujących operacji: Wielomian + Wielomian! Wielomian Wielomian - Wielomian! Wielomian Wielomian * double! Wielomian double * Wielomian! Wielomian Wielomian(double)! double obliczenie wartości wielomianu dla podanej wartości zmiennej niezależnej Klasa powinna mieć operator indeksowania, zwracający podany współczynnik oraz operatory wczytywania obiektów ze strumienia i wyprowadzania do strumienia. Ilość współczynników wielomianu nie można ograniczać. return Niepoprawny wynik działania funkcji mnoz(a,b) klasy liczba
Zadanie 9. Utworzyć klasę Kalkulator, reprezentującą kalkulator z użyciem odwrotnej notacji polskiej. Obiekt klasy reprezentuje stos, na który można dostawiać liczby typy double poprzez wykonanie operacji dodawania. Kalkulator umożliwia wykonanie zdefiniowanych operacji, powodujących pobranie argumentow ze stosu, wykonanie działania i umieszczenie wyniku na stosie. Operacje wykonuje się na obiekcie za pomocą operatora wywołania funkcji z argumentem będącym zdefiniowanym typem wyliczeniowym. Wynik działania mozna poznać na dwa sposoby: odczytując wartość ze szczytu stosu bez zdejmowania jej (operator rzutowania na typ double) lub zdejmując ją ze stosu (operator wywołania funkcji bez argumentowej). Prócz tego klasa powinna mieć operator indeksowania, umożliwiający odczyt dowolnej liczby ze stosu (określając jej pozycję względem stosu) oraz operatory wczytywania obiektów ze strumienia i wyprowadzania do strumienia. Rozmiaru stosu nie można ograniczać. return Niepoprawny wynik działania funkcji mnoz(a,b) klasy liczba
Zadanie 10. Utworzyć klasę Modulo reprezentującą liczby całkowite w zakresie 0...N 1 i działania modulo N. Klasa powinna mieć konstruktor umożliwiający utworzenie zadanej liczby i konstruktor kopiujący. Dla obiektów utworzonej klasy umożliwić wykonywanie następujących operacji: 1. Modulo + Modulo! Modulo 2. Modulo - Modulo! Modulo 3. Modulo * Modulo! Modulo Prócz tego należy zdefiniować operator konwersji na typ całkowity oraz operator przypisania od typu int i Modulo. return Niepoprawny wynik działania funkcji mnoz(a,b) klasy liczba
Zadanie 11. Utworzyć klasę MultiLin reprezentującą funkcję przedziałami liniową jednej zmiennej. Każda instancja obiektu klasy będzie definiowała szereg rozłącznych przedziałow, a każdym z przedziałów współczynniki liniowej zależności. Obiekty takie można dodawać (o ile mają jednakowe przedziały) odpowiada to dodawaniu funkcji przez nie reprezentowanych lub mnożyć (o ile nie posiadają zachodzących na siebie przedziałów) odpowiada to sklejaniu przedziałów dwu funkcji w jedną funkcję. Klasa powinna mieć konstruktor umożliwiający utworzenie dowolnej przedziałami liniowej funkcji oraz konstruktor kopiujący. Powinna również posiadać operator wywołania funkcji o argumencie typu double odpowiada to obliczeniu wartości funkcji dla danej wartości zmiennej niezależnej. Prócz tego klasa powinna mieć operatory wczytywania obiektów ze strumienia i wyprowadzania do strumienia. Ilość przedziałów nie można ograniczać. return Niepoprawny wynik działania funkcji mnoz(a,b) klasy liczba
Zadanie 12. Utworzyć klasę Lineq reprezentującą równanie liniowe N niewiadomych. Dla obiektów utworzonej klasy umożliwić wykonywanie następujących operacji: 1. Lineq + Lineq! Lineq dodawanie stronami równań 2. Lineq - Lineq! Lineq odejmowanie stronami równań 3. Lineq * double! Lineq mnożenie stronami równania przez zadaną liczbę 4. double * Lineq! Lineq mnożenie stronami równania przez zadaną liczbę Klasa powinna mieć konstruktor kopiujący oraz konstruktor umożliwiający utworzenie dowolnego równania o zadanych współczynnikach. Prócz tego klasa powinna mieć operatory wczytywania obiektów ze strumienia i wyprowadzania do strumienia, operator indeksowania, zwracający zadany współczynnik oraz operatory porównania == i!=. Ilość niewiadomych w równaniu nie można ograniczać. return Niepoprawny wynik działania funkcji mnoz(a,b) klasy liczba
Zadanie 13. Utworzyć klasę Napis reprezentującą teksty i realizującą operacje na nich. Długość tekstu nie może być ograniczona. Klasa powinna mieć konstruktor domyślny (tworząca pusty tekst), konstruktor kopiujący i konstruktor inicjujący tekstem o podanym adresie. Klasa powinna umożliwiać wykonanie operacji przypisania o postaci a = Napis("abcdef"); jak i o postaci a = "abcdef"; Operacje wykonywane na tekście to operator + (sklejanie tekstów) jak i operator indeksowania (zwracający wybrany znak tekstu). Klasa powinna mieć także zdefiniowany operator konwersji na typ const char* oraz operatory porównania. return Niepoprawny wynik działania funkcji mnoz(a,b) klasy liczba
Zadanie 14. Utworzyć klasę Portfel reprezentującą pieniądze i realizującą operacje na nich. Klasa powinna mieć konstruktor domyślny (tworząca pusty portfel z 0,00 zł), konstruktor kopiujący i konstruktor inicjujący pieniędzmi o podanym adresie. Klasa powinna umożliwiać wykonanie operacji przypisania o postaci a = Portfel(20,30); jak i o postaci a = 20,30; Operacje wykonywane na pieniądzach to: operator + (dodawanie pieniędzy) operator (odejmowanie pieniędzy operator * (mnożenie pieniędzy) operator / (dzielenie pieniędzy return Niepoprawny wynik działania funkcji mnoz(a,b) klasy liczba
Zadanie 15 Utworzyć klasę Student reprezentującą średnią studenta i realizującą operacje na tej średniej. Klasa powinna mieć konstruktor domyślny (tworzącą Studenta ze średnią 5,00), konstruktor kopiujący i konstruktor inicjujący średnią o podanym adresie. Klasa powinna umożliwiać wykonanie operacji przypisania o postaci a = Student(4,30); jak i o postaci a = 4,30 Operacje wykonywane na pieniądzach to: operator + (dodawanie do średniej) operator (odejmowanie od średniej return Niepoprawny wynik działania funkcji mnoz(a,b) klasy liczba