Zadání projektu

Obecné zásady

TYTO POZNÁMKY SI OPRAVDU PRECTETE!

U vsech projektu se hodnotí zejména:

Forma výsledného programu:

V resení se nesmí vyskytnout zejména:

Seznam úloh

  1. Rotace matice po spirále
  2. Enigma rotace
  3. Resení soustavy rovnic
  4. Razení lineárního seznamu
  5. Analýza barev
  6. Body na prímce
  7. Stredy kruznic
  8. Obvod mnohouhelnika
  9. Obsah mnohouhelnika
  10. Ctyri roviny
  11. Test obecného sudoku
  12. Vigenerova sifra
  13. Steganografie
  14. Mnoziny

Vstupní data pro maticové operace

Vytvorte program, který ze souboru zadaného prostrednictvím parametru príkazového rádku precte matici celých císel ve formátu:

R S
a11 a12 .... a1S
a21 a22 .... a2S
 .            .
 .            .
aR1 aR2 .... aRS

Na prvním rádku jsou rozmery matice (R - rádky, S - sloupce) a na dalsích rádcích se nachází prvky matice oddelené bílými znaky. Detekujte prípadné chyby ve vstupním souboru (neúplná matice, chybný formát císel).

Zpet na seznam úloh

Rotace matice po spirále

Vytvorte program pro zpracování matic. Specifikace vstupních hodnot viz Vstupní data pro maticové operace.

Provedte rotaci prvku v matici podle krivky naznacené na obrázku. Rohový prvek matice oznacený teckou udává pocet, o kolik pozic se po zadané krivce posune kazdý prvek v matici. Kladný smer rotace je naznacen na obrázku, záporný smer jde opacne. Prvek, který pri rotaci vypadne na konci krivky, se presouvá na zacátek krivky (tedy do výchozího bodu). Výsledkem operace je tedy matice stejných rozmeru, v níz budou jednotlivé prvky posunuty vuci své puvodní pozici po zadané krivce.

Výslednou matici vytisknete na standardní výstup ve stejném formátu, jako vstup (tedy vcete rozmeru).

Spirála

Zpet na seznam úloh

Enigma rotace

Vytvorte program pro zpracování matic. Specifikace vstupních hodnot viz Vstupní data pro maticové operace.

Krome jména souboru bude program rozumet dvema dalsím parametrum: -vertical a -horizontal. Pri zadání parametru -vertical, bude program rotovat jednotlivé sloupce zadané matice o tolik pozic, kolik udává prvek na indexu 0 v tomto sloupci. Prvky, které pri rotaci ze sloupce na jedné strane vypadnou, se objeví na druhé strane. Rotace kladným smerem znamená rotaci ve smeru shora dolu, rotace v záporném smeru znamená rotaci zdola nahoru. Pri zadání parametru -horizontal bude program fungovat podobne, ale pro rádky. Kladný smer znamená rotaci zleva doprava, záporný smer rotaci zprava doleva.

Výslednou matici vytisknete na standardní výstup ve stejném formátu, jako vstup (tedy vcetne rozmeru).

Zpet na seznam úloh

Resení soustavy rovnic

Vytvorte program pro zpracování matic. Specifikace vstupních hodnot viz Vstupní data pro maticové operace.

Nactenou matici povazujte za matici koeficientu soustavy rovnic. Vyreste tuto soustavu a vypíste na výstup vektor resení (nebo hlásení o tom, ze soustava nemá resení, ci jich má nekonecne mnoho, ...). Implemntujte alespon dve ruzné metody resení soustav rovnic. Kazdá z metod se bude zapínat jiným parametrem z príkazové rádky.

Zpet na seznam úloh

Serazení lineárního seznamu

Nactete ze souboru libovolne dlouhou posloupnost anglických slov oddelených bílými znaky (nemusíte uvazovat diakritiku) do lineárního seznamu. Vyberte si libovolnou metodu razení a seznamte se s ní. Seradte nactená data a výsledek ulozte do výstupního souboru tak, ze kazdé slovo bude lezet na samostatném rádku. Zvolenou metodu razení musíte dokonale pochopit, protoze ji posléze budete prezentovat ostatním studentum.

Vstupní i výstupní soubor si uzivatel bude volit pomocí parametru príkazového rádku.

Zpet na seznam úloh

Analýza barev

Napiste program, který bude ze souboru (zadán parametrem príkazového rádku) císt údaje o barvách ve formátech RGB a HSV (bude se prepínat pomocí parametru príkazového rádku), co rádek to jedna barva:

128 128 128
0 50 0
255 128 0
200 200 200
...

Hodnoty jednotlivých barevných slozek budou v intervalu 0 az 255 (nutno otestovat pri ctení). Po prectení údaje o jedné barve, program vypíse do výstupního souboru (zadán parametrem príkazového rádku) slovní popis této barvy. Napríklad takto:

Sedá
Tmave zelená
Oranzová
Svetle sedá
...

Program musí zohlednit citlivost lidského oka na jednotlivé slozky barevného spektra.

Pojmy RGB, HSV a vysvetlení citlivosti lidského oka na barvy lze najít napr. na Wikipedii.

Zpet na seznam úloh

Geometrie - body na prímce

Napiste program, který bude císt ze souboru po trojicích souradnice bodu v prostoru (jeden rádek - devet císel - 3x3 souradnice) a do výstupního souboru bude zapisovat na odpovídající rádky slova "ANO" a "NE" v závislosti na tom, zda vsechny tri body lezí nebo nelezí na stejné prímce. Pracujte s datovým typem double.

Formát vstupního souboru:

0 0 0 1 1 1 20.3 20.3 20.3
0.4 0.6 0.1 1.1 0.6 1.7 3.1 7.2 10.6
...

Formát výstupního souboru:

ANO
NE
...
Zpet na seznam úloh

Stredy kruznice

Napiste program, který bude císt ze souboru po trojicích souradnice bodu na plose (jeden rádek - sest císel - 3x2 souradnice) a do výstupního souboru bude zapisovat na odpovídající rádky souradnice stredu kruznice, která je urcena tremi vstupními souradnicemi. Pokud tri vstupní body nelezí na kruznici, vypiste na výstupní rádek hodnotu konstanty NAN (not a number). Pracujte s hodnotami typu double.

Formát vstupního souboru:

0 0  1 1  20.3 20.3
0 1  1 0  0 -1
...

Formát výstupního souboru:

#
0.00000000e00
...
Zpet na seznam úloh

Obvod mnohoúhelníka

Napiste program, který bude císt ze souboru souradnice bodu na plose a na standardní výstup zapíse obvod obrazce, který je vymezen temito body. Predpokládejte, ze jsou propojeny vzdy následující body a také první a poslední - tímto je vytvoren uzavrený obrazec. Zjistete, zda jde opravdu o mnohoúhelník, tj. jestli se nekteré hrany zadané cesty nekrízí. Pokud nepujde o mnohoúhelník, vytisknete na chybový výstup chybové hlásení (jinak ne). Pracujte s datovým typem double.

Formát vstupního souboru:

0 0  1 1  20.3 20.3 0 1  1 0  0 -1
...

Formát výstupního souboru:

123.567
V zadané ceste se krízí hrany, nejde tudíz o mnohoúhelník.
Zpet na seznam úloh

Obsah konvexního trojúhelníka pomocí triangulace

Vytvorte program, který bude mít stejný vstup, jako predchozí úloha. Program overí, ze zadaný mnohoúhelník je konvexní a pokud ano, provede triangulaci (není potreba hledat minimální triangulaci) a vypocte obsah zadaného útvaru. Výsledek vypiste na standardní výstup. Pracujte s datovým typem double.

Nápoveda

Diagonálou konvexního N-úhelníku nazveme kazdou úsecku spojující dva jeho ruzné vrcholy, které spolu nesousedí na obvodu

Triangulací konvexního N-úhelníku oznacujeme takovou mnozinu jeho neprotínajících se diagonál, které rozdelují plochu N-úhelníku na samé trojúhelníky.

Zpet na seznam úloh

Ctyri roviny

Mejme ctyri roviny v prostoru. Kazdá rovina je zadána tremi body. Zjistete, zda se vsechny tri roviny navzájem protínají a v prípade, ze ano, vypiste souradnice bodu, kde se tri roviny protínají a vypoctete povrch (prípadne i objem) takto vymezeného telesa. Body budou zadávány ze vstupního souboru (nebo stdin) pomocí 3D souradnic:

x1r1 y1r1 z1r1
x2r1 y2r1 z2r1
x3r1 y3r1 z3r1
x1r2 y1r2 z1r2
x2r2 y2r2 z2r2
x3r2 y3r2 z3r2
x1r3 y1r3 z1r3
x2r3 y2r3 z2r3
x3r3 y3r3 z3r3
x1r4 y1r4 z1r4
x2r4 y2r4 z2r4
x3r4 y3r4 z3r4

Výsledek vypisujte na standardní výstup. Pracujte s datovým typem double.

Zpet na seznam úloh

Test resení obecného sudoku

Vytvorte program, který overí, jestli je zadaná matice resením obecného sudoku. Specifikace vstupních hodnot viz Vstupní data pro maticové operace. Výsledek zapiste na standardní výstup.

Klasické sudoku je tvoreno maticí rozmeru 9x9, která je rozdelena na 9 submatic o rozmerech 3x3. Resením klasického sudoku je taková matice, ve které se mohou vyskytovat hodnoty 1 az 9 a to tak, ze se kazdá císlice vyskytuje práve jednou ve svém rádku, ve svém sloupci i ve své submatici.

Hru sudoku lze zobecnit tak, ze prohlásíme klasické sudoku za sudoku rádu 3. Obecné sudoku rádu N (N je prirozené císlo > 0) je tvoreno maticí N2xN2, která je rozdelena na N2 submatic o rozmerech NxN, a ve které se mohou vyskytovat pouze hodnoty z intervalu 1 az N2.

Zpet na seznam úloh

Kryptografie - Viegenerova sifra

Vytvorte program, který zasifruje vstupní soubor tímto zpusobem:

Kazdý znak vstupního souboru se sloucí pomocí operace XOR se znakem klíce na odpovídající pozici. Následne se v celém tomto souboru provede kruhový posuv o N bitu doprava tak, ze bity ze znaku vlevo pretecou do znaku vpravo a bity z posledního znaku pretecou do prvního znaku v souboru.

Program si nacte z príkazového rádku název souboru, který má zasifrovat, název souboru, do kterého se má ulozit výsledek a heslo(klíc). Hodnota N se vypocítá z klíce jako soucet vsech znaku klíce modulo 11. Sifrování se bude zapínat prepínacem -s a desifrování se bude zapínat prepínacem -d. Zamyslete se nad silou tohoto zpusobu sifrování dat. Jakým zpusobem by slo tuto sifru zdolat? (Muzete naprogramovat.)

Zpet na seznam úloh

Kryptografie - Steganografie

Vytvorte program, který provede zasifrování vstupního souboru pomocí steganografie do bitmapového obrázku. Klícem bude samotný bitmapový obrázek.

Jméno sifrovaného souboru a obrázek zadávejte pomocí parametru príkazové rádky. Sifrování se bude zapínat prepínacem -s a desifrování se bude zapínat prepínacem -d. Zamyslete se nad silou tohoto zpusobu sifrování dat.

Zpet na seznam úloh

Mnoziny - bitové operace - opakující se znaky

V jazyce C neexistuje datový typ mnozina jako v Pascalu. Úkolem je implementace abtraktního datového typu mnozina podle Pascalovského vzoru (vyuzití vsech bitu promenné/pole). Tento abstraktní datový typ pouzijte pro resení následující úlohy:

Ve vstupním textovém souboru zjistete, které znaky jsou spolecné pro N-tice po sobe jdoucích rádku. Parametr N zadávejte z príkazové rádky programu. Znaky spolecné pro kazdou N-tici vypisujte do výstupního souboru na zvlástní rádek (pokud N=5 a soubor má 18 rádku, pak ve výstupním souboru budou 4 rádky, odpovídající kazdé z N-tic, kde poslední N-tice bude neúplná).

Zpet na seznam úloh


Poslední modifikace: 15. December 2008. Pokud v tomto dokumentu narazíte na chybu, dejte mi prosím vedet.