aktuálne rozcvičky

Rozcvičky z Programovania 3 zimný semester 2009/2010

Rozcvička 15.12.2009

Fotograf ma k dispozicii casy, kedy pride nejaka celebrita na vystavu. Chce odfotit presne k celebrit. Vasou ulohou je zratat, aky najkratsi cas moze byt na vystave, aby odfotil k celebrit. Doprogramujte triedu Fotograf tak, aby funkcia cas vratila najmensi mozny cas, ktory musi byt fotograf na vystave, aby odfotil k celebrit. Ak raz fotograf pride na vystavu, nemoze z nej odist kym nenafoti vsetkych k celebrit. Funkcia cas ma dva parametre:

class Fotograf {
	static int cas(List<List<Integer>> list, int k) {
		// v casoch zo zoznamu list prichadzaju celebrity
		// fotograf chce sfotit aspon k z nich
		// minimalne ako dlho bude musiet stat (pride, stoji, odide),
		// aby splnil svoju ulohu?
	}
}



Zdrojový kód uvedenej triedy pošlite ako prílohu emailom na rjasko (zavinac) dcs.fmph.uniba.sk, v ktorom bude jednoznačne uvedené Vaše meno a priezvisko. Predmet emailu bude "Programovanie 3 - rozcvicka 10".

Rozcvička 8.12.2009

Mame dane zaciatky a konce jednotlivych prednasok, pricom vieme, ze kazda prednaska trva rovnako dlho. Vasou ulohou je urcit maximalny pocet prednasok, na ktorych sa mozme zucastnit. Ak na niektoru prednasku pojdeme, musime tam byt az do konca.

Vytvorte v subore Rozcvicka.java triedu Rozcvicka s metodou

	public static int pocetPrednasok(String fileName).
Vo vstupnom subore s nazvom fileName je v prvom riadku pocet prednasok, v nasledujucich riadkoch su dvojice celych cisel oddelenych medzerou, prve z tychto cisel udava zaciatok a druhe koniec prednasky (v kazdom riadku jedna dvojica, kazda prednaska ma rovnaku dlzku). Mozete predpokladat, ze vstupny subor je korektny. Navratovou hodnotou metody pocetPrednasok() je maximalny pocet prednasok, ktore mozeme absolvovat. Kladte doraz na casovu efektivnost pouziteho algoritmu.



Zdrojový kód uvedenej triedy pošlite ako prílohu emailom na rjasko (zavinac) dcs.fmph.uniba.sk, v ktorom bude jednoznačne uvedené Vaše meno a priezvisko. Predmet emailu bude "Programovanie 3 - rozcvicka 9".


Rozcvička 1.12.2009

Vašou úlohu je napísať triedu SubstringIterator implementujúcu rozhranie Iterator<String>.
Táto trieda by mala pri volaní metódy next() prechádzať v lexikografickom poradí (pozri String.compareTo()) cez všetky neprázdne reťazce obsiahnuté v danom reťazci s; next() nesmie vrátiť dva rovnaké reťazce (pozri String.equals()). Neprázdny reťazec String s je argumentom konštruktora.
Metóda hasNext() má zodpovedať uvedenému popisu, metóda remove() nemusí robiť nič.

Navyše by trieda SubstringIterator mala mať metódu public Map<String, Integer> poctyVyskytov(), ktorá vráti asociatívne pole obsahujúce dvojice (ss, n), kde ss je podreťazec reťazca s a n je počet výskytov ss v s. (nesmie tam byť nič navyše).



Extrémne pomalé riešenia dostanú primerane menej bodov, aj keď budú dávať správne výsledky.

Zdrojový kód uvedenej triedy pošlite ako prílohu emailom na rjasko (zavinac) dcs.fmph.uniba.sk, v ktorom bude jednoznačne uvedené Vaše meno a priezvisko. Predmet emailu bude "Programovanie 3 - rozcvicka 8".


Rozcvička 24.11.2009:

Vytvorte v subore Rozcvicka.java triedu Rozcvicka s metodou

    public static ArrayList<String> grepFileSpecial(String fileName, String word).
Tato metoda zo suboru s nazvom fileName vyberie tie riadky, ktore obsahuju slovo zadane parametrom word a ulozi ich do zoznamu reprezentovaneho ArrayListom v tom poradi, v akom sa nachadzaju vo vstupnom subore. Slovo word moze obsahovat specialny znak "?", ktory reprezentuje lubovolny znak vo vstupnom sobore. Teda napriklad ak zavolame grepFileSpecial("subor.txt","ah?j");, funkcia by nam mala vratit vsetky riadky, ktore obsahuju aspon jedno zo slov "ahaj,ahbj,ahcj,ahdj,...,ahzj,ah1j,...,ah|j,...".



Zdrojový kód uvedenej triedy pošlite ako prílohu emailom na rjasko (zavinac) dcs.fmph.uniba.sk, v ktorom bude jednoznačne uvedené Vaše meno a priezvisko. Predmet emailu bude "Programovanie 3 - rozcvicka 7".


Rozcvička 10.11.2009:

Napíšte triedu MyArrayUtils, ktora bude obsahovat nasledovne staticke metody:
  1. int[] arraySort(int[] p, Boolean ascending) - metoda vrati utriedene pole p bud od najvacsieho po najmensi, alebo opacne (zalezi na parametri ascending). Pozor - netriedte pole, ktore dostanete v parametry, ale vytvorte si nove.
  2. int median(int[] p) - vrati prvok, ktory je median v danom poli
  3. double average(int[] p) - vrati priemer vsetkych prvkov pola
  4. String arrayToString(String separator, int[] p) - vsetky prvky pola vypise do Stringu, pricom prvky budu odelene separatorom
Dajte si zalezat na tom, aby sa Vas program dal skompilovat a neobsahoval ziadne chyby. Pri programovani vyssie uvedenych metod nepouzivajte funkcionalitu Javy, ktora uvedene metody obsahuje. T.j. nepouzivajte triedy Arrays a pod.

Zdrojový kód uvedenej triedy pošlite ako prílohu emailom na rjasko (zavinac) dcs.fmph.uniba.sk, v ktorom bude jednoznačne uvedené Vaše meno a priezvisko. Predmet emailu bude "Programovanie 3 - rozcvicka 6".


Rozcvička 03.11.2009:

Vytvorte triedu Rozcvicka5 s dvoma metódami: Formát spojovacieho súboru použite nasledovný:
pocet_spojenych_suborov
nazov_suboru1
pocet_znakov_v_subore1
text_suboru1

nazov_suboru2
pocet_znakov_v_subore2
text_suboru2

nazov_suboru3
pocet_znakov_v_subore3
text_suboru3
...
Taktiez vytvorte vynimku InvalidFileFormatException, ktora bude potomkom triedy Exception. Túto výnimku vyhodí metóda rozpoj, ak súbor, ktorý dostane na vstupe nezodpovedá uvedenému formátu. Nezabudnite tiež ošetriť výnimky týkajúce sa práce so súbormi (IOException).

Na prácu so súbormi pouzite triedy FileReader, BufferedReader, FileWriter, PrintWriter
	BufferedReader in = new BufferedReader(new FileReader("cesta_k_suboru.txt"));
	PrintWriter out = new PrintWriter(new FileWriter("cesta_k_suboru.txt",append)); //parameter append je nepovinny
Testovacie súbory si mozete stiahnut tuto: zdroje.zip

Zdrojový kód uvedenej triedy pošlite ako prílohu emailom na rjasko (zavinac) dcs.fmph.uniba.sk, v ktorom bude jednoznačne uvedené Vaše meno a priezvisko. Predmet emailu bude "Programovanie 3 - rozcvicka 5".


Rozcvička 27.10.2009:

Vytvorte interface Serializable obsahujúci dve verejné metódy String serialize() a void unserialize(String src).

Triedy implementujúce tento interface, by pomocou metody serialize ulozili stav instancie do stringu a pomocou unserialize by ho vedeli znovu nacitat.

Ďalej vytvoríme triedu reprezentujúcu graf. Vrcholy tohto grafu sú čísla od 1 do n, kde n je počet vrcholov. Na vnútornú reprezentáciu grafu využite pole polí susedov.

Vytvorte triedu Graph implementujúcu interface Serializable s nasledujúcimi metódami:

Nezabudnite implementovat metody serialize() a unserialize(.). Metoda serialize() by mala do stringu ulozit pole poli susedov (alebo maticu susednosti) no a naopak unserialize(.) by mala naplnit pole poli susedov danej instancie na zaklade stringu v parametroch. Format stringu, do ktoreho graf ulozite a z ktoreho ho nacitate si vymyslite.



Všetko odovzdajte v jedinom zdrojovom súbore Graph.java, ktorý je súčasťou balíka rozcvicky.

Zdrojový kód uvedenej triedy pošlite ako prílohu emailom na rjasko (zavinac) dcs.fmph.uniba.sk (M-218), alebo mazak (zavinac) dcs.fmph.uniba.sk (M-217), v ktorom bude jednoznačne uvedené Vaše meno a priezvisko. Predmet emailu bude "Programovanie 3 - rozcvicka 4".


Rozcvička 20.10.2009:

Dané je dvojrozmerné pole reťazcov n x n. Vašou úlohou je nájsť prienik a zjednotenie riadkov tohto poľa.

Vytvorte triedu public class Rozcvicka3 s premennou typu String[][] a nasledujúcimi metódami: Na porovnávanie reťazcov použite metódu String.equals().

Zdrojový kód uvedenej triedy pošlite ako prílohu emailom na rjasko (zavinac) dcs.fmph.uniba.sk, v ktorom bude jednoznačne uvedené Vaše meno a priezvisko. Predmet emailu bude "Programovanie 3 - rozcvicka 3".


Rozcvička 13.10.2009:

Vytvorte triedu Rozcvicka2 s metodou bool jeSuctomStvorcov(int n), ktora vrati true ak je dane cislo n suctom druhych mocnin nejakych dvoch prirodzenych cisel. V opacnom pripade vrati false.

Priklady:
25 = 16 + 9 = 4^2 + 3^2; jeSuctomStvorcov(25) teda vrati true
26 nie je suctom ziadnych dvoch stvorcov, teda jeSuctomStvorcov(26) vrati false

Tato metoda by sa mala dat pouzit aj v pripade, ked neexistuje ziadna instancia triedy Rozcvicka2. Dalej do triedy Rozcvicka2 pridajte metodu public static void main(String[] args), ktora s vyuzitim metody jeSuctomStvorcov(int n) vypise na standardny vystup vsetky cisla mensie ako 1001, ktore su suctom nejakych dvoch stvorcov.

Zdrojový kód uvedenej triedy pošlite ako prílohu emailom na rjasko (zavinac) dcs.fmph.uniba.sk, v ktorom bude jednoznačne uvedené Vaše meno a priezvisko. Predmet emailu bude "Programovanie 3 - rozcvicka 2".


Rozcvička 6.10.2009:

Vytvorte triedu Rozcvicka1 s metodou int fib(int k), ktora vrati hodnotu k-teho cisla vo Fibonacciho postupnosti. Fibonaciho postupnost ma predpis:
F_0 = 0
F_1 = 1
F_n = F_(n-2)+F_(n-1);
Teda prvych 10 clenov postupnosti vyzera nasledovne:
0,1,1,2,3,5,8,13,21,34,...
Tato metoda by sa mala dat pouzit aj v pripade, ked neexistuje ziadna instancia triedy Rozcvicka1. Dalej do triedy Rozcvicka1 pridajte metodu public static void main(String[] args), ktora s vyuzitim metody fib(int k) vypise na standardny vystup hodnotu fib(22).

Zdrojový kód uvedenej triedy pošlite ako prílohu emailom na rjasko (zavinac) dcs.fmph.uniba.sk, v ktorom bude jednoznačne uvedené Vaše meno a priezvisko. Predmet emailu bude "Programovanie 3 - rozcvicka 1".