Zadanie 4

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

E-mailové adresy na UPJŠ (1 bod)

Naučte korytnačky triedy HomeTurtle metódu toEmailAddress, ktoré pre zadané meno a priezvisko zamestnanca UPJŠ vráti jeho e-mailovú adresu. E-mailová adresa zamestnanca UPJŠ má formát meno.priezvisko@upjs.sk, kde meno a priezvisko sú napísané malými písmenami. Meno a priezvisko osoby sa nachádzajú v parametri osoba a sú oddelené jednou medzerou.

Príklad:

  • toEmailAddress("Janko HRASKO") = "janko.hrasko@upjs.sk"
  • toEmailAddress("Peter Chemik") = "peter.chemik@upjs.sk"
  • toEmailAddress("ALBERT MATEMATIK") = "albert.matematik@upjs.sk"

1
public String toEmailAddress(String name)

Tip: metóda toLowerCase triedy String

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
  • countAcronyms("self-verifying-DFA") = 1

1
public int countAcronyms(String r)

Odčíslovač (2 body)

Do triedy HomeTurtle pridajte metódu replaceNumbers. Táto metóda dostane ako parametre dve nenullové referencie na reťazce (objekty triedy String) rovnakej dĺžky a vráti referenciu na novovytvorený reťazec (objekt triedy String), ktorý vznikne z prvého zadaného reťazca zámenou všetkých čísel za znaky z druhého reťazca. Pričom zamieňame znaky na rovnakých pozíciách.

Príklady:

  • replaceNumbers("a5h","gci") = "ach"
  • replaceNumbers("246","abc") = "abc"
  • replaceNumbers("ahoj svet","qwertyuio") = "ahoj svet"
  • replaceNumbers("1mn4op78","ABCDEFGH") = "AmnDopGH"

1
 public String replaceNumbers(String s, String replacement)

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 HomeTurtle metódu sanitize, 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.


1
public String sanitize(String s)

Príklady:

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

Úloha Pomoc pre hendikepovaných je bez evaluácie. To znamená, že evaluácia pre túto úlohu kontroluje iba prítomnosť metódy nie jej funkcionalitu. Plná kontrola evaluátorom bude zapnutá až po deadline hodnotiteľmi. Odporúčame si kód otestovať v Eclipse s vlastnými vstupnými parametrami. Toto odporúčanie platí aj pre ostatné úlohy so zapnutým evaluátorom.

Spojovacia doska (4 body)

Naprogramujte triedu ClickPane rozšírujúcu triedu WinPane, ktorá klikaním do plochy spája označené kotviace body. Kotviace body v ploche kreslí metóda kresliKotviaceBody.

Ako funguje spojovacia doska:

  • Prvým kliknutím (onMouseClicked) do plochy sa modrou bodkou (so stredom v kotviacom bode) s polomerom 3 označí kotviaci bod, ktorý je najbližšie k miestu kliknutia.
  • Druhým kliknutím (onMouseClicked) do plochy sa spojí kotviaci bod najbližší k miestu kliknutia s kotviacim bodom, ktorý bol označený pri prvom kliknutí. Počiatočný a koncový bod spojnice sa vyznačia bodkou s polomerom 3 so stredom v týchto kotviacich bodoch. Ak bol pri druhom kliknutí zatlačený Alt, kreslí sa červená spojnica a jej konce sa vyznačia červenou bodkou. Ak Alt nebol zatlačený, kreslí sa čierna spojnica a jej konce sa vyznačia čiernou farbou.
  • Ďalšie kliknutie do plochy funguje tak, akoby išlo o prvé kliknutie do plochy.

Systém kreslenia spojovacích čiar dedukujte zo screenshotu.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.awt.Color;
import java.awt.event.MouseEvent;

import sk.upjs.jpaz2.*;

public class ClickPane extends WinPane {

    public void kresliKotviaceBody() {
        Turtle kreslic = new Turtle();
        this.add(kreslic);

        int rozostup = 10;
        int pocetHorizontalnych = this.getWidth() / rozostup;
        int pocetVertikalnych = this.getHeight() / rozostup;

        kreslic.setFillColor(Color.gray);
        for (int j = 0; j <= pocetVertikalnych; j++) {
            for (int i = 0; i <= pocetHorizontalnych; i++) {
                kreslic.setPosition(i * rozostup + rozostup / 2, j * rozostup
                        + rozostup / 2);
                kreslic.dot(1);
            }
        }

        this.remove(kreslic);
    }

    @Override
    protected void onMouseClicked(int x, int y, MouseEvent detail) {
                // ...
    }
}

1
2
3
4
5
6
7
8
9
10
public class Launcher {

    /**
     * @param args
     */

    public static void main(String[] args) {
        ClickPane d = new ClickPane();
        d.kresliKotviaceBody();
    }
}

Poznámky k evaluácii 4. sady

„Odfajknutie“ metódy v úlohe Spojovacia doska znamená, že sa podarilo zrealizovať všetky testy. Neznamená to, že korytnačka nakreslila to, čo mala.

Očakávané grafické výstupy evaluátora pre korektné riešenie (pozície jednotlivých bodov sa môžu líšiť):

Spojovacia doska

Všimnite si, že evaluátor ako grafické značky kreslí očakávané spojnice svetlejšou farbou.