3. sada domácich zadaní

Najneskorší termín odovzdania: 24.10.2011 (pondelok) o 21:00
Odovzdávaný súbor: ZadanaKorytnacka.java

Cieľom tejto sady domácich zadaní je vytvoriť triedu ZadanaKorytnacka, ktorá rozširuje triedu Turtle a ktorá obsahuje nižšie predpísané metódy.

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
  • pri riešení používajte len poznatky, ktoré boli súčasťou 3. prednášky a na ňu nadväzujúcich cvičení.

Štvorce (1 bod)

Naučte korytnačky triedy ZadanaKorytnacka metódu stvorce, ktorá nakreslí "nekonečnú" postupnosť vnorených štvorcov podľa obrázka nižšie ("nekonečnú" znamená, že štvorce menšie ako 1 pixel nekreslíme). Stred vnorených štvorcov nech je aktuálna pozícia korytnačky. Dĺžka strany najväčšieho štvorca je daná parametrom strana.

public void stvorce(double strana)

Euklidov algoritmus (1 bod)

Naučte korytnačky triedy ZadanaKorytnacka metódu gcd, ktorá vráti najväčšieho spoločného deliteľa dvoch kladných celých čísel podľa opisu iteratívnej verzie Euklidovho algoritmu: http://sk.wikipedia.org/wiki/Euklidov_algoritmus

public int gcd(int u, int v)

Rovnaké cifry (2 bod)

Naučte korytnačky triedy ZadanaKorytnacka metódu rovnakeCifry, ktorá vráti true práve vtedy, ak v zápise čísla cislo v desiatkovej sústave sú všetky cifry rovnaké. Príklady čísel, pre ktoré má metóda vrátiť hodnotu true: 3333, 11, 99999, 2, -777, 88. Metóda má fungovať pre kladné i záporné čísla. V riešení nie je dovolené použiť operáciu, ktorá prevedie číslo na znakový reťazec.

public boolean rovnakeCifry(int cislo)

Hammingova vzdialenosť (4 body)

Hammingovou vzdialenosťou dvoch celých nezáporných čísel nazveme počet cifier v desiatkovej sústave, v ktorých sa tieto čísla líšia. Napríklad čísla 1323 a 2325 sa líšia na 2 miestach (prvá a posledná cifra) a teda ich Hammingova vzdialenosť je 2. Čísla 87 a 3481 majú Hammingovu vzdialenosť 3 (87 = 0087, 3481 - na 3 pozíciach máme rôzne cifry).

Naučte korytnačky triedy ZadanaKorytnacka metódu hammingovaVzdialenost, ktorá vráti Hammingovu vzdialenosť 2 zadaných nezáporných čísel. V riešení nie je dovolené použiť operáciu, ktorá prevedie číslo na znakový reťazec.

public int hammingovaVzdialenost(int cislo1, int cislo2)

Rovnaký znak (1 bod)

Naučte korytnačky triedy ZadanaKorytnacka metódu rovnakyZnak, ktorá vráti true, ak zadaný reťazec obsahuje nejaké 2 rovnaké znaky. Pri riešení použite metódu pocetVyskytov a skutočnosť, že v reťazci sú 2 rovnaké znaky práve vtedy, ak niektorý zo znakov reťazca má v tomto reťazci počet výskytov aspoň 2.

public int pocetVyskytov(String s, char znak) {
        int vysledok = 0;
        for (int i = 0; i < s.length(); i++) {
                if (s.charAt(i) == znak) {
                        vysledok++;
                }
        }

        return vysledok;
}

public boolean rovnakyZnak(String s) {

}

Počet medzier zľava (2 body)

Naučte korytnačky triedy ZadanaKorytnacka metódu pocetMedzierZlava, ktorá vráti dĺžku súvislej postupnosti medzier, ktorou začína zadaný reťazec. Napríklad reťazec ".Ahoj" začína 1 medzerou, reťazec "...Ahoj.." začína 3 medzerami (znak . je použitý na vyjadrenie toho, že na danom mieste je medzera - pri neproporcionálnych fontoch počet medzier nie je vidieť). Pozor na reťazec tvorený len medzerami. Pre takýto reťazec je výsledkom dĺžka reťazca.

public int pocetMedzierZlava(String s)