3. sada domácich zadaní

Najneskorší termín odovzdania: 15.10.2017 (nedeľa) o 22:00
Odovzdávaný súbor: HomeTurtle.java

Cieľom tejto sady domácich zadaní je vytvoriť triedu HomeTurtle, 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),
  • zdrojový kód musí byť vhodne komentovaný.

Štvorce (1 bod)

Naučte korytnačky triedy HomeTurtle metódu squares, ktorá nakreslí "nekonečnú" postupnosť vnorených vyplnený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 size. Farba výplne štvorcov je na striedačku červená a čierna.

public void squares(double size)

Rada:

  • Zvážte vytvorenie pomocnej metódy, ktorá nakreslí vyplnený štvorec so zadanou dĺžkou strany a so stredom v aktuálnej pozícii korytnačky. Je vhodné, ak sa na vyplnenie štvorca použije aktuálne nastavená farba výplne.

Euklidov algoritmus (1 bod)

Naučte korytnačky triedy HomeTurtle 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)

Sínus a Taylorov rad (1+1 bod)

Z matematickej analýzy vieme (alebo budeme vedieť), že hodnotu funkcie vieme vyjadriť ako súčet členov nekonečného Taylorovho (mocninového) radu. Naučte korytnačky triedy HomeTurtle metódu sin, ktorá vráti sin(x) ako súčet prvých n+1 členov Taylorovho radu:

public double sin(double x, int n)

+1 bod: Pokúste sa implementovať výpočet čo najefektívnejšie, t.j. snažte sa eliminovať zbytočné matematické operácie.

Rovnaké cifry (2 bod)

Naučte korytnačky triedy HomeTurtle metódu isUniDigitNumber, ktorá vráti true práve vtedy, ak v zápise čísla n 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 isUniDigitNumber(int n)

Hammingova vzdialenosť (3 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 HomeTurtle metódu countHammingDistance, 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 countHammingDistance(int number1, int number2)