Programowanie obiektowe

Ten przedmiot ma na celu zapoznanie studentów z programowaniem obiektowym, a więc z całą terminologią i technologiami powiązanymi. Językiem wykładowym jest java, i na ćwiczeniach w pracowni taki język poznajemy. W celu lepszego opanowania języka, sugerowane jest wykonanie poniższych zadań.

Numery PESEL

Numer PESEL to najczęściej unikalna dla jednostki sekwencja cyfr, powiązana z jego/jej datą urodzenia. Szczegóły na temat znaczenia poszczególnych cyfr można odnaleźć na stronie rządowej poświęconej wyjaśnieniu czym ten numer jest: PESEL - numer identyfikacyjny.

Celem w tym zadaniu jest sprawdzenie i wypisanie wszystkich numerów PESEL, które mają jedną cyfrę zmienioną w taki sposób, że jest ona o 1 większa lub mniejsza od oryginalej. Suma kontrolna na końcu pozostaje niezmieniona w tak zmowyfikowanym numerze PESEL, a wtedy będzie to numer nieprawidłowy lub - co jest celem sprawdzenia - prawidłowy. Program powinien generować numery z wprowadzoną w kolejnym pozycjach zmianą cyfry, a następnie sprawdzać, czy nowy numer jest poprawny. Można wypisać wszystkie sprawdzane numery i ich status.

Analiza pliku tekstowego

Należy napisać niewielki program, który wczyta plik tekstowy i wyświetli na ekranie jego statystykę, np. liczbę znaków, liczbę wierszy, wiek pliku w dniach lub godzinach, itp. Odpowiednie informacje, które ma podawać program można rozszerzyć, np. można wyświetlać sumę kontrolną lub statystkę znaków, itp. Nazwę pliku powinno się podawać podczas uruchomienia jako argument wywołania programu.

Ułamki zwykłe

Należy napisać program, który będzie wykonywał działania na ułamkach zwykłych, czyli takich, które posiadają całkowity licznik i całkowity mianownik. Należy zaimplementować podstawowe operacje, takie jak mnożenie, dzielenie, dodawanie i odejmowanie. Ułamek reprezentowany przez dwie liczby powinien być możliwy do wyświetlenia w postaci np. dwóch liczb z ukośną kreską dzielenia, lub na żądanie w postaci np. ułamka dziesiętnego. Należy zadbać o obsługę przypadku, gdy mianownik takiego ułamka ustawiony zostanie na zero.

Wektory w przestrzeni 3d

Stwórz klasę, która obsługuje punkt w przestrzeni 3-wymiarowej. W klasie powinny być pola takie jak x, y, z lub tablica z trzema elementami typu double. Elementy te, to współrzędne w przestrzeni, i mogą reprezentować położenie jakiegoś punktu, lub współrzędne wektora. Klasa tego typu powinna umożliwiać przesuwanie wektora, mnożenie wektorów skalarne i wektorowe, oraz różne przydatne operacje, np. konwersję na system biegunowy, transformacje takie jak obrót lub rzutowanie, itp. Od Twojej pomysłowości i zaangażowania zależy co zaimplementujesz. Taką klasę będzie potem można wykorzystać do stworzenia małego programu animującego na ekranie obiekty trójwymiarowe.

Bryły w przestrzeni 3d

Idąc dalej tropem z poprzedniego zadania, możesz zaprogramować dodatkowe klasy, które będą korzystały z Twojej klasy podstawowej do obsługi punktu, i rozszerzą jej możliwości o obsługę kształtów w przestrzeni 3d. Oczywiście, jeżeli w Twoich eksperymentach współrzędna z będzie zawsze równa zero, otrzymasz po prostu działania dla przestrzeni 2d. Możesz zaimplementować obsługę podstawowych brył platońskich, np. czworościanu, sześcianu, dwunastościanu, itp. Takie bryły (i ogólnie bryły tego typu) podlegają podobnym transofrmacjom co punkty z których się składają. Pamiętaj o tym, że taka bryła powinna posiadać dodatowy punkt, który możesz traktować jako jej środek geometryczny. W zależności od tego, czy wszystkie Twoje punkty będą miały taką samą masę, czy nie - punkt ten może być barycentrum.

Spalanie lasu

To stare zadanie, które pamiętam jeszcze z czasu studiów. Należy opracować program, symulujący spalanie lasu trafionego piorunem. W programie można zdefiniować tablicę dwuwymiarową z losowo rozmieszczonymi liczbami reprezentującymi drzewa lub pola puste. Trafienie w taką tablicę jest losowe, wystarczy wygenerować dwie współrzędne. Jeżeli trafione zostanie drzewo, to zaczyna się palić, natomiast jeżeli trafiono pole puste, nic się nie dzieje. Drzewo, które się pali, zapala drzewa, które z nim sąsiadują. Sąsiedztwo określamy analizując sąsiednie elementy tablicy. Program powienien wypalić cały obszar lasu w którym rosną sąsiadujące ze sobą drzewa. Następnie należy określić, jaki procent całego lasu został spalony. W oryginalej wersji zadania należało dodatkowo obliczyć (metodą wielokrotnych prób) jaki procent powierzchni lasu powinien być optymalny ze względu na maksymalizację zalesienia i minimalizację strat wynikających z pożarów.

Analiza statystyczna

To zadanie pochodzi z rzeczywistej pracy naukowej, i zostało "wycięte" z kontekstu aby nie zaciemniać obrazu. Wyobraź sobie, że masz bardzo długi wektor liczb, które strumieniem wczytujesz do swojego programu. Liczby te mają wartości od 0 do 255 i tak naprawdę określają jasność pewnego elementu obrazu. Twoim zadaniem jest napisać program, który wczytując te liczby, policzy dla nich średnią, odchylenie standardowe oraz wariancję, ale w pewien szczególny sposób. Chodzi o to, że program nie zaczyna liczyć od razu, a dopiero po wczytaniu pierwszych 10 liczb. Następnie wyliczana jest statystyka dla tych dziesięciu liczb, i program wczytuje następną liczbę. Wtedy kolejny raz program liczy statystykę dla ostatnich dziesięciu wczytanych liczb. I tak aż do końca danych. Wyniki w postaci średniej, odchylenia standardowego oraz wariancji powinny być wypisane w kolejnych wierszach w formacie "%12.4f%12.4f%12.4f".

Mrowisko

To zadanie jest inspirowane obserwacjami przyrody, a konkretnie kolonii mrówek. Należy napisać symulator, w którym obszarem badań będzie prosotkątny obszar, w którym poruszać się losowo (o jedno pole w każdym kierunku) będą mrówki. Mrówka jest obiektem, który zmienia losow swoje współrzędne w dwuwymiarowej tablicy. Oprócz mrówek w przestrzeni danych znajdują się także losowo umieszczone obiekty, które mogą być np. igłami sosnowymi lub listkami. Każdy taki obiekt leży początkowo w losowej pozycji. Mrówka po wejściu na pole, w którym znajduje się taki obiekt, podnosi go, i kontynuuje marsz losowy. W chwili gdy napotka kolejny taki leżący obiekt (listek), upuszcza ten, który do tej pory nosiła i odchodzi. Prawidłowo napisana symulacja powinna pokazać jak powstają mrowiska z losowo znajdowanych i przemieszczanych elementów.

Programowanie interfejsów użytkownika w Swing/AWT

Wybierz dowolny spośród powyższych programów, i zaimplementuj dla niego system okienkowy. Wykorzystaj klasy JFrame i różne elementy interfejsu takie jak JButton, JLabel i inne. Zależnie od Twojej inwencji, możesz stworzyć duży program z bardzo złożonym interfejsem, lub proste okno, wykonujące niewiele akcji. Uwaga: Gdy zaczniesz tworzyć okna graficzne, aplikacje pracujące wyłącznie w trybie tekstowym mogą stracić dla Ciebie urok.