background image

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 

background image

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. 

background image

 

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, ...), 

background image

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 

background image

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.