5. sada domácich zadaní

Najneskorší termín odovzdania: 5.11.2012 (pondelok) o 21:00
Odovzdávané súbory: KorytnaciSvet.java, Maklerka.java

Doplňujúce požiadavky:

  • riešenia, ktoré nebude možné skompilovať (t.j. riešenia so syntaktickými chybami) nebudú hodnotené,
  • zdrojový kód správne naformátujte (CTRL+SHIFT+F),
  • očakáva sa vhodne okomentovaný zdrojový kód

Korytnačí svet

Uvažujme triedu KorytnaciSvet, ktorá rozširuje triedu WinPane:

import java.awt.event.MouseEvent;

import sk.upjs.jpaz2.*;

public class KorytnaciSvet extends WinPane {
        /**
         * Referencia na pole korytnaciek
         */

        private Turtle[] korytnacky = null;

        /**
         * Inicializacna metoda
         */

        public KorytnaciSvet() {
                this.korytnacky = new Turtle[0];
        }

        /**
         * Metoda na pridanie korytnacky na zadanych suradniciach
         */

        public void pridajKorytnacku(int x, int y) {
                Turtle novaKorytnacka = new Turtle();
                this.add(novaKorytnacka);
                novaKorytnacka.setPosition(x, y);

                Turtle[] noveKorytnacky = new Turtle[this.korytnacky.length + 1];
                System.arraycopy(this.korytnacky, 0, noveKorytnacky, 0, this.korytnacky.length);
                noveKorytnacky[noveKorytnacky.length-1] = novaKorytnacka;

                this.korytnacky = noveKorytnacky;
        }

        @Override
        protected void onMouseClicked(int x, int y, MouseEvent detail) {
                if (!(detail.isAltDown() || detail.isControlDown() || detail.isShiftDown())) {
                        this.pridajKorytnacku(x, y);
                }
        }
}

Monitoring korytnačiek (2 body)

Biológovia z ÚBEV UPJŠ sa rozhodli, že budú skúmať správanie sa korytnačiek Trachemys coding scripta (korytnačky z JPAZu). Tieto korytnačky sú lenivé a tak takmer celý svoj život prežijú na jednom mieste. Biológovia na korytnačky chcú umiestniť monitorovacie zariadenie s rádiovým transcieverom. Anténa monitorovacieho systému je umiestnená na mieste so súradnicami [x, y] (na budove UPJŠ). Aký musí byť minimálny vysielací rozsah zakúpených transcieverov, aby bolo možné získavať údaje zo všetkých korytnačiek?

Do triedy KorytnaciSvet pridajte metódu minimalnyDosah, ktorá pre zadané umiestnenie antény na súradniciach [x, y] vráti minimálny vysielací rozsah transceiverov zaručujúci, že každá signál z každej korytnačky dosiahne anténu. Môžete predpokladať, že v ploche je aspoň jedna korytnačka.

public double minimalnyDosah(double x, double y);

Do radu (4 body)

Do triedy KorytnaciSvet pridajte metódu doRadu, ktorá rovnomerne umiestni korytnačky v ploche na úsečke, ktorá je určená pozíciou najľavejšej a najpravejšej korytnačky v ploche. Rovnomerne umiestniť korytnačky na úsečke znamená, že v krajných bodoch úsečky je po jednej korytnačke. Zvyšné korytnačky sú s rovnakým rozostupom umiestnené na tejto úsečke medzi jej krajnými bodmi. Môžete predpokladať, že v ploche sú aspoň 2 korytnačky.

Pozor, po premiestnení korytnačiek ich natočenie musí byť zachované.

public void doRadu()

Korytnačka na burze

Vytvorte triedu Maklerka, ktorá rozširuje triedu Turtle. V jednotlivých metódach predpokladáme, že polia, ktoré sa tam vyskytujú v parametroch metód, uchovávajú časový rad vývoja ceny nejakého cenného papiera (CP) alebo akcie. Ak pole hodnoty uchováva takýchto rad, tak hodnoty[0] je hodnota akcie/CP v deň 0, hodnoty[1] je hodnota v deň 1, ..., hodnoty[i] je hodnota akcie/CP v deň i.

Najväčší prepad (2 body)

Do triedy Maklerka pridajte metódu najvacsiPrepad, ktorá vráti najväčší zaznamenaný percentuálny medzidňový prepad ceny akcie/CP. V prípade, že cena akcie/CP len rástla, metóda nech vráti 0. Túto hodnotu vráťte aj v prípade prázdneho alebo jednoprvkového poľa.

public double najvacsiPrepad(double[] hodnoty)

Príklad výpočtu medzidňovej zmena hodnoty akcie. Ak včerajšia cena akcie bola 100 EUR a dnešná cena je 80 EUR, tak máme 20% prepad ceny akcie. Ak včerajšia cena bola 50 EUR a dnešná cena je 60 EUR, tak máme 20% vzrast ceny akcie.

Úspešné dni (3 body)

Do triedy Maklerka pridajte metódu uspesneDni, ktorá vráti najväčší počet úspešných dní za sebou, t.j. dní, kedy cena akcie/CP neklesla.

public int uspesneDni(double[] hodnoty)

Príklad: Ak ceny akcie/CP boli postupne 3, 2, 4, 2, 5, 5, 10, 13, 12, 13, 14, 10, tak najväčší počet za sebou idúcich dni bez poklesu ceny je 5.

Poznámka: Keďže rátame dni (nie "noci"), tak v prípade aspoň jednoprvkového poľa je počet úspešných dní aspoň 1. V prípade prázdneho poľa je počet úspešných dní 0.

Týždňové priemery (3 body)

Do triedy Maklerka pridajte metódu tyzdnovePriemery, ktorá vráti pole týždňových priemerov ceny akcie/CP. Každý prvok vráteného poľa je priemerom 5 dní burzového týždňa. Teda na indexe 0 je priemer dní 0, ..., 4, na indexe 1 priemer dní 5, ..., 9, atď. Ak počet dní nie je deliteľný 5, t.j. posledný týždeň nie je úplný, za posledný týždeň rátame len priemer týchto dní týždňa.

public double[] tyzdnovePriemery(double[] hodnoty)