4. sada domácich zadaní

Najneskorší termín odovzdania: 31.10.2012 (streda) o 21:00
Odovzdávané súbory: ZadanaKorytnacka.java, KlikaciaPlocha.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 4. prednášky a na ňu nadväzujúcich cvičení (napr. neodporúčame použiť regulárne výrazy).

Čísla v textoch (3 body)

Pri analýze textu sa z textu extrahujú kadejaké užitočné informácie. Medzi veľmi zaujímavé patria rôzne číselné informácie. Naučte korytnačky triedy ZadanaKorytnacka metódu pocetCisel, ktorá v zadanom reťazci zráta počet čísel, ktoré sa v ňom nachádzajú. Pod číslom rozumieme akúkoľvek súvislú postupnosť cifier 0, ..., 9 a znaku , (čiarka). Predpokladáme korektný (a zjednodušený) vstup, t.j., že čísla v texte obsahujú nanajvýš jednu čiarku ako oddeľovač desatinnej časti a v texte nie sú použité medzery ako oddeľovač tisícov.

public int pocetCisel(String s)

Príklady:

  • reťazec "NDS za tieto služby zaplatí namiesto predpokladaných 190 tis. eur len 88,16 tis. eur bez DPH." obsahuje 2 čísla (číselné podreťazce): 190 a 88,16;
  • reťazec "Ropná firma PK Orlen však klesla o 0,33 % na 44,79 PLN za akciu a operátor TPSA zlacnel o 0,54 % na 16,73 PLN za akciu." obsahuje 4 čísla;
  • reťazec "Hlavný index varšavskej burzy WIG20 stúpol o 0,46 % na 2416,37 bodu." obsahuje 3 čísla;
  • reťazec "120+30=150" obsahuje 3 čísla.

Pomoc pre hendikepovaných (3 body)

Rôzne poruchy nervového a svalového systému výrazne zhoršujú používanie počítačov - zvyčajnými vstupmi sú totiž klávesnica alebo myš. Dôsledkom takýchto porúch (napr. svalový tras a chvenie) môže byť akási obdoba koktavosti. Používateľ vtedy namiesto slova Java napíše Jaaaavvaa. Naučte korytnačky triedy ZadanaKorytnacka metódu odstranDuplicitu, ktorá vráti referenciu na novovytvorený objekt triedy String, ktorého obsah vznikne odstránením duplicitných výskytov rovnakého znaku v rade za sebou.

public String odstranDuplicitu(String s)

Príklady:

  • odstranDuplicitu("Jaaavvaaa") = "Java"
  • odstranDuplicitu("IIIssiel") = "Isiel"
  • odstranDuplicitu("IIissiel") = "Iisiel"
  • odstranDuplicitu("Odddstran duuuupllicitu") = "Odstran duplicitu"

Cyklické posuny (2 body)

Naučte korytnačky triedy ZadanaKorytnacka metódu cyklickyPosun, ktorá vráti referenciu na novovytvorený objekt triedy String. Obsah tohto reťazca vznikne zo zadaného reťazca s cyklickým posunutím o zadaný počet znakov vpravo (resp. vľavo ak je posun záporný).

public String cyklickyPosun(String s, int posun)

Príklady:

  • cyklickyPosun("Java je super", 2) = "erJava je sup"
  • cyklickyPosun("Java je super", 4) = "uperJava je s"
  • cyklickyPosun("Java je super", -2) = "va je superJa"
  • cyklickyPosun("Java je super", 15) = "erJava je sup"

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 ZadanaKorytnacka metódy znakyNaEntity a entityNaZnaky. 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 znakyNaEntity(String s)
public String entityNaZnaky(String s)

Metóda znakyNaEntity (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:

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

Metóda entityNaZnaky (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:

  • entityNaZnaky("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:

http://docs.oracle.com/javase/7/docs/api/java/lang/String.html

Mnohouholníky (4 body)

Naprogramujte triedu KlikaciaPlocha 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);