Mili nasi riesitelia,
vitame Vas pri rieseni noveho rocnika KSP-Z. Dufame, ze aj tento rok sa Vam nase ulohy budu pacit a ze sa do sutaze zapojite v hojnom pocte. Riesenia prveho kola nam posielajte do 15. novembra 1999. Predtym, ako nam poslete svoje riesenia prveho kola, skuste si precitat propozicie. Nezabudnite nam spolu s rieseniami poslat vyplneny evidencny listok a znamky v celkovej hodnote 10.- Sk. Vela stastia pri rieseni praju a na stretnutie na sustredeni sa tesia.
Sused Zavis totiz pracuje ako uctovnik. Jeho starostou je, aby kazdy zo zamestnancov dostal kazdy mesiac spravne vypocitanu vyplatu. Vyplata sa zamestnancom pocita podla poctu odpracovanych dni. Mozete predpokladat, ze zamestnanci cez pracovne dni (t.j. pondelok az piatok) pracuju, v sobotu a nedelu odpocivaju. Uctovanie je narocna praca, preto by sused Zavis ocenil kazdu pomoc.
Uloha: Napiste program, ktory nacita mesiac a rok a vypise, kolko pracovnych dni bolo v danom mesiaci. Vas program by mal fungovat pre lubovolny rok, specialne by nemal robit problemy po roku 2000. Sviatky nemusite uvazovat.
Priklad: Vstup:
SEP 1999 FEB 2000Vystup:
September 1999: 22 pracovnych dni Februar 2000: 21 pracovnych dni
Uloha: Editor ma globalne pole znakov A (velmi velke). V tomto poli je ulozeny editovany text. Uzivatel editora si v texte vyznacil blok, t.j. suvisly usek textu zacinajuci i-tym a konciaci j-tym znakom v poli A. Uzivatel chce tento blok presunut tak, aby po presune zacinal v k-tom prvku pola. Vasou ulohou je naprogramovat proceduru "presun(i,j,k)", ktora dostane cisla i, j a k a presunie v poli A blok textu od i-teho znaku po j-ty z povodneho miesta tak, aby zacinal na mieste k. Mozete predpokladat, ze i, j a k su zadane korektne, t.j. blok ma dlzku aspon 1 a zmesti sa do pola tak, aby zacinal od pozicie k.
Vasa procedura nesmie pouzivat dalsie polia okrem pola A a ani ine velke datove struktury (pouzit mozete iba konstantny pocet pomocnych premennych - znaky, cisla, logicke hodnoty a pod.). Sucasne sa snazte, aby vasa procedura pracovala co najrychlejsie.
Priklad:
Povodny obsah pola A: "abcdefgh"
presun(3,4,2)
Obsah pola A po presune: "acdbefgh"
presun(2,3,7)
Obsah pola A po druhom presune: "abefghcd"
Uloha: Pre dane N - pocet typov remeselnikov, ktorych oznacime 1,2,...,N, vypiste postupne vsetky podmnoziny mnoziny remeselnikov, a to v takom poradi, ze dve za sebou iduce podmnoziny sa lisia iba v jednom prvku - bud niekoho pan Zavis kompou privezie, alebo odvezie. Na zaciatku je pritom v dome prazdna mnozina remeselnikov.
Priklad:
Vstup:
N=3
Vystup:
1. 2. 1 3. 1 2 4. 2 5. 2 3 6. 1 2 3 7. 1 3 8. 3
Uloha: Napiste program, ktory na obrazovke simuluje prechod bludiskom podla pravidla pravej ruky. Vstupom su rozmery bludiska M a N ( M<80 , N<25 ), suradnice vchodu a vychodu a mapa bludiska. V mape '#' znamena stenu a '.' znamena prazdny priestor. Na celom obvode bludiska je stena, iba vchod a vychod su volne. Taktiez mozte predpokladat, ze vchod a vychod sa vzdy nachadzaju na obvode bludiska. Na zaciatku je Jones vo vchode do bludiska a chce sa dostat k vychodu.
Priklad:
Vstup:
N=8 ,M=8
Vchod: (1,4), vychod: (8,4)
Mapa:
######## #...#.## #.#....# ..####.. #...#### #.#....# #.#.#..# ########
Dr. Jones podla pravidla pravej ruky pojde cez policka: (1,4), (2,4), (2,5), (2,6), (2,7), (2,6), (2,5), (3,5), (4,5), (4,6), (4,7), (4,6), (5,6), (6,6), (6,7), (7,7), (7,6), (6,6), (5,6), (4,6), (4,5), (3,5), (2,5), (2,4), (2,3), (2,2), (3,2), (4,2), (4,3), (5,3), (6,3), (7,3) (7,4), (8,4).
Vas program moze postupne cez tieto policka presuvat nejaky vhodny znak (napr. pismeno "J").
Pomozte Zimbo-Zimbovi a naprogramujte jednoduchy prehliadac WWW stranok. Ako vstup program nacita WWW stranku vo formate HTML a zobrazi ju na vystup (do suboru) v citatelnej forme. Samotny HTML subor vyzera podobne ako ten v priklade - na zaciatku je vzdy <HTML><BODY>, na konci </BODY></HTML>. Vsetky texty uzavrete v <\> oznacuju prikazy HTML, ktore ovplyvnuju, ako sa stranka zobrazi. Niektore taketo prikazy musia byt v dvojici, napriklad <HTML> a </HTML> - ten bez lomitka je vzdy zaciatok a s lomitkom je koniec bloku, na ktory ma dany prikaz vplyv. Takze napriklad <CENTER>Nadpis</CENTER> sposobi, ze text ``Nadpis'' bude tvorit samostatny odstavec, ktory bude zarovnany (vodorovne) na stred stranky. Druhy typ prikazov je neparovy a ide napriklad o prikaz <P>, ktory oznacuje koniec odstavca. Text ziadnych prikazov sa do vystupu nezapisuje. Samotny obsah stranky je tvoreny viacerymi odstavcami, pricom kazdy z nich moze zaberat aj viac riadkov vo vystupe. Vo vstupnom subore moze byt text jedneho odstavca umiestneny na viacerych riadkoch, moze obsahovat vela medzier, ale toto formatovanie vstupu nema vplyv na format vystupu. Kazda skupina medzier alebo prazdnych riadkov vo vstupe znamena len oddelenie jednotlivych slov. Tieto jednotlive slova sa potom zapisuju na vystup, pricom medzi kazdymi dvoma slovami je len jedna medzera. Vystupne zariadenie ma obmedzenu sirku (v nasom pripade 80 znakov), a preto slovo, ktore by tuto hranicu prekrocilo, sa zapise do nasledujuceho riadku. Medzi kazdymi dvoma odstavcami je vo vystupe jeden prazdny riadok (vo vstupe nemusi byt, napriklad ``koniec odstavca 1<P>Druhy odstavec'' je tiez oddelenie odstavcov).
Vasou ulohou je teda podla nacitanej WWW stranky v opisanom formate vytvorit subor, ktory bude obsahovat text stranky (nie prikazy) zarovnany na sirku 80 znakov. Predpokladajte, ze vstupny subor obsahuje len opisane prikazy, teda <HTML>, </HTML>, <BODY>, </BODY>, <CENTER>, </CENTER> a <P>.
Priklad:
Vstup:
<HTML> <BODY> Zimbabwejsky internet - ukazkovy subor<P> Toto je druhy odstavec textu, nezavisle od clenenia vo vstupnom subore. <CENTER> Toto bude vycentrovany odstavec </CENTER> A nakoniec zase jeden obycajny odstavec </BODY> </HTML>
Vystup:
(pre sirku strany 40 znakov; ramcek nevypisujte - to je len
zobrazenie hranic stranky)
+----------------------------------------+ |Zimbabwejsky internet - ukazkovy subor | | | |Toto je druhy odstavec textu, nezavisle | |od clenenia vo vstupnom subore. | | | | Toto bude vycentrovany odstavec | | | |A nakoniec zase jeden obycajny odstavec | +----------------------------------------+