3. sada domácich zadaní

Najneskorší termín odovzdania: 22.10.2012 (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

Trojuholníky (1 bod)

Naučte korytnačky triedy ZadanaKorytnacka metódu trojuholniky, ktorá nakreslí "nekonečnú" postupnosť vnorených trojuholníkov podľa obrázka nižšie ("nekonečnú" znamená, že trojuholníky menšie ako 1 pixel nekreslíme). Dĺžka strany najväčšieho trojuholníka je daná parametrom strana. Počiatočná pozícia korytnačky je stred strany najväčšieho trojuholníka, ktorého výška je v smere natočenia korytnačky.

V metóde využite nižšie uvedenú metódu trojuholnik, t.j. v metóde trojuholniky realizujte iba potrebné presuny a natočenia korytnačky, samotné kreslenie viditeľných čiar nech je spravené volaniami metódy trojuholnik.

public void trojuholnik(double strana) {
        this.turn(-90);
        this.step(strana / 2);
        this.turn(120);
        this.step(strana);
        this.turn(120);
        this.step(strana);
        this.turn(120);
        this.step(strana / 2);
        this.turn(90);
}
public void trojuholniky(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 za sebou (2 body)

Naučte korytnačky triedy ZadanaKorytnacka metódu rovnakeCifryZaSebou, ktorá vráti true práve vtedy, ak v zápise čísla cislo v desiatkovej sústave sú vedľa seba nejaké dve rovnaké cifry. Príklady čísel, pre ktoré má metóda vrátiť hodnotu true: 18332, 7266, 99999, 212211, -1332, 88. Príklady čísel, pre ktoré má metóda vrátiť hodnotu false: 13832, 1234, 131313. 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 rovnakeCifryZaSebou(int cislo)

Divergencia (2 body)

Nech A(n) = 1/n, ak n > 0 je párne, a A(n) = (n-1)/n, ak n > 0 je nepárne. O nekonečnom číselnom rade A(1) + A(2) + A(3) + ... + A(n) + ... je známe, že diverguje (ak neviete, čo to znamená, dozviete sa na nejakej matematike). Naučte korytnačky triedy ZadanaKorytnacka metódu, ktorá pre zadané kladné reálne číslo c vráti najmenšie také číslo n, že A(1) + A(2) + ... + A(n) >= c.

public int divergencia(double c)

Zaokrúhlenie celých čísel (2 body)

Naučte korytnačky triedy ZadanaKorytnacka metódu, ktorá pre zadané kladné celé číslo n vráti toto číslo zaokrúhlené na zadaný počet miest pred desatinnou čiarkou (parameter pocetMiest).

Príklady:

  • zaokruhli(123, 0) = 123, zaokruhli(128, 0) = 128
  • zaokruhli(123, 1) = 120, zaokruhli(128, 1) = 130
  • zaokruhli(123, 2) = 100, zaokruhli(128, 2) = 100, zaokruhli(168, 2) = 200
  • zaokruhli(51123, 3) = 51000, zaokruhli(54523, 3) = 55000
public long zaokruhli(long n, int pocetMiest)

Pri riešení tejto úlohy nie je dovolené využívať metódy z Math ani konverziu celého čísla na číslo s desatinnou čiarkou (strata presnosti).