6. sada domácich zadaní

Najneskorší termín odovzdania: 26.11.2012 (pondelok) o 21:00
Odovzdávané súbory: ZadanaKorytnacka.java

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
  • nepoužívajte žiadne inštančné premenné (na riešenie úloh nie sú potrebné)
  • v prípade potreby si vytvorte pomocné metódy

Vrátnica (3 body)

Firma ComputerVision s.r.o. vytvorila nový softvér Vratnik++, ktorý dokáže rozpoznať počet ľudí vchádzajúcich a vychádzajúcich z budovy cez sledované dvere. Softvér vytvára záznamy do textového logovacieho súboru. Logovací súbor obsahuje pre každú udalosť vstupu/výstupu osôb cez dvere jeden záznam, ktorý je zapísaný v samostatnom riadku. Tento riadok sa skladá z troch medzerami oddelených častí:

  • čas, kedy sa udalosť zaznamenala,
  • typ operácie: IN, ak bol rozpoznaný vstup skupiny osôb do budovy, alebo OUT, ak bol rozpoznaný výstup skupiny osôb z budovy,
  • počet osôb vo vstupujúcej, resp. vystupujúcej skupine

Príklady záznamov:

10:04:12 IN 2
O 10:04:12 do budovy vstúpili 2 osoby
11:03:15 OUT 1
O 11:03:15 odišla z budovy jedna osoba

Záznamy sú v logovacom súbore uložené usporiadané podľa času, kedy nastali.

Do triedy ZadanaKorytnacka pridajte metódu pocetOsobVBudove, ktorá vypočíta počet osôb v budove na základe záznamov v logovacom súbore. Metóda má dva parametre. Parameter logovaciSubor, ktorý obsahuje cestu a názov súboru s logovacími záznamami. Druhý parameter naZaciatku určuje, koľko osôb bolo v budove v momente, keď sa začalo logovať (zaznamenávať vstupy a výstupy osôb). V prípade, že sa logovací súbor nepodarí prečítať (napr. neexistuje) alebo ak obsahuje nekorektné záznamy, metóda nech vráti hodnotu -1. Pod nekorektnými záznamami myslíme to, že podľa záznamov vznikne stav, kedy je v budove záporný počet osôb.

public int pocetOsobVBudove(String logovaciSubor, int naZaciatku)

Odstraňovanie komentárov (6 bodov)

V Jave je možné vytvárať komentáre dvoch typov. Ak vytvoríme komentár pomocou dvojice znakov //, tak sa obsah riadku od tohto miesta až do konca považuje za komentár. Okrem toho je možné vytvárať aj komentáre pomocou kombinácie /* a */. Tento typ komentárov však v tejto úlohe nebudeme uvažovať.

Do triedy ZadanaKorytnacka pridajte metódu odstranKomentare, ktorá zo zadaného java súboru odstráni všetky //-komentáre a výsledok zapíše do zadaného výstupného súboru.

public void odstranKomentare(File vstup, File vystup)

Parameter vstup označuje cestu k súboru a názov súboru, z ktorého čítame komentovaný zdrojový kód napísaný v jazyku Java. Parameter vystup označuje cestu k súboru a názov súboru, do ktorého máme zapísať zdrojový kód po odstránení všetkých //-komentárov.

Pri riešení úlohy dajte pozor na to, že:

  • ak sa znaky // obsahuje reťazcový literál (napr. máte niekde príkaz String s = "Znaky // nie su komentar";), tak sa nepovažujú za označenie začiatku komentára,
  • v reťazcových a znakových literáloch na môžu vyskytovať aj znaky zapísané pomocou tzv. escape sekvencie, napr. \".

Špirálové pole (10 bodov)

Do triedy ZadanaKorytnacka pridajte metódu spirala, ktorá do zadaného súboru zapíše obsah číselného poľa vo forme matice (2-rozmerného poľa). Jednotlivé čísla z poľa sú v matici uložené špirálovite.

public void spirala(File subor, int[] cisla, int pocetRiadkov)

Význam parametrov:

  • subor - názov a cesta k súboru, kam chceme zapísať výstupné pole
  • cisla - pole s číslami, ktoré chceme zapísať do súboru
  • pocetRiadkov - počet riadkov, do koľkých chceme zapísať čísla; platí, že pocetRiadkov bezo zvyšku delí dĺžku poľa cisla.

Špirálovité uloženie: Čísla vo výstupnej matici sú uložené špirálovite, pričom špirála začína na indexe [0][0] v smere riadku na indexe 0 (vo vodorovnom smere).

Príklady:

spirala(???, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], 4):

1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7

spirala(???, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], 4):

1 2 3
10 11 4
9 12 5
8 7 6

spirala(???, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], 5):

1 2 3 4
14 15 16 5
13 20 17 6
12 19 18 7
11 10 9 8

Poznámka: Odporúčame vytvoriť si pomocné 2-rozmerné pole, ktoré budete vhodne napĺňať číslami zo vstupného poľa. Samotný zápis dvojrozmerného poľa (matice) do súboru je už jednoduchý - stačí sa inšpirovať úlohami o maticiach z prednášky.


Poznámka k evaluátoru

Textové súbory vytvorené evaluátorom úloh majú konce riadkov kódované spôsobom, aký sa používa v Linuxe alebo MacOS. Niektoré textové editory v MS Windows (napr. Notepad/Poznámkový blok) nevedia takéto súbory korektne zobraziť. Pre ich korektné zobrazenie v MS Windows odporúčame výborný textový editor PSPad.

Poznámka k hľadaniu riešení na internete

Pri riešení úlohy o odstraňovaní komentárov neodporúčame googlovať riešenia na internete, pretože:

  • ak ste ich vygooglili vy, vygoogliť ich môžu aj ďalší riešitelia (a to modul, ktorý máme v moodle, odhalí) alebo aj my,
  • môžu byť nekorektné,
  • môžu využívať veci, ktoré sme nepreberali (a ak ich použijete, budeme vyžadovať vysvetlenie použitého konceptu a jeho fungovania - trúfate si vysvetľovať regulárne výrazy a ich syntax?).