1 Podstawy programowania II edycja 2016/17 Zadania laboratoryjne cz. I Uwaga: Zdania mogą być budowane/uruchamiane z wykorzystaniem: a) poleceń konsolowych pakietu Java JDK 8u121(lub nowszych) (http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads- 2133151.html) b) jednego ze środowisk IDE: a. Eclipse (https://eclipse.org/) b. NetBeans IDE (https://netbeans.org/) c. IntelliJ IDEA (https://www.jetbrains.com/idea/) d. BlueJ (http://www.bluej.org/) e. inne 1. Zapisywanie prostych algorytmów decyzyjnych w języku Java. 1a. Napisz program znajdowania pierwiastków równania kwadratowego a²+b+c=0. Wartości a, b i c czytaj z klawiatury. 1b. Wydrukuj dane trzy liczby: A, B i C w kolejności rosnącej. 1c. Uporządkuj dane trzy liczby: A,B i C w kolejności rosnącej. Jaka jest różnica między algorytmami 1b i 1c?. 1d. Uporządkuj pięć liczb: A,B,C,D i E algorytm: patrz semestr I 1e. Napisz program, który sprawdzi z odcinków o długościach A, B, C można zbudować trójkąt, jeśli tak to jaki: a) równoboczny, równoramienny czy różnoboczny b) ostrokątny, prostokątny czy rozwartokątny? 1f. Czy przyjęcie założenia A B C upraszcza rozwiązanie? Jeśli tak, to warto rozbudować program 1e o wstępne sortowanie liczb. 1g. Napisz program, który sprawdza, czy punkt P(, y) o danych współrzędnych należy do obszaru wyznaczonego przez trójkąt o danych (określonych parami współrzędnych) wierzchołkach A, B i C. 1h. Dziś jest data D, M, R. Jaka data była wczoraj? Jaka data będzie jutro? 2. Zapisywanie prostych algorytmów iteracyjnych w języku Java 2a. Jest dany ciąg n liczb rzeczywistych. Oblicz: i) sumę wszystkich liczb ciągu, ii) średnią arytmetyczną dodatnich liczb ciągu, iii) średnią arytmetyczną liczb występujących bezpośrednio po liczbach dodatnich.
2 2b. Oblicz sumę cyfr danej liczby naturalnej K. 2c. Ile cyfr znaczących ma dana liczba naturalna K? 2d. Jaka jest największa cyfra liczby naturalnej K? 2e. Sprawdź czy liczba naturalna K jest liczbą pierwszą. 2f. Znajdź największy wspólny podzielnik liczb naturalnych M i N. Czy założenie M N upraszcza problem? 2g. Wykorzystaj algorytm Euklidesa (z obliczaniem reszty z dzielenia) do zadania 2f. 2h. Wykorzystaj algorytm Euklidesa (bez wykorzystywania dzielenia) do zadania 2f. 2i. Oblicz X do potęgi K (K- liczba naturalna). Postaraj się zminimalizować liczbę mnożeń. 2j. Korzystając z podanych poniżej wzorów oblicz przybliżone wartości funkcji. Uwaga: zadanie należy rozwiązać zgodnie ze sztuką! patrz I semestr e k 2k k ( 1) 0 k (2k)! k 2k 1 k sin ( 1) cos! k 0 (2k 1)! k 0 3. Obiektowa realizacja wybranych algorytmów 3a. Wybrane algorytmy z grupy 1 i 2 należy zapisać jako metody klas obiektowych Javy. 3b. Zdefiniuj klasę Data. Klasa powinna przechowywać jako składowe dzień, miesiąc, rok i zawierać konstruktor i podstawowe metody odczytujące poszczególne składowe daty i umożliwiające zmianę daty. Należy również zdefiniować dodatkowe metody określające: czy data jest wcześniejsza od data1 czy rok daty jest rokiem przestępnym ile dni jest w miesiącu wskazywanym przez data czy data jest poprawna zmień data na o dzień późniejszą (wcześniejszą) zmień data na o miesiąc późniejszą (wcześniejszą) zmień data na o rok późniejszą (wcześniejszą) oblicz różnicę między data a data1 przy założeniu, że data >= data1 Uwaga data oznacza datę zapisaną w polach obiektu wywołującego, natomiast data1 jest przekazywana jako parametr metody - jako obiekt lub osobne wartości dzień, miesiąc rok 3c. W klasie Data dodaj metodę, która wyznacza dzień tygodnia dla podanej daty dzieńmiesiąc-rok i zwraca go w postaci napisu typu String (algorytm do znalezienia w Internecie).
3 4. Tablice (nieobiektowo) Wykorzystując jako źródło danych: a) generator liczb pseudolosowych, b) konsolę, c) okna dialogowe do wprowadzania danych zrealizuj następujące zadania: 4A. a) Utwórz w tablicy ciąg, b) Utwórz w tablicy zbiór losowych liczb całkowitych z przedziału <1, K> (liczebność ciągu: K>0) a następnie: - wyświetl ciąg/zbiór w kolejności dopisywania elementów, - wyświetl ciąg/zbiór w kolejności odwrotnej do kolejności dopisywania elementów, - podziel ciąg/zbiór na dwa uporządkowane podciągi/podzbiory: liczb parzystych i liczb nieparzystych. Uwaga: w zbiorze elementy nie mogą się powtarzać. 4B. Utwórz dwie macierze ( źródłowe ) liczb rzeczywistych o zadanych rozmiarach M M (M dane) a następnie wyznacz: a) sumę macierzy, b) iloczyn macierzy, c) macierze transponowane dla każdej z macierzy źródłowej. 4C. Dla wielomianu o postaci: w() = a0 * n + a1 * n-1 + a2 * n-2 +... + an-1 * + an zaprogramuj następujące funkcjonalności (F) wielofunkcyjnego programu: F1: Wczytanie parametrów wielomianu w() (stopnia wielomianu n oraz współczynników wielomianu) i zapamiętanie ich (w tablicy jednowymiarowej), F2: Wczytanie wartości (ma być wykonalne tylko wówczas, jeśli wcześniej zrealizowano F1), F3: Wyznaczenie i zapamiętanie wartości wielomianu w dla wczytanego (wykonalne, jeśli wcześniej zrealizowano F1 i F2), F4: Wyznaczenie współczynników i stopnia wielomianu v() = w(1)() (pierwsza pochodna wielomianu w) i zapamiętanie tych danych jako parametrów wielomianu w() (wykonalne, jeśli wcześniej zrealizowano F1), F5: Wyprowadzenie wyznaczonej wartości wielomianu w() (o ile wcześniej wykonano F3 i nie wykonano potem F1, F2 lub F4), F6: Wyprowadzenie parametrów wielomianu w() (wykonalne, jeśli wcześniej zrealizowano F1), F7: Wyznaczenie wartości pierwszej pochodnej wielomianu w() dla danego, korzystając z definicji pochodnej (wykonalne, jeśli wcześniej zrealizowano F1 i F2). F8: Wyprowadzenie wartości pierwszej pochodnej, wyznaczonej w F7 (wykonalne, jeśli wcześniej zrealizowano F7 i nie wykonano potem F1.. F6). Zweryfikuj poprawność uwarunkowań dla poszczególnych funkcji programu. W razie potrzeby dokonaj stosownej korekty (zmiany, uzupełnienia) zbioru uwarunkowań.
4 4D. Dla danego zbioru P zawierającego n punktów na płaszczyźnie, w układzie współrzędnych kartezjańskich, wyznacz: - punkt najbardziej odległy od początku układu współrzędnych, - współrzędne wierzchołków prostokąta o najmniejszym z możliwych polu powierzchni i bokach równoległych do osi, w którego polu znajdą się wszystkie punkty zbioru P, - tabelę odległości pomiędzy wszystkimi możliwymi parami punktów, - parę punktów najbardziej odległych od siebie, - trójkę punktów tworzących trójkąt o największym polu powierzchni. Dodatkowo: - uporządkuj zbiór punktów w kolejności rosnących odległości tych punktów od początku układu współrzędnych, - uporządkuj pary punktów w kolejności rosnących odległości pomiędzy nimi. 5. Tablice obiektowo 5A. Zdefiniuj klasę Tablica. Obiekty tej klasy powinny móc zapamiętać n liczb całkowitych (n<=100). Należy opracować metody: - suma wartości elementów tablicy, - wartość maksymalna w tablicy, - element maksymalny (jako indeks elementu maksymalnego w tablicy), - czy podana, jako argument (parametr) wartość występuje na którejś z n (n <=liczba elementów) początkowych pozycji tablicy, - czy tablica jest różnowartościowa (porównać rozwiązanie bezpośrednie i rozwiązanie wykorzystujące poprzednią metodę), - usuń wszystkie wystąpienia podanej jako parametr wartości ; kolejność pozostawionych elementów może ulec zmianie, - wyeliminuj wszystkie powtórzenia elementów tablicy. Zaproponuj ewentualne inne metody klasy Tablica. 5B. Zdefiniuj klasę TablicaUporzadkowana (niemalejąco), przy zachowaniu założeń z zadania 5A. Należy opracować metody: - wstaw element o wartości podanej jako parametr, - usuń element wskazany przez podany indeks, - usuń element o podanej wartości (jeśli takich jest więcej usuwaj ostatni), - usuń wszystkie wystąpienia podanej wartości, - czy podana jako argument wartość występuje na którejś z n ( n<= liczba elementów) początkowych pozycji tablicy, - wyeliminuj wszystkie powtórzenia elementów tablicy. Zaproponuj ewentualne inne metody klasy TablicaUporzadkowana. 5C. Zdefiniuj klasę Macierz. Obiekty tej klasy powinny móc zapamiętać tablicę dwuwymiarową (do 20 wierszy i 30 kolumn) liczb całkowitych. Należy opracować metody:
5 - wartość maksymalna w macierzy, - element maksymalny (wynikiem powinien być obiekt klasy Indeks, przechowujący wartości wskaźników elementu tablicy), - wiersz o maksymalnej sumie wartości elementów, - czy podana, jako argument (parametr) wartość występuje w macierzy, - czy macierz jest różnowartościowa, - transponowanie macierzy. Zaproponuj ewentualne inne metody klasy Macierz. 5D. Zdefiniuj klasę MacierzTab, w której macierz jest traktowana jako jednowymiarowa tablica obiektów typu Tablica (z zadania 5A; dla uproszczenia zapisu należy przyjąć, że mamy uprawnienia do bezpośredniego dostępu do pól obiektów typu Tablica). Obiekty tej klasy powinny móc zapamiętać tablicę dwuwymiarową (do 20 wierszy i 30 kolumn) liczb całkowitych. Należy zdefiniować metody (wykorzystując metody klasy Tablica): - suma wartości elementów macierzy, - wartość maksymalna w macierzy, - element maksymalny (wynikiem powinien być obiekt klasy Indeks), - wiersz o maksymalnej sumie wartości elementów, - czy podana ( jako parametr ) wartość występuje w macierzy, 6. Definiowanie hierarchii klas - wykorzystanie dziedziczenia. 6a. Zdefiniuj zestaw klas umożliwiający prowadzenie prostej ewidencji płac w Firmie (nie należy się przejmować tym, że przedstawione poniżej założenia są mocno uproszczone a tym samym mało realistyczne ). Założenia : - Firma może zatrudniać maksymalnie 100 Pracowników ( do ich zapisania należy użyć jednej tablicy - kolejność zapisu nie ma żadnego znaczenia) - każdy Pracownik jest jednoznacznie identyfikowany przez nazwisko ( nazwisko jest pełnym identyfikatorem więc nie może być dwóch Pracowników o tym samym nazwisku ) - każdy Pracownik jest zatrudniony na określoną część etatu ( np. 0.5, 1.0 lub 1.25) - są dwie grupy Pracowników : Urzędnicy i Robotnicy - na płacę Urzędnika składa się płaca podstawowa ( podana dla całego etatu ) plus określony indywidualnie % premii - płacę Robotnika oblicza się uwzględniając liczbę przepracowanych godzin i stawkę godzinową; za nadgodziny czyli godziny przepracowane ponad LIMIT ( podawany dla całego etatu i wspólny dla wszystkich Robotników ) należy się 50% dodatku Oprócz podstawowych metod (konstruktory, gettery i settery) zdefiniuj takie, które muszą istnieć w realnej firmie, czyli: - obliczenie wypłaty Pracownika, - znajdź Pracownika o podanym nazwisku ( wynikiem powinna być referencja do obiektu ) - czy Pracownik jest Urzędnikiem ( Robotnikiem, - przyjmij nowego Urzędnika ( Robotnika ) - dane to nazwisko i na jaką część etatu zatrudniamy - zwolnij pracownika o podanym nazwisku, - ilu jest zatrudnionych Urzędników ( Robotników ), - jaka jest suma wypłat wszystkich Urzędników ( Robotników), - wydruk listy płac, - i tak dalej UWAGA W razie konieczności przyjmij dodatkowe, uzasadnione założenia.