Jednym z warunków zaliczenia przedmiotu Programowanie obiektowe jest
zrealizowanie na ocenę jednego z poniższych projektów.
Każdy projekt należy zaimplementować wykorzystując poniższe założenia:
1. Projekt napisany zgodnie z paradygmatem programowania obiektowego (użycie
takich mechanizmów jak dziedziczenie, polimorfizm, klasa abstrakcyjna, przeciążanie
operatorów, itd.).
2. Implementacja projektu w języku C++ lub Java.
3. Ten sam projekt może być w jednej grupie realizowany, co najwyżej przez dwóch
studentów (oczywiście wówczas każdy projekt wykonywany jest samodzielnie).
4. Projekty 14-17 to projekty z wykorzystaniem grafiki (dla zainteresowanych).
5. Termin wykonywania projektu: do ostatniego laboratorium.
6. Z każdego projektu można otrzymać ocenę bardzo dobrą. Ocenie będzie podlegało
zastosowanie paradygmatu programowania obiektowego i różnych jego
mechanizmów (im więcej tym lepiej) i ogólnie, podejście do problemu.
7. Projekt wykonywany jest samodzielnie!
Projekty do wyboru
1. Gra w życie
Odbywa się ona na siatce kwadratowej, gdzie każda komórka może być żywa lub martwa. Ich
zachowaniem kierują następujące reguły: Komórka ożywa, gdy ma dokładnie trzech
sąsiadów żywych. Komórka przeżywa, gdy ma dwóch lub trzech sąsiadów żywych (umiera,
gdy ma ich mniej niż dwoje, „z samotności”, lub gdy ma ich więcej niż czworo
„z przeludnienia”).
Założenia:
Dane wejściowe podajemy w pliku, np. w formie:
o o o m m o o o
o o o m o o o o
m m o o o o o o
o o o o o o o o
Gdzie znaki 'o' i 'm' oznaczają odpowiednio komórkę żywą i martwą. Po odczytaniu danych
wejściowych program powinien generować z podanym z góry opóźnieniem, poszczególne
plansze. Dane wyjściowe przedstawić również w pliku.
2. Filtr tekstowy dla plików tekstowych
1. Zliczanie znaków, słów i wierszy
2. Numerowanie wierszy pliku
3. Usuwanie pustych wierszy
4. Zamiana małych liter na duże
5. Zamiana dużych liter na małe
6. Zamiana znaków tabulacji na określoną liczbę spacji
7. Zliczanie krotności wystąpienia podanego ciągu znaków
8. Zamiana podanego ciągu znaków na inny podany ciąg
9. Usunięcie z pliku podanego ciągu znaków, wypisanie wierszy (oraz ich numerów)
zawierających podany ciąg znaków
10. Wypisanie n początkowych wierszy pliku
11. Wypisanie n końcowych wierszy pliku
12. konwersja polskich znaków (dla standardów kodowania ISO-8859-2, Windows-1250,
Unicode)
Program powinien tworzyć nowy plik wynikowy, pozostawiając plik wejściowy bez zmian
3. Kalkulator wierszowy
Program powinien spełniać funkcje kalkulatora obliczającego wartość wyrażenia podanego z
klawiatury, jako ciąg znaków.
Założenia:
1. Cztery podstawowe działania na liczbach rzeczywistych
2. Reszta z dzielenia
3. Nawiasy wielopoziomowe
4. kilka wybranych funkcji (np. pierwiastkowanie, potęgowanie, itp. )
4. Baza danych
Program ma spełniać funkcje prostej bazy danych obsługiwanej z konsoli (menu tekstowe):
Założenia:
1. Dane przechowywane w pliku tekstowym (zapis i odczyt)
2. Przeglądanie zawartości bazy
3. Dodawanie rekordu na końcu bazy
4. Modyfikacja wybranego rekordu
5. Usuwanie wybranego rekordu
6. Wyszukiwanie rekordów według podanego kryterium
7. Sortowanie rekordów według wybranego kryterium
5. Quiz - przeprowadzanie testów
Program powinien wczytywać z pliku pytania wraz z odpowiedziami i przeprowadzać
egzamin. Po przeprowadzeniu testów program powinien podsumować wyniki i na podstawie
zadanych kryteriów wystawić ocenę. Program powinien mieć możliwość tworzenia i edycji
plików z pytaniami i odpowiedziami.
6. Analizator liczb
Program powinien analizować liczby podawane przez użytkownika i określać jakie to liczby:
pierwsze, doskonałe, zaprzyjaźnione, Fibonacci'ego, Amstrong'a. Program powinien także
umożliwiać generowanie liczb podanych rodzajów leżących w podanym przez użytkownika
przedziale. Dodatkowym atutem będzie wykorzystanie wątków.
Wskazówki:
1. Liczba pierwsza, to liczba naturalna większa od 1, podzielna tylko przez 1 i przez samą
siebie
2. Liczby zaprzyjaźnione, to dwie liczby naturalne, z których każda jest równa sumie
podzielników właściwych drugiej liczby (np. 220 i 284, tzn. 220 jest sumą
podzielników liczby 284, a 284 jest sumą podzielników liczby 220);
3. Liczby Fibonacci'ego to liczby należące do ciągu: 1, 1, 2, 3, 5, 8, 13, 21, ..... (dwie
pierwsze liczby to jedynki, każda następna jest sumą dwóch poprzednich);
4. Liczba Amstrong'a to liczba równa sumie sześcianów swoich cyfr, np. 153 = 1^3 + 5^3
+ 3^3.
7. Tekstowa grafika
Program ma mieć możliwość tworzenia i rysowania takich obiektów graficznych jak: odcinek,
okrąg, trójkąt, czworokąt, n-kąt, w trybie tekstowym (za pomocą np. symbolu *). Obiekty
"graficzne" powinny być skojarzone z odpowiednią kanwą reprezentującą układ
współrzędnych, obiekty mogą być do niej dodawane, usuwane. Obiekty powinny być
widoczne po narysowaniu odpowiedniej kanwy.
8. Kalendarz akademicki
1. Program ma wyświetlać kalendarz na podany rok z zaznaczeniem dnia bieżącego.
2. Dodatkowo projekt ma mieć możliwość wyświetlania wybranego przez użytkownika
miesiąca
3. Dni wolne, rektorskie i święta powinny znaleźć się w osobnym pliku.
4. Należy dodać funkcjonalność określenia, na podstawie daty początku i końca
semestrów i podanych dni wolnych, liczby poszczególnych dni tygodnia w danym
semestrze, np. pon - 15, wto - 13, itd.
9. Gra Tetris
Tetris - popularna gra w klocki, odpowiednia kombinacja klocków (z podziałem na kolory
i/lub kształty) powoduje kasowanie odpowiedniego zbioru klocków. Zastosować system
punktacji, możliwość gry ze współzawodnikiem.
10. Gra Wąż
Znana gra, więc chyba nie trzeba komentować.
11. Supermarket
W każdym SuperMarkecie znajdują się produkty przeróżnych rodzajów o różnych
własnościach:
- produkty spożywcze (nazwa, cena, termin ważności, skład, tabela wartości kalorycznych, ...)
pieczywo (chleb, bułka paryska, bułka poznańska, chałka, ...),
nabiał (mleko, ser, jogurt, ...),
wędliny (krakowska, polędwica sopocka, ...),
- artykuły chemiczne (nazwa, cena, termin ważności, skład, środki ostrożności, ...)
- AGD RTV (nazwa, cena, okres gwarancji, ...),
Zakupy przeciętnego klienta na ogół odbywają się wg następującego algorytmu:
- Klient wchodząc do sklepu, bierze koszyk (ew. wózek).
- Klient wrzuca do koszyka produkty, które chce kupić.
- Po dłuższym zastanowieniu klient ewentualnie zmienia zdanie i odkłada na półkę wcześniej
wybrany produkt.
- Klient idzie do kasy na koniec kolejki i czeka na obsługę.
- Klient płaci za zakupy (kartą lub gotówką).
Wymagania dot. projektu:
a) Zaprojektować i zaimplementować:
- klasy reprezentujące produkty w sklepie,
- klasy realizujące funkcjonalność koszyka jako abstrakcyjny typ danych (np. stos, kolejka,
drzewo, ...),
- klasy, których obiektem będą klienci,
- abstrakcyjny typ danych realizujący kolejkę klientów do kasy (np. kolejka :-)).
- Przed wysłaniem klienta do sklepu należy odpowiednio zaopatrzyć sklep. Tzn. wprowadzić
przeróżnego rodzaju produkty (dowolna metodą np. z pliku)
- Wysłać kilku klientów do sklepu po zakupy
- Ustawić klientów w kolejce przy kasie
- W odpowiedniej kolejności obsłużyć klientów.
12. Statki
Zadaniem projektu jest realizacja znanej gry w statki, w której udział bierze użytkownik
i komputer. Obydwie strony generują planszę 10x10, przy czym użytkownik (student)
wprowadza planszę z pliku, w postaci:
xxx...x...
..........
xx.....x..
.....x....
..........
xxx..xx...
..........
xx.....x..
..........
..xxxx....
natomiast komputer generuje swoją planszę w sposób losowy. Dla uproszczenia rodzaje
statków są następujące: x - 4 sztuki, xx - 3 sztuki, xxx - 2 sztuki, xxxx - 1 sztuka (Jeżeli ktoś ma
życzenie inny kształt statków, to proszę bardzo :-)). Podczas losowania statków należy
zwrócić uwagę aby statki nie stykały się ze sobą.
Gra polega na tym, że kolejno na zmianę strzelamy w statki przeciwnika podając
odpowiednie współrzędne. Jeżeli trafimy, to przysługuje nam kolejny dodatkowy strzał. Przy
trafionym strzale powinna zostać podana informacja jaki typ statku trafiono. Po każdym
strzale wypisać planszę obrazującą strzały oddane do przeciwnika. Gracz, który zestrzeli
wszystkie statki przeciwnika, wygrywa. Pod koniec wypisywane są obydwie plansze.
Student otrzyma dodatkowy plus, jeżeli komputer nie będzie losował miejsc w których na
pewno nie ma statków. Oczywiście dodatkowe elementy w projekcie mile widziane.
13. Macierze
Napisać program, który umożliwi zdefiniowanie tablicy o dowolnych wymiarach (tablice np.
mogą być odczytywane z pliku tekstowego). Dla macierzy zdefiniować: funkcje wypisywania
tablicy, dodawania i odejmowania odpowiednich macierzy, mnożenia macierzy przez liczbę.
Mnożenie macierzy i obliczanie wyznacznika macierzy kwadratowej. Wyznaczanie macierzy
odwrotnej do danej macierzy, zamianę macierzy do macierzy trójkątnej.
PROJEKTY GRAFICZNE (DLA ZAINTERESOWANYCH)
14. Gra – Układanka
1. Wczytanie obrazka
2. Podział obrazka na kilka części
3. Stworzenie siatki, do której będą przykładane kawałki układanki
4. Informacja o poprawności ułożenia układanki
5. Statystyka zwycięstw
15. Gra - Domino
1. Zbiór klocków domino - przemyślany layout
2. Zasady identyczne jak w grze domino
3. Możliwość gry kilku użytkowników
4. Statystyka zwycięstw
16. Edytor graficzny
Aplikacja, która posiada elementy funkcjonalności edytora MsPaint. (Im więcej możliwości
tym lepsza ocena)
17. Generator wykresów funkcji
Zastosować parser do odczytywania wzorów funkcji (dozwolone jest ograniczenie dla funkcji
bez asymptot). Możliwość wybory dziedziny funkcji.