Java praca domowa 03

background image

© 2013 dr inż. Jerzy R. Jaworowski, Instytut Teleinformatyki, Politechnika Krakowska im. Tadeusza Kościuszki

Praca domowa 03 – pack

Termin zwrotu : 30 marca godz. 23.00

Zadanie uznaje się za zaliczone, gdy praca oceniona zostanie na co najmniej 6 pkt.


Dana jest tafla (szklana, blachy) o wymiarach n x n (kwadratowa). Rozmiar tafli określany jest parametrem zewnętrznym programu

<square_size>. P

lik wejściowy (wskazywany przez parametr

<input_file>

programu) zawiera w kolejnych liniach ciąg liczb rzeczywistych,

z których każda definiuje średnicę d elementu (okrąg), który powinniśmy z tafli wyciąć. Można przyjąć, że dla każdego elementu spełniony jest
warunek d < n. Ilość elementów opisanych w zbiorze wejściowym określona jest wyłącznie poprzez ilość zapisów w pliku wejściowym.
Długość pojedynczej linii ani ilość liczb w linii nie jest w jakikolwiek sposób określona (format swobodny). Ilość elementów opisanych w
zbiorze wejściowym jest duża, a ich łączna powierzchnia jest istotnie większa od n x n (inaczej mówiąc : jest z czego wybierać).

Należy zaprojektować i zaimplementować klasę Knapsack umożliwiającą utworzenie i utrzymywanie struktury informacji o problemie.

Należy zaimplementować metodę pack() rozwiązującą zadania planowania podziału tafli w taki sposób, by wybierając dowolne z elementów
znajdujących się w zbiorze (pliku wejściowym) dokonać takiego ich rozłożenia i upakowania na tafli, by powierzchnia, która po pocięciu tafli
pozostanie niewykorzystana (tzw. odpady) była możliwie najmniejsza (wartością zwracaną przez funkcję jest ta właśnie łączna powierzchnia
odpadów).


Program ma być zapisany wyłącznie w dwóch plikach

Knapsack.java

zawierającym implementację zadania, oraz

Main.java

zawierającym programem główny. Program nie może korzystać z jakichkolwiek bibliotek zewnętrznych.


Proces kompilacji musi być możliwy z użyciem komendy

javac –Xlint Knapsack.java Main.java


Uruchomienie programu winno być możliwe z użyciem komendy

java Main <input_file> <square_size>


Przykładowy wynik końcowy z dokładnością do 5-ciu cyfr dziesiętnych (w strumieniu wyjściowym nie powinny pojawiać się jakiekolwiek inne
elementy – np. wydruki kontrolne) :

Powierzchnia odpadu : 31.39873

background image

© 2013 dr inż. Jerzy R. Jaworowski, Instytut Teleinformatyki, Politechnika Krakowska im. Tadeusza Kościuszki

Wymagania :

• Klasa implementująca problem winna zostać zdefiniowana w pliku

Knapsack.java

• Klasa implementująca mechanizm program główny (metoda main) winny być zdefiniowane w pliku

Main.java

• W pliku README.pdf winien być zawarty szczegółowy opis organizacji struktur danych oraz szczegółowy opis zastosowanego

mechanizmu poszukiwania właściwego rozwiązania.

• Proces poszukiwania rozwiązania winien się kończyć w czasie nie przekraczającym 3 min (orientacyjnie dla typowego notebooka). Po

przekroczeniu limitu czasu zadanie będzie przerywane, i traktowane podobnie jak w sytuacji błędów wykonania (czyli nie podlega
dalszej ocenie).


Sposób oceny :

• 1 pkt – Kompilacja : każdy z plików winien być kompilowany bez jakichkolwiek błędów lub ostrzeżeń (w sposób omówiony wyżej)
• 1 pkt – Wykonanie : program powinien wykonywać się bez jakichkolwiek błędów i ostrzeżeń (dla pliku danych wejściowych zgodnych

z wyżej zamieszczoną specyfikacją) z wykorzystaniem omówionych wyżej parametrów linii komend

• 2 pkt – README : plik README.pdf dokumentuje w sposób kompletny i właściwy struktury danych, oraz opis przyjętej koncepcji

algorytmu minimalizacji strat (odpadów).

• 1 pkt – Komentarze wewnętrzne : czy program jest skomentowany w sposób zapewniający zrozumienie jego działania, oraz

wyjaśniający warunki, które muszą zachodzić przed i po wykonaniu każdej z funkcji.

• 1 pkt – Styl kodowania : czy funkcji i zmienne posiadają samo-wyjaśniające nazwy ? Czy podział na funkcje ułatwia czytelność i

zrozumiałość kodu ? Czy funkcje eliminują (redukują) powtarzające się bloki kodu ? Czy wcięcia, odstępy, wykorzystanie nawiasów itp.
(formatowanie kodu) są spójne i sensowne ?

• 4 pkt – Poprawność algorytmu : czy algorytm został zaimplementowany poprawnie , przy czym za samą funkcję pack()

można

otrzymać dwa punkty, a za wybór i poprawność implementacji wykorzystanej metody optymalizacji (a więc i np. złożoność czasową)
kolejne dwa..


Wyszukiwarka

Podobne podstrony:
Java praca domowa 03
Java praca domowa 10
Java praca domowa 05
Java praca domowa 08
Java praca domowa 02
Java praca domowa 04
Java praca domowa 06
Java praca domowa 09
Java praca domowa 01
Java praca domowa 07
Java praca domowa 10
Java praca domowa 06
Java praca domowa 05
Java praca domowa 09
Java praca domowa 04
Java praca domowa 01
Java praca domowa 02

więcej podobnych podstron