4. sada domácich zadaní

Najneskorší termín odovzdania: 25.10.2017 (streda) o 22:00
Odovzdávané súbory: HomeTurtle.java, ClickPane.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, a triedu ClickPane, ktorá rozširuje triedu WinPane.

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
  • odporúčame pri riešení používať len poznatky, ktoré boli súčasťou 4. prednášky a na ňu nadväzujúcich cvičení (ak napr. použijete regulárne výrazy, očakávame, že nám budete vedieť komplexne vysvetliť ako sa vytvárajú a používajú regulárne výrazy v Jave),
  • odoslané triedy musia obsahovať len metódy nevyhnutné pre fungovanie metód uvedených v zadaní.

Počet skratiek (2 body)

Informatika je plná troj- a viacpísmenových skratiek (OOP, TCP, MQTT, SOAP, XSLT, RMI, CORBA, ...) Do triedy HomeTurtle pridajte metódu countAcronyms. Táto metóda dostane ako parameter nenullovú referenciu na reťazec (objekt triedy String) a vráti počet informatických skratiek v tomto reťazci. Informatickou skratkou nazývame každý súvislý podreťazec tvorený aspoň troma veľkými písmenami anglickej abecedy.

Príklady:

  • countAcronyms("Čo vieš o TCP a UDP?") = 2
  • countAcronyms("Neskôr boli CORBA a RMI vytlačené SOAPom.") = 3
public int countAcronyms(String r)

Zámena susedov (2 body)

Do triedy HomeTurtle pridajte metódu exchangeNeighbors. Táto metóda dostane ako parameter nenullovú referenciu na reťazec (objekt triedy String) a vráti referenciu na novovytvorený reťazec, ktorý vznikne zo zadaného reťazca zámenou susedných znakov po dvojiciach. Konkrétne vymenia sa znaky na indexoch 0 a 1, potom znaky na indexoch 2 a 3, 4 a 5, atď. Ak je reťazec nepárnej dĺžky, posledný znak ostáva na svojom mieste. Príklad: exchangeNeighbors("Programovanie") = "rPgoaromavine"

public String exchangeNeighbors(String s)

Web 3.0: Tagy preč (3 body)

Základným prvkom HTML je značkovanie textu pomocou tagov. Tag je postupnosť znakov ohraničená znakmi < a >. Príklad textu s tagmi: Zakladnym prvkom <i>html</i> je <strong>tag</strong>.

Do triedy HomeTurtle pridajte metódu removeTags, ktorá vráti referenciu na novovytvorený reťazec, ktorý vznikne zo zadaného reťazca odstránením všetkých tagov.

public String removeTags(String s)

Príklad:

  • removeTags("Zakladnym prvkom <strong>html</strong> je <b>tag</b>.") = "Zakladnym prvkom html je tag."

Web 3.0: HTML entity (2 body + 5 bodov)

Zobrazila sa vám niekedy webová stránka "divne"? Ak áno, možno bol dôvod ten, že tvorca stránky nekorektne uviedol kódovanie obsahu stránky. Okrem nastavenia kódovania zaujímavé riešenie priniesla aj HTML 4: znakové entity. Základná myšlienka spočívala v tom, že špeciálne znaky sa kódovali prostredníctvom sekvencie znakov. Napríklad znak < sa dá zapísať ako &lt; alebo ako &#60;. A práve tá druhá možnosť je pre nás zaujímavá. Konkrétne, akýkoľvek znak môžeme v HTML4 zapísať pomocou znakovej entity ako &#N;, kde N je kód tohto znaku v UNICODE kódovaní.

Viac o html znakových entitách nájdete tu:

Naučte korytnačky triedy HomeTurtle metódy charsToEntities a entitiesToChars. Každá z metód vráti referenciu na novovytvorený reťazec (objekt triedy String), ktorý obsahuje výsledok prevodu zadaného reťazca.

public String charsToEntities(String s)
public String entitiesToChars(String s)

Metóda charsToEntities (2 body) prevedie každý znak v zadanom reťazci na prislúchajúcu znakovú entitu. Výnimkou sú znaky anglickej abecedy (a-z, A-Z, 0-9), ktoré sa neprevádzajú.

Príklad:

  • charsToEntities("Počítač") = "Po&#269;&#237;ta&#269;"

Metóda entitiesToChars (5 bodov) prevedie každý výskyt znakovej entity (kódovanej ako &#N;) na odpovedajúci znak. Môžete predpokladať korektný vstup, t.j., že prevádzaný reťazec nebude obsahovať znakové entity kódované iným spôsobom (hexadecimálne alebo pomenované znakové entity).

Príklad:

  • entitiesToChars("Po&#269;&#237;t&#97;&#269;") = "Počítač"

Pomôcka:

  • na prevod číselného reťazca na číslo môžete použiť metódu Integer.parseInt():
int c = Integer.parseInt("123");
  • na prevod čísla na číselný reťazec môžete použiť metódu Integer.toString():
String s = Integer.toString(123);
  • na vytvorenie podreťazca zadaného reťazca môžete použiť metódu substring:

Mnohouholníky (4 body)

Naprogramujte triedu ClickPane rozšírujúcu triedu WinPane, ktorá klikaním do plochy umožní kresliť mnohouholníky s očíslovanými vrcholmi.

Klikacia plocha funguje nasledovne:

  • vrcholy mnohouholníka sa vytvárajú zatlačením ľavého tlačidla myši (využite onMousePressed), pričom miesto kliknutia je stredom vrcholu
    • ak sa práve vytvára nejaký mnohouholník, vytvorený vrchol sa pridá medzi vrcholy tohto mnohouholníka spojením s naposledy pridaným vrcholom mnohouholníka,
    • ak sa žiaden mnohouholník nevytvára, vytvorený vrchol bude prvým vrcholom nového vytváraného mnohouholníka,
  • vrcholy sú znázornené oranžovou bodkou s polomerom 10, ktorá obsahuje poradové číslo bodky v rámci aktuálne naklikavaného mnohouholníka;
  • za sebou nasledujúce vrcholy mnohouholníka sú spojené čiarou
    • spojovacia čiara nezasahuje do vnútra bodiek znázorňujúcich spájané vrcholy,
    • spojovacia čiara leží na priamke určenej stredmi spájaných vrcholov,
  • kliknutie na prvý vrchol (prislúchajúcu bodku) práve vytváraného mnohouholníka ukončí jeho kreslenie, t.j. ďalšie kliknutie do plochy znamená, že ideme kresliť nový mnohouholník.

Pomôcka:

  • na kreslenie do stredu môžete použiť metódu printCenter:
jozko.setDirection(90);
jozko.printCenter("Ahoj");
  • na prevod čísla na číselný reťazec môžete použiť metódu Integer.toString():
String s = Integer.toString(123);

Poznámky k evaluácii 4. sady - Mnohouholníky

"OK" pri metóde znamená, že sa podarilo zrealizovať všetky testy a po skončení metódy ostala korytnačka v požadovanom stave. Neznamená to, že korytnačka nakreslila to, čo mala. Upozorňujeme, že evaluátor dokresľuje do grafických výstupov vizuálne značky (poloha korytnačky, významné body, podfarbenie, atď.), ktoré umožňujú rýchlu vizuálnu kontrolu riešenia.

Očakávané grafické výstupy evaluátora pre korektné riešenie: