5. sada domácich zadaní

Najneskorší termín odovzdania: 14.11.2011 (pondelok) o 21:00
Odovzdávané súbory: KorytnaciSvet.java, Poliarka.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);
                }
        }
}

Čistý priestor (3 body)

Do triedy KorytnaciSvet pridajte metódu cistyPolomer, ktorá pre zadaný bod so súradnicami [x, y] vráti najväčší možný polomer kruhu so stredom v zadanom bode s tou vlastnosťou, že žiadna korytnačka (presnejšie jej stred) neleží v tomto kruhu. Môžete predpokladať, že v ploche je aspoň jedna korytnačka.

public double cistyPolomer(double x, double y);

Upravte metódu onMouseClicked tak, aby ak klikneme do kresliacej plochy so zatlačeným klávesom Alt, nakreslí sa najväčší možný žltý (vyplnený) kruh so stredom v mieste kliknutia taký, že stred žiadnej korytnačky neleží vo vnútri tohto kruhu.

Do štvorca (4 body)

Do triedy KorytnaciSvet pridajte metódu doStvorca, ktorá pravidelne umiestni korytnačky v kresliacej ploche na strany štvorca so stredom v strede kresliacej plochy a so zadanou dĺžkou strany. Môžete predpokladať, že počet korytnačiek v ploche je deliteľný číslom 4. Do rohov štvorca korytnačky neumiestňujeme.

public void doStvorca(double dlzkaStrany)

Poliarka

Vytvorte triedu Poliarka, ktorá rozširuje triedu Turtle.

Duplicita (2 body)

Do triedy Poliarka pridajte metódu duplicitneHodnoty, ktorá vráti, či sa niektorá z hodnôt v poli nachádza v poli aspoň dvakrát.

public boolean duplicitneHodnoty(int[] pole)

Počet miním (3 body)

Do triedy Poliarka pridajte metódu pocetMinim, ktorá vráti, koľko krát sa minimálna hodnota v poli nachádza v zadanom poli.

public int pocetMinim(int[] pole)

Filter nepárnych (3 body)

Do triedy Poliarka pridajte metódu vyfiltrujNeparne, ktorá vráti referenciu na novovytvorené pole čísel, ktoré bude obsahovať len párne čísla z poľa pole tak, že vzájomné poradie čísel ostane zachované.

public int[] vyfiltrujNeparne(int[] pole)