Programovací jazyk C#

  • Úvodní stránka
  •  
    Přednášky Projekty

    Seznam úloh k projektům

    Jednoduchá konzolová aplikace

    1. Matematické cvičení
    2. Testování obrázků
    3. Anagramy
    4. Převod na zlomek
    5. Vyčísli zlomek
    6. Šachovnice
    7. Šachy
    8. Hodnost matice
    9. Palindromy s čísly

    Složitější konzolová aplikace

    1. Rozklad na prvočísla
    2. Nejkratší cesta v orientovaném grafu
    3. Násobení čísel
    4. Kůň na šachovnici
    5. Mince
    6. Plocha
    7. Římská čísla
    8. Tranzitivní uzávěr grafu
    9. Pozice

    Nejsložitější konzolová aplikace

    1. Cesta v bludišti
    2. Analyzátor obrazu
    3. Optimální násobení matic
    4. Maximální suma
    5. Puzzle
    6. Hanojské věže
    7. Výrazy
    8. Logika
    9. Křížovka

    Další úlohy

    1. Jednoduchý webový server
    2. Databáze CD
    3. Chat
    4. Síťové šachy
    5. Kontrolor souborů
    6. Komprese
    7. Vyhledávání souboru
    8. Piškvorky
    9. Komprese II

    Aplikace s GUI

    1. Grafický kalkulátor
    2. Hra miny
    3. Pexeso
    4. Práce s tiskárnou
    5. Elektronický diář
    6. Porovnávání souboru
    7. Kreslítko
    8. Dohled sítě
    9. Paintbrush

    Matematické cvičení

    Zadání

    Cílem je implementovat jednoduchý kalkulátor, který bude umět sčítat číslice v různých soustavách.

    Specifikace vstupu

    Na vstupu je několik bloků. Každý blok mimo posledního začíná řádkem s kladným celým číslem z (toto číslo je menší než 35), poslední blok začíná nulou a nemá být zpracováván. Na druhém řádku každého bloku se nachází dvě nezáporná čísla x a y oddělená mezerou, která jsou zapsána standardním způsobem v soustavě o základu z. U soustav o základu větším než 10 se pro cifry s hodnotou větší než 9 používá písmen A, B.... Pokud má soustava základ jedna, používá se pouze cifra jedna a a počet cifer je roven velikosti čísla (viz vzorový výstup); nula se v jedničkové soustavě zapisuje jako jednociferné číslo, jediná cifra 0. Čísla, která váš program obdrží na vstupu, nebudou na svém začátku obsahovat přebytečné nuly. Čísla mají nejvýše 1000 cifer.

    Specifikace výstupu

    Výstup má obsahovat pro každý blok na vstupu jeden řádek. Na řádku mají být vypsána čísla x a y oddělená mezerou, znakem + a mezerou. Za nimi má následovat mezera, znak =, mezera a číslo x+y. Všechna čísla mají být zapsána standardním způsobem v soustavě o základu z.

    Příklad vstupu a výstupu

    Vstup:
    16
    A0 FE
    1
    1111 11
    0
    
    Výstupem programu bude:
    A0 + FE = 19E
    1111 + 11 = 111111
    
    Nahoru

    Testování obrázků

    Zadání

    Cílem je implementovat jednoduchý analyzátor obrázků, který poprovná dva obrázky a zjistí, v jakém vztahu k sobě jsou. Může nastat jeden z těchto případů:

    • shoda
    • otočení o 90o po směru hodinových ručiček
    • otočení o 180o po směru hodinových ručiček
    • otočení o 270o po směru hodinových ručiček
    • zrcadlení podle horizontální osy
    • zrcadlení následované otočením (podle pořadí výąe)
    Nastane-li případ, kdy přichází v úvahu více než jedna transformace, vypište tu, která je v tomto seznamu na nejpřednějším místě.

    Specifikace vstupu

    První řádek vstupu je celé číslo N, udávající počet zadání. Dále následují jednotlivá zadání. Každé zadání se skládá z řádky o jednom čísle R (2<=R<=10) udávajícím velikost vzoru a R řádků. Každý řádek obsahuje R znaků '.' (tečka) nebo 'x' (řádek původního vzoru), mezeru a druhých R teček a 'x'ek (řádek transformovaného vzoru).

    Specifikace výstupu

    Pro každé zadání vypište jednu řádku obsahující jednu z těchto odpovědí: 'Shoda', 'Otoceni o X stupnu', kde X je '90', '180' nebo '270', 'Zrcadleni', 'Zrcadleni a otoceni o X stupnu', případně 'Ruzne vzory'.

    Příklad vstupu a výstupu

    Vstup:

    4
    5
    x...x ....x
    .x... ...x.
    ...x. .x...
    ..x.x ..x..
    ....x xx..x
    2
    x. xx
    x. xx
    4
    ..x. ...x
    xx.. ....
    .... xx..
    ...x ..x.
    4
    .x.. ..x.
    .x.x x...
    .... ..xx
    ..x. ....
    
    Výstupem programu bude:
    Otoceni o 90 stupnu
    Ruzne vzory
    Zrcadleni
    Zrcadleni a otoceni o 270 stupnu
    

    Nahoru

    Anagramy

    Zadání

    K zadanému slovu vypište všechny jeho anagramy. Anagram je katové slovo, které vznikne přeuspořádáním písmen z původního slova. Každé slovo na výstupu bude právě jednou a všechna slova budou setříděna podle abecedy sestupně (od a do z). Ve vstupním slově, jehož anagramy budete generovat, se mohou některé symboly opakovat.

    Specifikace vstupu

    Na prvním řádku je číslo N. To udává, kolik řádku následuje. Na následujících N řádcích je N slov, každé na samostatném řádku.

    Specifikace výstupu

    Ke každému slovu ze vstupu vygenerujte všechny jeho anagramy (včetně původního slova) setříděné sestupně podle abecedy. Slova se mohou skládat z malých a velkých písmen anglické abecedy.

    Příklad vstupu a výstupu

    Vstup:

    3
    aAb
    abc
    acba
    
    Výstup:
    Aab
    Aba
    aAb
    abA
    bAa
    baA
    abc
    acb
    bac
    bca
    cab
    cba
    aabc
    aacb
    abac
    abca
    acab
    acba
    baac
    baca
    bcaa
    caab
    caba
    cbaa
    

    Nahoru

    Převod na zlomek

    Zadání

    Všechna racionální čísla lze vyjádřit ve tvaru p/q. Kde p a q jsou přirozená čísla. Pokud bychom ovšem chtěli vyjádřit například 7/22 v podobě reálného čísla budou se něktéré číslice "nekonečně krát" opakovat (7/22 = 0.318181818...).
    Vaším ukolem bude pro číslo s opakující se reálnou částí najít původní zlomek. Pro čísla menší než jedna můžete využít následující výraz:

    Kde k je počet neopakujících se číslic, a j je počet opakujících se číslic. X je původní číslo jehož zlomkovou reprezentaci hledáne.
    Pro předchozí příklad bychom získlali: X = 0.318, k = 1, j = 2. Po dosazení do uvedeného výrazu bychom získali: 318.1818... - 3.18 / 1000 - 10, po upravách to je 315 / 990 respektive 7 / 22.

    Specifikace vstupu

    Na prvním řádku je číslo N toto číslo udává počet zadání, které následují. Každé zadání obsahuje dva čísla. První číslo reprezentuje počet opakujících se míst a druhé je reálné číslo X, jehož zlomkovou reprezentaci se snažíme najít. X bude větší než nula a menší než jedna. Počet opakujících se číslic a neopakujících se číslic u žádného čísla nebude větší než 10.

    Specifikace výstupu

    Pro každé zadání vytiskněte původní zlomek p / q, jehož vyčíslením vzniklo číslo X. Zlomek musí být normalizován do tvaru, kdy čitatel a jmenovatel nemají žádného společného dělitele kromě jedné.

    Příklad vstupu a výstupu

    Vstup:

    4
    2 0.318
    1 0.3
    2 0.09
    6 0.714285
    
    Výstup:
    7/22
    1/3
    1/11
    5/7
    

    Nahoru

    Vyčísli zlomek

    Zadání

    Racionální čísla lze zadat v podobě zlomku jako p / q. Některá takto zadaná čísla ovšem nelze vyšíslit a zapsat, protože kdybychom dělili p číslem q, poslední část reálné části čísla se opakuje do nekonečna. Například číslo 1/3 je 0.333333... . Vaším úkolem je pro dané čísla p a q najít p/q a vypsat toto číslo. V tomto problému předpokládejte, že opakující se části je první řetězec minimální delky na pravé straně čísla. Například pro číslo 1/3 (0.3...) to bude 3 na první pozici. Pro číslo 1/250 (0.0040...) to bude 0 na čtvrté pozici.

    Specifikace vstupu

    První řádek vstupu reprezentuje číslo N. Toto číslo udává počet zadání. Na dalších N řádcích jsou jednotlivá zadání. Jde o čísla p a q. p/q budete počítat. Čísla na vstupu budou menší než 3000.

    Specifikace výstupu

    Pro každé zadání ze vstupu vytiskněte p/q. Na výstup vytiskněte výsledek a to tak, že část okakující se do nekonečna uzavřete do závorek. Pokud by číslo mělo za desetinnou tečkou víde než 50 znaků, vytiskněte jen 50 číslic za desetinnou tečkou a místo zbytku vytiskněte "...)". Předpokládejte, že u všech číslic na vstupu začne opakujíc se část do padesáte číslice. Pod samotné číslo vytiskněte počet číslic v opakující se části dle ukázkového vstupu a za každé zadání vytiskněte prázdný řádek.

    Příklad vstupu a výstupu

    Vstup:

    3
    76 25
    5 43
    1 397
    
    Výstup:
    76/25 = 3.04(0)
    Pocet opakujicich se cisel: 1
    
    5/43 = 0.(116279069767441860465)
    Pocet opakujicich se cisel: 21
    
    1/397 = 0.(00251889168765743073047858942065491183879093198992...)
    Pocet opakujicich se cisel: 99
    

    Nahoru

    Šachovnice

    Zadání

    Vašim úkolem je přečíst obraz šachovnice a vypsat pozici figur v šachové notaci.

    Specifikace vstupu

    Vstup je tvořen ASCII obrazem šachovnice s vyznačenými pozicemi jednotlivých figur. Bíle figury jsou zapsány jako velká písmena, černá jako malá písmena. Jednotlivé figury jsou značeny následovně: "K" (King - král), "Q" (Queen - dáma), "R" (Rook - věž), "B" (Bishop - střelec), "N" (Knight - kůň), or "P" (Pawn - pěšec). Jednotlivá pole jsou znázorněna pomocí znaků plus ("+"), mínus ("-") a pipe ("|"). černá pole jsou vyplňěna pomocí dvojteček (":"), bílá pomocí teček (".").

    Specifikace výstupu

    Výstup je tvořen dvěma řádky. První obsahuje řetězec "White: " následovaný pozicemi bílých figur. Druhý obsahuje řetězec "Black: " následovaný pozicemi černých figur.

    Pozice jednotlivých figur jsou odděleny pomocí čárky. Popis pozice je tvořen velkým písmenem, které určuje typ figury (kromě pěšcu, u kterých je vynechán). Tento znak je bezprostředně následován pozicí figury v standardní notaci - malé písmeno "a" - "h" určující sloupec ("a" je úplně v levo) a číslice mezi 1 a 8 určující řádek (8 je první řádek vstupu).

    Figury musí být seřazeny v následujícím pořadí: Král("K"), Dáma ("Q"), Věž ("R"), Střelec ("B"), Kůň ("N"), and pěšci. Pokud se na šachovnici vyskytují dvě figury stejného typu, musí bílá figura s nižším číslem řádku být před bílou figurou s vyšším číslem řádku, a černá figura s vyšším číslem řádku před černou figurou s nižším číslem řádku. Pokud jsou v jednom řádku dvě stejné figury, budou vypsány v pořadí podle sloupců (od "a" k "h").

    Příklad vstupu a výstupu

    Vstup:

    +---+---+---+---+---+---+---+---+
    |.r.|:::|.b.|:q:|.k.|:::|.n.|:r:|
    +---+---+---+---+---+---+---+---+
    |:p:|.p.|:p:|.p.|:p:|.p.|:::|.p.|
    +---+---+---+---+---+---+---+---+
    |...|:::|.n.|:::|...|:::|...|:p:|
    +---+---+---+---+---+---+---+---+
    |:::|...|:::|...|:::|...|:::|...|
    +---+---+---+---+---+---+---+---+
    |...|:::|...|:::|.P.|:::|...|:::|
    +---+---+---+---+---+---+---+---+
    |:P:|...|:::|...|:::|...|:::|...|
    +---+---+---+---+---+---+---+---+
    |.P.|:::|.P.|:P:|...|:P:|.P.|:P:|
    +---+---+---+---+---+---+---+---+
    |:R:|.N.|:B:|.Q.|:K:|.B.|:::|.R.|
    +---+---+---+---+---+---+---+---+
    
    Výstup:
    White: Ke1,Qd1,Ra1,Rh1,Bc1,Bf1,Nb1,a2,c2,d2,f2,g2,h2,a3,e4
    Black: Ke8,Qd8,Ra8,Rh8,Bc8,Ng8,Nc6,a7,b7,c7,d7,e7,f7,h7,h6
    

    Nahoru

    Šachy

    Zadání

    Tento úkol je opačným k úkolu Šachovnice

    Specifikace vstupu

    Specifikace výstupu

    Příklad vstupu a výstupu

    Vstup:

    White: Ke1,Qd1,Ra1,Rh1,Bc1,Bf1,Nb1,a2,c2,d2,f2,g2,h2,a3,e4
    Black: Ke8,Qd8,Ra8,Rh8,Bc8,Ng8,Nc6,a7,b7,c7,d7,e7,f7,h7,h6
    
    Výstup:
    +---+---+---+---+---+---+---+---+
    |.r.|:::|.b.|:q:|.k.|:::|.n.|:r:|
    +---+---+---+---+---+---+---+---+
    |:p:|.p.|:p:|.p.|:p:|.p.|:::|.p.|
    +---+---+---+---+---+---+---+---+
    |...|:::|.n.|:::|...|:::|...|:p:|
    +---+---+---+---+---+---+---+---+
    |:::|...|:::|...|:::|...|:::|...|
    +---+---+---+---+---+---+---+---+
    |...|:::|...|:::|.P.|:::|...|:::|
    +---+---+---+---+---+---+---+---+
    |:P:|...|:::|...|:::|...|:::|...|
    +---+---+---+---+---+---+---+---+
    |.P.|:::|.P.|:P:|...|:P:|.P.|:P:|
    +---+---+---+---+---+---+---+---+
    |:R:|.N.|:B:|.Q.|:K:|.B.|:::|.R.|
    +---+---+---+---+---+---+---+---+
    

    Nahoru

    Hodnost matice

    Zadání

    Aplikace na zjištění hodnosti matice. Vstupem bude libovolná matice a výstupem bude číslo, které představuje hodnost matice. Meziřešením je převod zadané matice na trojúhelníkový tvar.

    Specifikace vstupu

    První řádek vstupu je celé číslo M, udávající počet zadání řádků v matici. Další řádek obsahuje číslo N reprezentující počet sloupců matice. Následuje m řádků matice, přičemž každý řádek obsahuje n reálných čísel.

    Specifikace výstupu

    Na konzoli se vypíše text "Hodnost matice je" + hodnost matice (=kladné celé číslo).

    Příklad vstupu a výstupu

    Vstup:

    3
    3
    333
    222
    111
    
    Výstup:
    Hodnost matice je 1.
    

    Nahoru

    Palindromy s čísly

    Zadání

    Palindrom bude číslo, které přečtené zepředu i zezadu udává stejnou hodnotu. Metoda, kterou se pokusíte získat z čísla palindrom je postavená a otáčení čísla a sčítání. Algoritmus výpočtu lze popsat takto. 1. Vybereme číslo. 2. Otestujeme zda jde o plaindrom. 3. Pokud ne, číslo sečteme s číslem, které vznikne jeho otočením. Pokud jsme nalezli palindrom výpočet končí. V opačném případě opakujeme krok 3.

    Například:
    195 Počáteční hodnota
    591
    -----
    786
    687
    -----
    1473
    3741
    -----
    5214
    4125
    -----
    9339 Výsledný palindrom.

    V tomto konkrétním příkladě jsme nalezli palindrom (číslo 9339) ve čtvrtém kroku výpočtu.

    Specifikace vstupu

    První řádek vstupu je celé číslo M, udávající počet zadání. Každé zadání je jedno číslo. Z tohoto čísla se pokusíte získat palindrom použitím metody popsané výše.

    Specifikace výstupu

    Pro každé zadání se na výstup vypíše řádek obsahující celá čísla X a Y odělená mezerou. Číslo X udává počet kroků potřebných k vytvoření palindormu a číslo Y vytvořený palindrom. Pokud by při výpočtu číslo přesáhlo celočíselny typ int a nebo počet kroků při výpočtu byl větší než 1000, vypište místo dvojice X a Y text: NENALEZENO.

    Příklad vstupu a výstupu

    Vstup:

    3
    195
    265
    750
    
    Výstup:
    4 9339
    5 45254
    3 6666
    

    Nahoru

    Rozklad na prvočísla

    Zadání

    Implementujte algoritmus, který najde rozklad čísla na jeho prvočíselné dělitele. Pokud by například bylo na vstupu číslo 195, pak jeho rozkladem na prvočíselné dělitele je sekvence (3,5,13). Pak platí: 195 = 3 * 5 * 13.

    Specifikace vstupu

    Na vstupu bude sekvence čísel. Pro každé číslo vytiskněte jeho prvočíselný rozklad. Sekvence čísel bude ukončena číslem 0. Pokud na vstupu narazíte na toto číslo, můžete vykonávání ukončit. Všechna čísla budou v rozmezí od -1 000 000 000 do 1 000 000 000.

    Specifikace výstupu

    Pro každé číslo vytiskněte na jeden řádek řetězec obsahující: ono číslo, rovnítko, jeho rozklad. V rozkladu jsou vypsáni všichni prvočíselní dělitelé. Tito dělitelé jsou oddělení znakem: x. pokud je číslo záporné, bude vypsáno při rozkladu i číslo -1, jinak jednička v seznamu dělitelů nebude. Pro přehlednost budou navíc všechny elementy na výstupu odděleny mezerami.

    Příklad vstupu a výstupu

    Vstup:

    -190
    -191
    -192
    -193
    -194
    195
    196
    197
    198
    199
    200
    0
    
    Výstup:
    -190 = -1 x 2 x 5 x 19
    -191 = -1 x 191
    -192 = -1 x 2 x 2 x 2 x 2 x 2 x 2 x 3
    -193 = -1 x 193
    -194 = -1 x 2 x 97
    195 = 3 x 5 x 13
    196 = 2 x 2 x 7 x 7
    197 = 197
    198 = 2 x 3 x 3 x 11
    199 = 199
    200 = 2 x 2 x 2 x 5 x 5
    

    Nahoru

    Nejkratší cesta v orientovaném grafu

    Zadání

    Vytvořte program, který najde nejkratší cestu v orientovaném ohodnoceném grafu. Vstupem programu bude definice grafu. Graf obsahuje orientované hrany. Tyto hrany jsou ohodnoceny celým nenulovým číslem. Výstupem pak bude nejratší cesta mezi dvěmi zadanými vrcholy. Program čte vstupní data ze standardního vstupu a výsledky zapisuje na standardní výstup.

    Specifikace vstupu

    Vstup se skládá ze Z zadání. První řádek vstupu obsahuje právě jedno celé kladné číslo Z. Dále následují jednotlivá zadání. Každé zadání je tvořeno následujícími údaji:

    • První řádek obsahuje kladné celé číslo N označující počet vrcholů grafu. Vrcholy jsou číslovány od 0 do N-1.
    • Další řádek obsahuje číslo M udávající počet hran v grafu.
    • Následuje M řádků obsahující popisy jednotlivých hran. Každá hrana je reprezentovaná trojicí X Y C. Kde X a Y jsou čísla z internalu <0,N-1> a reprezentují počáteční (X) a cílový (Y) vrchol. C reprezentuje cenu této hrany. C je celé číslo větší než nula.
    • Poslední řádek zadání obsahuje dva čísla A a B. Oba patří do intervalu <0,N-1>. Jde o specifikaci počátečního (A) a konečného (B) vrcholu.

    Při čtení vstupních dat předpokládejte, že zadání neobsahuje žádné formální ani věcné chyby.

    Specifikace výstupu

    Pro každé zadání bude výstupem jedno celé číslo. Toto číslo bude cena nejkratší cesty mezi vrcholy A a B.

    Příklad vstupu a výstupu

    Vstup:
    1
    5
    6
    0 1 2
    0 2 1
    1 3 3
    3 1 3
    2 3 5
    1 4 7
    0 3 
    
    Výstupem programu bude:
    5
    
    Nahoru

    Násobení čísel

    Zadání

    Cílem problému bude vypsat řešení násobení dvou čísel. Tyto čísla navíc musejí být vypsána včetně celého postupu řešení při násobení. Pokud například násobíme 123 číslem 95 měl by výpis vypadat takto:

        123
         95
        ---
        615
      1107
      -----
      11685
    

    Specifikace vstupu

    Každý řádek na vstupu (kromě posledního) bude obsahovat dvě čísla x a y. Poslední řádek obsahuje pouze jedno číslo a tím číslem bude číslo nula. Podle toho poznáte, že jde o konec vstupu. Čísla budou mít maximálně 10 číslic.

    Specifikace výstupu

    Pro každou dvojici číslic vytiskněte jejich násobení včetně celého postupu. Za každým násobením pak vytiskněte prázdný řádek. Čísla vytiskněte podle ukázkového výstupu. Budou platit tato pravidla.

    • Pokud by v prostředí části (zachycující vlastní výpočet) bylo méně řádku než dva netiskněte tuto část a pouze vytiskěte výsledek.
    • Číslo nula tiskněte pouze v případě, že má význam (tedy ve výsledku, ne u postupu).
    • Počet - v prvním horizontální "čáře" bude stejný, jako u delšího z čísel x a y. Počet - u druhé oddělující čary (pokud bude tisknuta) bude stejný jako u výsledku.
    Při tisku vhodně doplňte mezery tak, jak je tomu v ukázkovém příkladě.

    Příklad vstupu a výstupu

    Vstup:

       4 7
    135  46
        12345   862
    0 123456789
    0
    
    Výstup:
     4
     7
     -
    28
    
     135
      46
     ---
     810
    540
    ----
    6210
    
       12345
         862
       -----
       24690
      74070
     98760
    --------
    10641390
    
            0
    123456789
    ---------
            0
    

    Nahoru

    Kůň na šachovnici

    Zadání

    Vaším úkolem bude zjistit, kolik tahy lze minimálně posunout šachovou figuru označovanou jako kůň z místa A na šachovnici do místa B.

    Specifikace vstupu

    Vstup se bude skládat z několika zadání. Každé zadání bude na samostatném řádku. Každý řádek bude obsahovat aktuální pozice figury a cílová pozice figury. Obě pozice budou zadány ve standardní notaci. Písmeno udává první rozměr (sloupec šachovnice, a-h) následující číslice řádek šachovnice (1-8).

    Specifikace výstupu

    Pro každé zadání vytiskněte řetězec: "To get from xx to yy takes n knight moves.", kde xx je starovní pozice, yy cílová pozice a n po počet tahů.

    Příklad vstupu a výstupu

    Vstup:

    e2 e4
    a1 b2
    b2 c3
    a1 h8
    a1 h7
    h8 a1
    b1 c3
    f6 f6
    
    Výstup:
    To get from e2 to e4 takes 2 knight moves.
    To get from a1 to b2 takes 4 knight moves.
    To get from b2 to c3 takes 2 knight moves.
    To get from a1 to h8 takes 6 knight moves.
    To get from a1 to h7 takes 5 knight moves.
    To get from h8 to a1 takes 6 knight moves.
    To get from b1 to c3 takes 1 knight moves.
    To get from f6 to f6 takes 0 knight moves.
    

    Nahoru

    Mince

    Zadání

    Předpokládejte, že máte 50, 25, 10, 5 a 1 korunové mince. Pokud jich máte nekonečně mnoho, kolika způsoby můžete sestavit daný obnos? Například 11 korun můžete sestavit jako 10ti koruna a koruna, nebo dvě pětikoruny a jedna koruna atd.

    Specifikace vstupu

    Vstup se skládá z N čísel. N sum, které máte spočítat.Každé číslo reprezentuje jedno zadání.

    Specifikace výstupu

    Pro každé zadání vytiskněte počet možných sestavení daného obnosu se zadaných pěti typů mincí. Váš program by měl úspěšně vyřešit úlohu až do 7000 korun.

    Příklad vstupu a výstupu

    Vstup:

    11
    26
    
    Výstup:
    4
    13
    

    Nahoru

    Zadání

    Vašim úkolem je napsat program, který spočítá obsah pracoúhelníku určeného jeho hranicí. Hranice je vždy uzavřená a probíhá po hranách čtvercové sítě (hranice mezi jednotlivými čtverečky). Můžete předpokládat, že se hranice nikde nekříží ani nedotýká.

    Specifikace vstupu

    První řádek obsahuje počet vstupů. Každý test, který následuje, tvoří 2 řádky. Na prvním jsou dvě celá čísla X a Y, která určují souřadnice počátečních bodů hranice. Na druhém řádku je řetězec popisující vlastní hranici. Každý znak představuje pohyb podél hranice o jednu jendotku. Povoleny jsou pouze znaky 'W' ("west - západ"), 'E' ("east - východ"), 'N' ("north - sever"), 'S' ("south - jih") a '.' ("Konec hranice", žádný pohyb). Znak ('.') je bezprostředně následován koncem řádku. Délka řádku nikdy nepřesáhne 100000 znaků.

    Specifikace výstupu

    Pro každý test bude výstup obsahovat jeden řádek obsahujícím text: "The area is XX squares." - místo znaků XX bude uveden obsah plochy rovnoběžníku.

    Příklad vstupu a výstupu

    Vstup:

    1
    2 1
    EENNWNENWWWSSSES.
    
    Výstup:
    The area is 10 squares.
    

    Nahoru

    Římská čísla

    Zadání

    Ve středověku se často na stavbu umisťoval nápis, jehož zvýrazněná písmena tvořila římské číslo, které určovalo rok, kdy byla daná stavba postavena. Například budova s nápisem "My vsb is the best schooL In ostrava" byla určitě postavena v roce "MLI" tedy 1051. Avšak nápis byl často postupem času poškozen a proto nebylo možné určit, které znaky byly velké a tedy tvořily římské číslo. Pro tento případ bylo dohodnuto, že se za rok postavení bude brát poslední (tzn. největší) rok, který faný nápis představuje. Například u nápisu "my vsb is the best school in ostrava" je jasné že největším rokem je "MCLV" a tedy tato budova byla postavena v roce 1155.

    Specifikace vstupu

    Vstup se skládá z několika neprázdných řádků l1,..., ln. Každý z nich tvoří nápisy zapsané malými písmeny. Délka každého nápisu je nejvýše 10 000 znaků.

    Specifikace výstupu

    Pro každý vstupní řádek li je na výstup zapsáno jedno celé číslo. Toto číslo je nejvetší řimské číslo, které může být v nápisu li zakódováno, nebo 0, pokud nápis žádné řimské čislo neobsahuje.

    Příklad vstupu a výstupu

    Vstup:

    my vsb is the best school in ostrava
    no year
    
    Výstup:
    1155
    0
    

    Nahoru

    Tranzitivní uzávěr grafu

    Zadání

    Vytvoření tranzitivního uzávěru v grafu (matice). Tranzitivní uzávěr orientovaného grafu je orientovaný graf s původními vrcholy a platí, že existuje hrana z uzlu U do uzlu V právě tehdy, když v původním orientovaném grafu existuje libovolná orientovaná cesta z uzlu U do uzlu V.

    Specifikace vstupu

    Vstup začíná číslem N. To udává počet zadání. Každé zadání začíná číslem M. To reprezentuje počet vrcholů v grafu. Vrcholy jsou číslovány od 0 do N-1. Následuje čtvercová matice, kde 1 znamená, že mezi uzlem daného řádku a sloupce existuje hrana. Pokud například na druhém řádku je jednička na pozici 3, znamená to že v grafu je hrana z vrcholu 1 (vrcholy jsou číslovány od nuly!) do vrcholu 2.

    Specifikace výstupu

    Výstupem je opět binární matice reprezentující výsledný graf, tranzitivní úzávěr.

    Příklad vstupu a výstupu

    Vstup:

    1
    6
    101001
    110000
    011000
    001110
    000011
    000011
    
    
    Výstup:
    111011
    111011
    111011
    111111
    000011
    000011
    

    Nahoru

    Pozice

    Zadání

    Vaším úkolem bude určit pozici robota na hrací desce. Zadání specifikuje velkost hrací desky. Ta je obdelníková a skládá se s políček stejné velikosi. Následuje popis cesty robota. Robot se může otáčet a to vždy o devadesát stupňů buď v levo a nebo v pravo. Také může popojet o jedno pole ve směru, kterým je právě natočen. Vaším úkolem bude zjistit výslednou pozici robota na hrací desce, pokud znáte jeho startovní pozici a víte, jaké kroky postupně prováděl.

    Specifikace vstupu

    Vstup začíná dvěmi čísly X a Y (oba čísla budou menší než 100). Tyto čísla specifikují velikost hraci desky. Následuje několik popisů cesty robota. Každý popis cesty se skládá ze dvou řádků. První řádek obsahuje dvě souřadnice a aktuální natočení robota. Souřadnice jsou dva celá čísla. Souřadnice levého horního rohu hrací desky jsou 0,0. Následuje N,S,E,W. Tato značka odpovídá počátečnímu natočení robota (jde o anglické ekvivalenty světových stran). Pokud je robot natočen na Sever (North - N) a pohne se o jedno pole, jeho souřadnice (x,z) se změní na (x,y+1). Údaje na prvním řádku jsou odděleny mezerami. Druhý řádek obsahuje popis chování robota. Jde o sekvencí písmen:

    • F - Forward - pohyb robota vpřed o jedno pole;
    • R - Right - otočení robota do prava o 90 stupňů;
    • L - Left - otočení robota do leva o 90 stupňů;

    Specifikace výstupu

    Pro každý popis cesty ze vstupu bude výstupem pozice a natočení po provedení všech popsaných kroků. Protože hrací plocha nemá mantinely, může se stát, že robot z hrací plochy spadne. V takovém případě vypište poslední pozici na hrací pološe a poznámku LOST. Vypisovaný popis pozice robota odpovídá svou strukturou popisu pozice na vstupu. Jednotlivé údaje jsou odděleny mezerou.

    Více ukázkový vstup a výstup.

    Příklad vstupu a výstupu

    Vstup:

    5 3
    1 1 E
    RFRFRFRF
    3 2 N
    FRRFLLFFRRFLL
    0 3 W
    LLFFFLFLFL
    
    Výstup:
    1 1 E
    3 1 N
    2 2 S
    

    Nahoru

    Cesta v bludišti

    Zadání

    Vytvořte program, který najde a zobrazí cestu v bludišti. Vstupem programu bude definice bludiště. Výstupem pak stejné bludiště s vyznačenou cestou mezi dvěma přesně specifikovanými body. Bludiště bude specifikováno v textovém formátu. Program čte vstupní data ze standardního vstupu a výsledky zapisuje na standardní výstup.

    Specifikace vstupu

    Vstup se skládá ze Z zadání. První řádek vstupu obsahuje právě jedno celé kladné číslo Z. Dále následují jednotlivá zadání. Každé zadání je tvořeno následujícími údaji:

    • První řádek obsahuje dva kladné celé čísla N a M. Tyto čísla definují velikost bludiště. N udává počet řádku a M počet sloupců
    • Dalších N řádků bude obsahovat právě M znaků. Přitom použité znaky mohou být:
      • # - reprezentující stěnu v bludišti. Cesta nemůže vést skrz stěnu ani mimo specifikované bludiště.
      • . - reprezentuje volné pole v bludišti. Cesta může vést skrz toto pole.
      • A - reprezentuje počátek cesty. Tento symbol bude v zadání právě jednou.
      • B - reprezentuje konec cesty. Tento symbol bude v zadání právě jednou.
    Při čtení vstupních dat předpokládejte, že zadání neobsahuje žádné formální ani věcné chyby.

    Specifikace výstupu

    Pro každé zadání bude výstupem N řádků obsahujících M znaků. Symboly ., #, A a B budou zkopírovány na výstup. Budou na stejné pozici jako byly na vstupu. V bludišti bude navíc vyznačená cesta z bodu A do bodu B a to pomocí znaku X. Protože se snažíme ušetřit, bude nalezena cesta optimální. Optimální cesta je taková, kde pro každý bod na cestě platí, že se dotýka jednou ze stran s předchozím a jednou ze stran s následující bodem na cestě. S žádným jiným bodem na cestě se nedotýká. Po každém bludišti bude vytištěn prázdný řádek.

    Příklad vstupu a výstupu

    Vstup:

    2
    5 5
    A.#..
    ..#..
    .....
    ..#..
    ..#.B
    5 10
    A.#.....#.
    ..#...#.#.
    ..#...#.#B
    ..#...#.#.
    ......#...
    
    Výstup:
    AX#..
    .X#..
    .XXX.
    ..#X.
    ..#XB
    
    A.#..XXX#.
    X.#..X#X#.
    X.#..X#X#B
    X.#..X#X#X
    XXXXXX#XXX
    
    

    Nahoru

    Analyzátor obrazu

    Zadání

    Cílem úlohy je analyzovat obraz, na kterém se nachází několik kostek a zjistit, kolik na nich bylo hozeno.
    Obraz kostek je značně zjednodušen. Obsahuje pouze tři typy bodů. Je to pozadí, kostka a tečka na kostce. Tyto body budou zadány pomocí znaků v textovém režimu.
    O dvou bodech řekneme, že jsou sousedy pokud se dotýkají jednou ze stran. Pokud se dotýkají pouze rohy, sousedy nejsou.
    Množina bodů S je souvislá, pokud pro každou dvojici bodů a,b v S platí, že existuje sekvence a1, a2, ... ak v S taková, že a = a1, b = ak, a pro každou dvojici ai a ai+1 platí, že jsou sousedy.
    Maximální spojená oblast pak bude množnina bodů reprezentujících kostku či tečku na kostce, ke které nemůžeme přidat žádny bod (kromě bodů reprezentujících pozadí), který by byl sousedem nějakého bodu, který už v množině je.
    Kostku pak lze definovat jako maximální spojenou oblast složenou z jiných bodů než jsou body reprezentující pozadí. Tečka na kostce pak je maximální oblast složená pouze ze znaků reprezentujících tečku na kostce.

    Specifikace vstupu

    Vstup se skládá z několika obrázků. Každý popis obrázku začíná řádkem, který obsahuje dva čísla X a Y. Ty reprezentují výšku (X) a šířku (Y) obrázku.
    Následujících X řádku obsahuje právě Y znaků. Kde tečka (".") reprezentuje pozadí, hvězdička ("*") reprezentuje bod na kostce a "X" reprezentuje bod na tčece kostky. Každý obrázek bude obsahovat alespoň jednu kostku. Každá kostka bude mít od jedné do šesti teček. Maximální počet kostek je limitován jen velikostí obrázku. Kostky a tečky na nich mohou být různě veliké a mohou mít různé "tvary" (optické disproporce) a jsou brány jako jedna kostka, pokud jsou spojené.
    Vstup je ukončen obrázkem, který má velikost 0 a 0. Ten už nebude zpracováván. Při čtení vstupních dat předpokládejte, že zadání neobsahuje žádné formální ani věcné chyby.

    Specifikace výstupu

    Pro každý obrázek vytiskněnte jeden řádek obsahující text "Hozeno:" následováný hody na kostkách na obrázku. Hody budou setřízeny vzestupně. Jednotlivé hody budou odděleny mezerou.

    Příklad vstupu a výstupu

    Vstup:
    15 30
    ..............................
    ................*.............
    ...*****.......****...........
    ...*X***......**X***..........
    ...*****.....***X**...........
    ...***X*......****............
    ...*****........*.............
    ..............................
    ..............................
    .....***.........******.......
    ....**X****......*X**X*.......
    ...*******.......******.......
    ..****X**........*X**X*.......
    .....***.........******.......
    ..............................
    3 3
    ...
    XXX
    ...
    0 0
    
    Výstup:
    Hozeno: 1 2 2 4
    Hozeno: 1
    
    Nahoru

    Optimální násobení matic

    Zadání

    Pokud násobíme sekvenci matic, můžeme jednotlivá násobení provést v různém pořadí. Výsledek tato skutečnost neovlivní. Pokud nás ovšem zajímá, kolik elementárních ukonů násobení dvou čísel musíme provést, záleží na pořadí uzávorkování. Rozdílné uzávormování může změnit výsledný počet operací. Pokud bychom například měli matice A s rozměrem (10 x 20) a B (20 x 15) budeme muset při násobení A a B vynásobit 10 x 15 x 20 tedy 3000 čísel.
    Pokud bychom měli matice X (5, 10), Y(10, 20), Z(20,35) můžeme provést:

    Specifikace vstupu

    Vstup obsahuje několik zadání. Každé zadání začíná číslem N, které udává počet matic. Na následujících N řádcích jsou dvojice čísel, které udávají rozměr matice. Pokud je počet matic nula jde o konec vstupu. Matice jsou v takovém pořadí, ve kterém je lze násobit. Jejich pořadi se nebude měnit.

    Specifikace výstupu

    Pro každou sekvenci matic vytiskněte jeden řádek, obsahující optimální násobení matic. Matice budou ve výstupu reprezentovány AX, kde x je jejich pořadí ve vstupní sekvenci. Každé násobení dvou matic bude reprezentováno (X x Y), kde X y Y jsou buď přímo matice a nebo další výrazy obsahující násobení matic (viz ukázkový příklad).

    Příklad vstupu a výstupu

    Vstup:

    3
    1 5
    5 20
    20 1
    3
    5 10
    10 20
    20 35
    6
    30 35
    35 15
    15 5
    5 10
    10 20
    20 25
    0
    
    Výstup:
    (A1 x (A2 x A3))
    ((A1 x A2) x A3)
    ((A1 x (A2 x A3)) x ((A4 x A5) x A6
    

    Nahoru

    Maximální suma

    Zadání

    Vaším úkolem bude najít v zadaném čtverci čísel obdelníkovou část, jejíž součet je maximální. Vybraná obdelníková část může být minimálně rozměru 1x2 a maximálně může pojímat všechna zadaná čísla. Pokud například je na vstupu čtverec čísel:

    bude mít nejvetší součet obdelník velikosti 2x3 začínající na druhém řádku vlevo.

    a součet všech jeho čísel bude 15.

    Specifikace vstupu

    Vstup bude začínat číslem N. Toto číslo reprezentuje počet zadání. Každé zadání začíná číslem X. Toto číslo je rozměr čtverce, ve kterém budete hledat maximální sumu. Pak následuje X * X čísel. Jde o čísla umístěná do čtverce. Začínají v levém horním rohu a pokračují zleva doprava a shora dolů.

    Specifikace výstupu

    Vytiskněte maximální součet souvislé obdelníkové oblasti v zadaném čtverci.

    Příklad vstupu a výstupu

    Vstup:

    1
    4
    0 -2 -7  0 9  2 -6  2
    -4  1 -4  1 -1
    8  0 -2
    
    Výstup:
    15
    

    Nahoru

    Puzzle

    Zadání

    Váším cílem je v tomto problému ověřit, zda ze zadaných kostiček jde čí nejde sestavit puzzle. V našem případě mám sadu kostiček. Kostičky jsou všechny stejných rozměru. Kostičky mohou mít na stranách buď výstupek (jut) a nebo dutinu (cavity). Na stranách obrázku jsou kostičky rovné (flat). Příklad ukazuje následující obrázek.

    Na vstupu bude rozměr puzzle a sada kostiček. Vaším úkolem bude vyřešit, zda jde z daných kostiček sestavit puzzle daného rozměru. Ve výsledném obrázku musí platit, že kostičky s rovnou stranou jsou jen na vnějším okraji obrázku. Pro každé dvě sousedící kostičky navíc platí, že pokud se dotýkají stranou má práve jedna z ních výstupek a druhá dutinu. Pro zjednodušení jsou navíc kostičky otočeny stejně, jak budou zadany na vstupu.

    Specifikace vstupu

    Na vstupu je několik zadání. Každé zadání začíná dvěmi čísly X a Y. Pokud jsou oba čísla rovna nule, jde o konec vstupu. Jinak čísla X a Y reprezentují rozměr výsledného obrázku. X i Y budou menší nebo rovny 6. Pro každé zadání pak následuje X * Y řádku. Na každém řádku bude popis jedné kostičky. Popis kostičky jsou 4 znaky z těchto prvků:

    • F - reprezentuje rovnou stranu
    • O - stranu s dutinou (cavity)
    • I - stranu s výstupkem
    Popis ja dán v pořadí: horní, pravá, dolní a levá strana. Pokud bychom například chtěli popsat kostičku na obrázku, její popis by byl: OFFI.

    Specifikace výstupu

    Na výstu vypište ANO v případě, že ze zadaných kostiček lze složit puzzle specifikovaného rozměru a NE v případě, že nejde.

    Příklad vstupu a výstupu

    Vstup:

    3 5
    FOOF
    FOOI
    FOOI
    FOOI
    FFOI
    IOOF
    IOOI
    IOOI
    IOOI
    IFOI
    IOFF
    IOFI
    IOFI
    IOFI
    IFFI
    0 0
    
    Výstup:
    ANO
    

    Nahoru

    Hanojské věže

    Zadání

    Máme tři kolíky označené čísly 1, 2 a 3. Na kolíky budeme navlékat kotouče opatřené dírkou uprostřed. Máme celkem N kotoučů, každý o jiném průměru. Na začátku jsou všechny kotouče na jednom kolíku seřazené od největšího po nejmenší tak, že největší je dole a nejmenší nahoře. Kolíky 2 a 3 jsou prázdné. Vašim úkolem je, přemístit všech N kotoučů na kolík 2 tak, aby byly opět stejně uspořádané. Při přenosu nesmí nikdy nastat situace, kdy by byl větší kotouč položen na menším.

    Více informací o hanojských věžích a algoritmus řešení naleznete zde

    Specifikace vstupu

    Na vstupu je několik bloků. Každý blok mimo obsahuje na řádku počet přemisťovaných kotoučů. Poslední řádek obsahuje nulu.

    Specifikace výstupu

    Výstup bude obsahovat sekvenci přemístění kotoučů z jednoho kolíku na druhý.

    Příklad vstupu a výstupu

    Vstup:
    3
    0
    
    Výstupem programu bude:
    Přenes kotouč z 1 na 2
    Přenes kotouč z 1 na 3
    Přenes kotouč z 2 na 3
    Přenes kotouč z 1 na 2
    Přenes kotouč z 3 na 1
    Přenes kotouč z 3 na 2
    Přenes kotouč z 1 na 2
    
    Nahoru

    Výrazy

    Zadání

    Vytvořte program, který vyčíslí zadaná aritmetický výraz. Výraz bude obsahovat čísla, operátory +, -, *, / a závorky s libovolným množstvím zanoření. Na vstupu program dostane několik aritmetických výrazů. Každý z nich vyčíslí a výsledek vypíše na výstup. V případě, že je zadaný výraz chybný, vypíše "Wrong expression.".

    Příklad vstupu a výstupu

    Vstup:
    (65 - 3 * 5)/(2 + 3)
    ((65 - 3) * 5)/(2 + 3)
    ((64 - 3 * 5)/(2 + 3)
    
    Výstupem programu bude:
    10
    62
    Wrong expression.
    
    Nahoru

    Logika

    Zadání

    Ověřte, zda je formule výrokové logiky splnitelná, je tautologií nebo je kontradikcí.

    Specifikace vstupu

    Na vstupu je číslo N udávající počet zadání. Každé zadání je na samostatném řádku a obsahuje formuli výrokové logiky s následující syntaxí:

    • závorky ( )
    • konjunkce &
    • disjunkce v
    • implikace >
    • ekvivalence =
    • negace ~
    Každý elementární výrok musí být označen písmenem z velké abecedy, tedy A-Z. Pokud bude výroků více, mohou se písmena zdvojit, např. AA, AB, AC, atd. Mezi spojkami, závorkami a značením elementárních výroku bude vždy mezera. Závorky se mohou zanořovat.

    Specifikace výstupu

    Na konzoli se vypíše text "Formule je: " + jedna z následujících kombinací:

    • kontradikce
    • splnitelná
    • tautologie

    Příklad vstupu a výstupu

    Vstup:

    1
    ( A & B ) > ~ ( ~ ( A & B ) )
    
    Výstup:
    Formule je tautologie.
    

    Nahoru

    Křížovka

    Zadání

    Křížovka může být uložena jako matice jedniček a nul. Nula reprezentuje bílý čtverec a jednička černý (bílé jsou pak určeny pro vpisování písmen). Vaším úkolem bude vypsat diagram popisující takto zadanou křížovku. Navíc máte zjisit, kolik slov bude v křížovce použito a očíslovat pole, kde bude začínat některé slovo. Slova budou do křížovky vpisována buď shora dolů, nebo zleva do prava ve vertikálním respektive horizontálním směru. Políčko je očíslováno (jde o pole kde začíná některé slovo) v případě, že jde o bíly čtvereček a:

    1. čtvereček ihned pod daným polem je bíly a těsně nad ním není bíly čtvereček;
    2. čtvereček ihned vpravo je bíly a čtvereček těsně vlevo od něj bílý není.
    Pozice pro slova jsou číslovány od jedničky z leva do prava a shora dolů.

    Ve vykresleném diagramu bude každý čtvereček reprezentován polem 4 x 6 znaků následujícím způsobem:

    ++++++                        ++++++         ++++++
    ++++++                        +nnn +         +    +
    ++++++                        +    +         +    +
    ++++++                        ++++++         ++++++

    Kde první obazec definuje černý čtvereček, další dna bílý čtvereček. Znaky nnn reprezentují vepisovanou pozici. Pokud je černý čtvereček na okraji pole křížovky, nebude vypsán. Více demonstruje ukázkový vstup.

    Specifikace vstupu

    Vstup se skládá z několika zadání. Zadání začíná dvěmi čísly X a Y. Pokud jsou oba tato čísla nulová, jde o konec vstupu. V opačném případě jde o rozměr matice, která popisuje křížovku. Následuje X řádku obsahujících Y jedniček nebo nul. Jedničky a nuly popisují hrací pole křížovky dle pravidel popsaných výše.

    Specifikace výstupu

    Výstupem je diagram popisující křížovku včetně vyznačených pozic pro slova. Jednotlivá zadání budou oddělena prázdným řádkem.

    Příklad vstupu a výstupu

    Vstup:

    6 7
    1 0 0 0 0 1 1
    0 0 1 0 0 0 0
    0 0 0 0 1 0 0
    0 1 0 0 1 1 1
    0 0 0 1 0 0 0
    1 0 0 0 0 0 1
    5 3
    1 0 1
    0 0 0
    1 1 1
    0 0 0
    1 0 1
    0 0
    
    Výstup:
         +++++++++++++++++++++
         +001 +    +002 +003 +
         +    +    +    +    +
    ++++++++++++++++++++++++++++++++++++
    +004 +    ++++++005 +    +006 +007 +
    +    +    ++++++    +    +    +    +
    ++++++++++++++++++++++++++++++++++++
    +008 +    +009 +    +    +010 +    +
    +    +    +    +    +    +    +    +
    +++++++++++++++++++++    +++++++++++
    +    ++++++011 +    +
    +    ++++++    +    +
    ++++++++++++++++++++++++++++++++++++
    +012 +013 +    ++++++014 +015 +    +
    +    +    +    ++++++    +    +    +
    ++++++++++++++++++++++++++++++++++++
         +016 +    +    +    +    +
         +    +    +    +    +    +
         ++++++++++++++++++++++++++
    
         ++++++
         +001 +
         +    +
    ++++++++++++++++
    +002 +    +    +
    +    +    +    +
    ++++++++++++++++
    
    
    ++++++++++++++++
    +003 +004 +    +
    +    +    +    +
    ++++++++++++++++
         +    +
         +    +
         ++++++
    

    Nahoru

    Jednoduchý webový server

    Implementujte jednoduchý webový server. Tento webový server bude umožňovat vracet dokumenty z nějakého předem specifikovaného adresáře. Vrácené dokumenty budou HTML stránky a JPG obrázky. Webový server musí implementovat jen základní funkce. Nemusíte generovat všechny nepovinné elementy hlavičky a můžete reagovat jen na základní příkazy HTTP protokolu. Využijte informací o HTTP protokolu a příkladů dostupných zde.

    Nahoru

    Databáze CD

    Implementujte jednoduchou databázi hudebních CD. Tato tadabáze bude umět uchovávat záznamy o CD které obsahují: název, interpreta, datum vydání, vydavatele a u každého CD i seznam (s blíže nespecifikovaným počtem) písniček. Každá písnička má také název. Počet písniček se u jednotlivých CD může lišit. Data budou uchovávaná v souboru XML. Ovládání bude relizováno pomocí konzole. V této konzoli budete moci zadat operace:
    • append - vloží nový záznam o CD;
    • delete jméno - smaže CD daného jména;
    • list - vypíše CD setříděné podle jména CD.
    • Všechny změny realizované pomocí operací append a delete se projeví ihned v soboru, ve kterém budete uchovávat data.

    Nahoru

    Chat

    Implementujte jednoduchý chat. Tato aplikace bude složena ze dvou částí. Ze serveru a s klienta.
    • Server - bude shromažďovat příspěvky a posílat je všem přihlášeným uživatelům. Uživateli se budou zobrazovat zprávy od ostatních uživatelů.
    • Klient - bude jednoduchá (konzolová či grafická) aplikace, která se po spuštění dotáže na IP adresu (případně port) na které běží server. Připojí se k němu a nyní vše co do napíšete a potvrdíte entrem odešle jako zprávu na server.
    Chat by měl být funkční, nemusí ale implementovat žádné složitější funkce obvyklé v jiných chatech (například dostupných na webu).

    Nahoru

    Síťové šachy

    Implementujte jednoduchou aplikaci, která bude umožňovat hru dvou šachistů pře síť. Aplikace může fungovat v konzoli nebo jako grafická aplikace. Aplikace by měla fungovat následovně.
    1. První uživatel spustí aplikaci. Ta se bude chovat jako server a bude čekat na připojení se druhého uživatele.
    2. Jakmile se připojí druhý uživatel. Mohou zažít hrát šachy.
    3. Postupně se střídají v provádění tahů až do bodu, kdy jeden z nich vyhraje (nemusíte detekovat automaticky). Tahy mohou být zadávány například pomocí souřadnic na šachovnici.

    Nahoru

    Kontrolor souborů

    Implementujte jednoduchou aplikaci, která bude kontrolovat soubory na disku. Půjde o konzolovou aplikaci (může ale mít i GUI). Aplikace bude umožňovat nějakým způsobem uložit strukturu adresářu a souboru na nějaké cestě ve formě XML souboru (strukturu toho souboru navrhněte sami, stjeně jako množství dat, které o souborech a adresářich evidujete). Například si v aplikaci definujte příkaz save s parametrem c:\pokus, který uloži do XML souboru strukturu souborů a podadresářu adresáře pokus. Pak musí být aplikace schopna porovnat dva uložené obrazy a v nějaké formě vypsat změny, ke kterým došlo.

    Nahoru

    Komprese

    Vytvořte program, který bude provádět kompresi a dekompresi dat metodou RLE (Run Length Encoding). Po úspěšné kompresi program vypíše o kolik procent byla data komprimována.

    Metoda RLE spočívá ve shuštěném zápise opakujících se znaků: na výstup se zapíše pouze počet opakování znaku a jeden znak. Zhuštěně se zapisuje posloupnost nejméně 3 opakujících se znaků. Algoritmus lze popsat následovně:
    Ze vstupu jsou čteny znaky. Ty se zapisují na výstup až do okamžiku než se nalezne skupina 3 nebo více opakujících se znaků, nebo přečtený znak má nejvyšší 2 bity nastaveny na 1. Pokud je některá z těchto podmínek splněna, probíhá místo zápisu na výstup inkrementace vnitřního počítadla znaků dokud se znaky opakují, nebo dokud počítadlo nedosáhne hodnoty 63. Pak se hodnotě počítadla nastaví nejvyšší dva bity na 1 a zapíše se tato hodnota na výstup spolu s jedním opakujícím se znakem. Celý algoritmus pokračuje od začátku až do konce vstupního souboru.


    Nahoru

    Vyhledávání souborů

    Implementujte jednoduchou aplikaci, která uloží adresářovou strukturu disku do XML. U všech položek bude mít jméno, datum, velikost (stačí pouze u souborů) a atributy (skrytý || systémový || pouze pro čtení || atd.). zároveň napište konzolovou aplikaci (či formulářovou aplikaci = GUI), která bude umožňovat vyhledávání položek v tomto XML, opět podle následujících parametrů:
    • jméno položky:
    • velikost:
    • datum:
    • atribut (skrytý || systémový || pouze pro čtení || atd.)

    Nahoru

    Piškvorky

    Implementujte jednoduchou aplikaci, která bude umožňovat hru dvou hráčů piškvorek (na 5 prvků v řadě) pře síť. Aplikace může fungovat v konzoli nebo jako grafická aplikace. Aplikace by měla fungovat následovně.
    1. První uživatel spustí aplikaci. Ta se bude chovat jako server a bude čekat na připojení se druhého uživatele.
    2. Jakmile se připojí druhý uživatel. Mohou zažít hrát piškvorky.
    3. Postupně se střídají v provádění tahů až do bodu, kdy jeden z nich vyhraje. Bude implementovaná automatická detekce konce hry (na serveru). Tahy mohou být zadávány například pomocí souřadnic - písmena = řádky, čísla = sloupce.

    Nahoru

    Komprese II

    Vytvořte program, který bude provádět kompresi a dekompresi textu slovníkovou metodou LZW (Lempel-Ziv-Welch). Po úspěšné kompresi program vypíše o kolik procent byla data komprimována.

    Popis algoritmu naleznete: http://en.wikipedia.org/wiki/Lempel-Ziv-Welch. Program bude číst textová data a vytvoří komprimovaný soubor. Tento soubor pak bude umět zpětně dekódovat a vypsat původní text. Formát uložených dat je plně v režii řešitele. Při komprimaci bude vypsán komprimační poměr.


    Nahoru

    Grafický kalkulátor

    Implementujte jednoduchou grafickou kalkulačku. Tato aplikace bude zvládat obvyklé funkce jednoduchého kapesního kalkulátoru. Musí obsahovat minimálně následující funkce.
    • Moznost naklikat pomocí tlačítek reprezentující jednotlivé číslice až 15 místná čísla.
    • Možnost provádět základní matematické operace: *, /, +, -.
    • Možnost uložit nějaké číslo do paměti
    • Možnost odmocnit číslo.
    • Kalkulátor by neměl mít pevnou velikost a mělo by být možné jeho velikost měnit. Poku se mění velikost kalkulátoru, jsou přeuspořádány i prvky uvnitř.
    Nahoru

    Hra miny

    Implementujte obdobu hry Hledání min, která je obvykle součástí Windows. Vaše varianta hry musí implementovat následující funkce.
    • Uživatel bude mít možnost zvolit velikost hracího pole a počet min, které jsou v tomto hracím poli rozmístěny.
    • Na základě těchto informací vygenerujte hrací pole.
    • Umožněte uživateli hledat miny podobně, jako v originální hře Microsoftu.
    Nahoru

    Pexeso

    Implementujte jednoduchou hru Pexeso. Hra bude nemusí podporovat hru více uživatelů. Kartičky v pexesu nemusí být reprezentovány pomocí obrázků, ale stačí nějaká "textová" forma. Pexeso musí implementovat tyto funkce:
    • Uživatel bude mít možnost zvolit velikost hracího pole. Můžete realizovat nějaký mechanismus, který zvolí sudý počet prvků a obdelníkové hrací pole.
    • Na základě těchto informací vygenerujte hrací pole. Karticky mohou být například jednoduchá čísla.
    • Umožněte uživateli hrát pexeso, tedy hledat dvojice karet a nalezené karty odebírat.
    Nahoru

    Práce s tiskárnou

    Implementujte grafickou aplikaci, která bude zobrazovat úlohy, které jsou aktuálně tisknuty na nainstalovaných tiskárnách. Tisk těchto uloh budete moci řídit (pozastavovat spouštět, mazat).
    Informace o tom, jak zísta a ovládat dokumenty v tiskových frontách nalezenete
    zde.
    Kompletní dokumentaci o použitých WMI třídách naleznete zde.
    Nahoru

    Elektronický diář

    Implementujte grafickou aplikaci, která bude realizovat elektronický diář. Alikace bude umožňovat vkládat a zobrazovat záznamy o nějakých událostech (například schůzkách a podobně). Tyto záznamy budou obsahovat čas a nějaký popisek oné události. Aplikace bude dále při ukončení a po zapnutí ukládat respektive načítat tyto záznamy do respektive z XML souboru. Pokud je aplikace aktivní upozorní navíc nějakým vhodným způsobem uživatele 10 minut před konkrétní událostí.
    Nahoru

    Provnávání souboru

    Implementujte jednoduchou aplikaci (s GUI), která bude umožňovat otevření dvou textových souborů do levého a pravého okna aplikace. Po otevření obou souborů se v novém dialogu vypíše editační vzdálenost obou vstupů. Dále v levém a pravém okně vyznačí všechna společná slova obou souborů (například tučně nebo červeně). Při stisku tlačítka na formuláři se s těchto slov vytvoří jeden abecední seznam, spočítá se četnost výskytu každého slova v každém vstupu a vše se uloží ve vhodné struktuře do XML (např. slovo KAKTUS bylo v obou souborech, v prvním 5x a v druhém 10x).
    Nahoru

    Kreslítko

    Vymyslete jednoduché XML, které bude umožňovat zadání uložení elementárních tvarů (kruh, čára, bod, čtverec, trojúhelník, atd.) Ke každému tvaru budou další atributy: Barva okraje, barva výplně, body, velikosti, pozice, atd. Dále vytvořte jednoduchou aplikaci (s GUI), která přečte toto XML a nakreslí vše na obrazovku (namespace System.Drawings). Dále bude v aplikaci tlačítko s funkcí uložení obrázku do souboru na disk.
    Nahoru

    Dohled sítě

    Implementujte program pro jednoduchý dohled nad sítí. Program umožní zadat ip adresy monitorovaných aktivních prvků (PC, router, ...) a pak v zadaném (uživatelsky volitelném) intervalu provádí ping na tyto prvky. Pokud některý z nich na ping neodpoví, program ping okamžitě zopakuje a pokud ani na tento nepříjde odpověď, informuje uživatele o nedostupnosit daného prvek. Obdobnou informaci podá i v případě, že se dříve nedostupný prvek opět objevil. Program dále umožní uložit/načíst zadané prvky do/z XML souboru.
    Příklad, jak v C# odeslat ping najdete
    zde.

    Nahoru

    Painbrush

    Implementujte jednoduchý nástroj pro kreslení obrázků (podobný aplikaci Malování ve Windows). Aplikace bude minilálně umět kreslit barevné, různě široké čáry a bude umět obrázek uložit do souboru. Můžete přidat mazání, kreslení základních geometrických tvarů či podobné funkce.

    Nahoru
    (c) Marek Běhálek, FEI VŠB-TU OstravaDesing: Miroslav Beneš, FEI VŠB-TU Ostrava 18. 5. 2024 13:37:09