6. sada domácich zadaní

Najneskorší termín odovzdania: 22.11.2015 (nedeľa) 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,
  • pri riešeniach úloh nie je dovolené využiť triedu BigInteger a jej podobné triedy,
  • pri riešeniach úloh nie je dovolené využiť triedy z JCF (napr. implementácie rozhrania Map).

O písomke z algebry (3 body)

Vyučujúci algebry na PF UPJŠ ľúbia dávať na písomke úlohu, kde sa pýtajú, akou najväčšou mocninou nejakého čísla je deliteľný nejaký súčin veľa čísel. Špeciálnym prípadom tejto úlohy je úloha zistiť, koľko núl má na konci súčin týchto čísel (t.j. pýtame sa akou najväčšou mocninou čísla 10 je deliteľný tento súčin). Kým matematici radi vyvodzujú "magické" vzorce, pomocou ktorých nájdu odpoveď, my na PAZ1a (znalí programovania) si rýchlejšie napíšeme program, ktorý to vypočíta. Aby sme neboli obmedzení len peknými súčinmi (číslami idúcimi za sebou), budeme uvažovať súčin ľubovoľnej postupnosti čísel v rozsahu long.

Do triedy ZadanaKorytnacka pridajte metódu pocetNulVSucine, ktorá zo zadaného textového súboru načíta bielymi znakmi (medzery, konce riadkov, ...) oddelené čísla v rozsahu typu long a vráti, koľkými nulami bude končiť súčin týchto čísel. Môžete predpokladať, že žiadne z čísel v súbore nebude 0.

public int pocetNulVSucine(String nazovSuboruSCislami)

Pohyby na účte (3 body)

Banka PAZBank (funguje bez poplatkov) umožňuje zaslať si zjednodušený výkaz o uskutočnených operáciach na bankovom účte. Výkaz je uložený v textovom súbore. Prvý riadok obsahuje počiatočný stav účtu. Každý ďalší riadok obsahuje záznam o jednom pohybe na účte. Každý záznam sa skladá z troch medzerami oddelených časti:

  • dátum
  • typ operácie (VKLAD - vloženie hotovosti na účet, VYBER - výber hotovosti, PLATBA - odoslanie peňazí bankovým prevodom, PRIJEM - prijatie peňazí na účet bankovým prevodom)
  • suma

Príklady záznamov:

16.11.2015 VYBER 100
16.11.2015 bol hotovostný výber z účtu sumy 100 EUR
18.11.2015 PRIJEM 121.50
18.11.2015 sme prijali na účet sumu 121.50 EUR

Záznamy sú vo výkaze usporiadané podľa dátumu, kedy nastali.

Do triedy ZadanaKorytnacka pridajte metódu koncovyStavUctu, ktorá vráti koncový stav účtu po vykonaní zaznamenaných bankových operácii. V prípade, že súbor nie je možné načítať, metóda nech vráti hodnotu Double.NaN.

public double koncovyStavUctu(String suborSVykazom)

Pomôcka pre matematikov (5 bodov)

Do triedy ZadanaKorytnacka pridajte metódu spocitajUlohu, ktorá vyráta jednoduché matematické úlohy v zadanom textovom súbore. V každom riadku je jedno zadanie typu: číslo operácia číslo. Všetky čísla sú kladné celé čísla, operáciou je jedno zo znamienok +, -, *.

Príklad vstupu:

17*10
5-2
100+234
32*56

Príklad výstupu:

17*10=170
5-2=3
100+234=334
32*56=1792

Metóda spocitajUlohu má 2 parametre: názov vstupného súboru vstupnySubor a názov výstupného súboru vystupnySubor.

public void spocitajUlohu(String vstupnySubor, String vystupnySubor)

Š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 alebo Notepad++.