3. sada domácich zadaní

Najneskorší termín odovzdania: 19.10.2014 (nedeľa) 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

Veterník pre Zuzanu (2 body)

Naučte korytnačky triedy ZadanaKorytnacka metódu veternik, ktorá nakreslí obrazec, ako je to na obrázku nižšie. Veterník sa skladá zo 4 pravouhlých trojuholníkov, ktorých odvesny majú rovnakú dĺžku. Metóda má len jeden parameter rozmer určujúci dĺžku odvesien týchto trojuholníkov. Korytnačka sa na začiatku aj konci metódy nachádza v strede veterníka a natočená je v smere odvesny jedného z trojuholníkov.

Trojuholníky tvoriace veterník sú vyfarbené postupne sa striedajúcimi čiernymi a červenými pásmi. Šírka prvého (čierneho) pásu je 1/3 výšky odvesny trojuholníka, šírka druhého (červeného) pásu a každého ďalšieho pásu je 2/3 šírky predošlého pásu. Pásy, resp. trojuholníky, ktoré nebude vidieť, nekreslite.

public void veternik(double rozmer) {

}

Rady:

  • Odporúčame si najprv vytvoriť pomocnú metódu pravouholnik, ktorá nakreslí vyplnený pravouhlý trojuholník s odvesnami rovnakej dĺžky. Dĺžka týchto odvesien je zadaná parametrom dlzkaOdvesny a ako farba výplne sa použije aktuálne nastavená farba výplne. Navyše korytnačka sa na začiatku a na konci nachádza vo vrchole trojuholníka, v ktorom nie je pravý uhol a je natočená v smere odvesny.
public void pravouholnik(double dlzkaOdvesny) {

}
  • S využitím metódy pravouholnik naprogramujte metódu ccPravouholnik, ktorá nakreslí pravouholník s farebnými pruhmi (jeden z trojuholníkov veterníka).
public void ccPravouholnik(double dlzkaOdvesny) {

}

Počet deliteľov (1 bod)

Cieľom jednej z úloh, ktorá sa riešila na 3. prednáške, bolo pre zadané kladné nenulové číslo n určiť počet jeho deliteľov. Na prednáške bol prezentovaný jednoduchý algoritmus založený na testovaní všetkých celých čísel od 1 po n. Zároveň na prednáške bolo naznačené, že si vystačíme aj s testovaním menšieho počtu čísel - konkrétne √n čísel. Ako však na to?

Uvažujme číslo n. Nech a je nejakým deliteľom čísla n. Potom musí existovať také celé číslo b, že n = a.b. Teda číslo b je taktiež deliteľom čísla n. Na tieto 2 delitele čísla n môžeme pozerať ako na akési "kamarátske" delitele čísla n. Bez ujmy na všeobecnosti nech a <= b. Ak a nie je √n, potom platí, že a < √n a b > √n (dôkaz sporom - ak by a < √n a b < √n, potom a.b < √n.√n = n, čo je v spore, že a.b = n; analogicky možno dokázať, že nenastane a > √n a b > √n). Dôsledkom tohto pozorovania je to, že ku každému deliteľovi ostro menšiemu ako √n prislúcha jeden deliteľ ostro väčší ako √n a naopak.

Na základe popísanej myšlienky naprogramujte metódu počet deliteľov tak, aby netestovala viac ako √n čísel.

public int pocetDelitelov(int n) {

}

Kombinované číslo (2 body)

Naučte korytnačky triedy ZadanaKorytnacka metódu kombinovaneCislo. Táto metóda dostane ako parametre dve nezáporné čísla typu int a vráti nové číslo typu int, v ktorom na každej pozícii bude väčšia z cifier na tejto pozícii v parametrami zadaných číslach. Teda ak v prvom čísle je na mieste jednotiek cifra 5 a v druhom je na mieste jednotiek cifra 3, tak vo výslednom čísle bude na mieste jednotiek cifra 5. Ak sa počet cifier v zadaných číslach líši, tak pred číslo s menším počtom cifier si "domyslite" cifry 0. Uvažujeme zápis čísel v desiatkovej sústave.

Príklady:

  • kombinovaneCislo(258,164) = 268
  • kombinovaneCislo(25, 2419) = 2429 (namiesto 25 uvažujeme číslo so zápisom 0025)
public int kombinovaneCislo(int n, int m) {

}

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)