Projekty:

Pozn. Tento text není závazný, student si může vytvořit vlastní téma. Podmínkou je používání polí, řídicích struktur (rozhodování, cykly), funkcí a rozdělení kódu do souborů projektu.
Vzhledem k nedostatku prostoru při přednáškách se se zjednodušením těchto témat počítá.

1. Morseovka

Program slouží k převodu z latinky (znaky 'A'..'Z', 'a'..'z', '0'..'9') do morseovky a zpět. Obrazovka je rozdělena na 3 oblasti. Horní oblast slouží ke vstupu od uživatele, prostřední pro výstup v morseovce, spodní k výstupu v latince.
Po zadání vstupu program otestuje, o jaký vstup se jedná (morseovka nebo latinka, lze rozhodnout podle prvního znaku), pak provede převod a výsledek přidá na konec jednoho ze spodních oken (podle toho, zda jde o morseovku nebo latinku). Dřívější výstupy tedy zůstávají viditelné, nic se nepřepíše. Pouze při větším množství řetězců se posunou nahoru a ten nejvyšší (tedy nejstarší) zmizí.
Slova jsou v morseovce oddělena // (tak se tedy přepíše mezera nebo řada mezer), neznámý znak ?.
Konec programu: klávesa ESC.

2. Deformace obrazu (graf. režim)

Program vykreslí do stanovené obdélníkové oblasti (např. čtvrtina obrazovky umístěná doprostřed zobrazitelné plochy) různé tvary (obdélníky, kruhy, vyplněné i prázdné, úsečky, ...) v různých barvách.
Podle zvolené funkce provede deformaci obrazu, tedy např. při zvolené funkci (x / 2 + 3, sin(y)) přesune barvu z bodu [x,y] do bodu [x / 2 + 3, sin(y)].
Transformaci je vhodné provádět takto:
  1. máme matici s rozměry stejnými, jako je obdélníková oblast, se kterou pracujeme, všechny prvky jsou inicializovány hodnotou 0 (černá barva),
  2. postupně procházíme všechny body vymezené oblasti, dosadíme do funkce, a pokud výsledný bod není mimo tuto oblast, barvu původního bodu NA OBRAZOVCE uložíme DO MATICE,
  3. po probrání všech bodů vykreslí podle matice celou zpracovávanou oblast.

3. Kalkulačka (možné v text. režimu s využitím conio.h)

Zobrazí se jednoduchá kalkulačka (včetně tlačítek a displeje, ale pouze základní - číslice, zákl. aritmetické operátory, C, ...). Pracuje s hodnotami typu long, všechny operace budou celočíselné.
Uživatel zadává hodnoty buď přímo z klávesnice, nebo se po tlačítkách pohybuje urč. klávesami (např. TAB a Shift+TAB pro zpětný chod).
Kalkulačka pracuje podobně jako jiné takovéto programy vestavěné v operačních systémech, navíc dokáže uschovat všechny zadané hodnoty a zpět je vyvolat. Je tedy nutné pole (pokud možno dynamické, kdyby bylo statické, je nutné hlídat meze a po zadání prvku, který se již nevejde, odstranit první a všechny následující o 1 místo posunout, aby se vešel) prvků typu long. Jeden prvek pole bude "aktivní", tento prvek bude možné načíst na displej pomocí urč. klávesy (a příp. dále upravovat). Pozici aktivního prvku lze měnit pomocí kláves (např. šipky), tedy tímto způsobem se v poli pohybujeme. Prvky pole mohou být zobrazeny někde na obrazovce včetně vyznačení aktivního prvku.
Je nutné zobrazit nápovědu na spodním okraji obrazovky (význam kláves apod.).
Konec programu: klávesa ESC.

4. Převod čísla na římské číslice a zpět

Prostředí podobné jako u projektu č. 1 (3 oblasti na obrazovce, první pro vstup, druhá pro výstup v římských číslicích, třetí pro výstup v arabských číslicích).
Po zadání vstupu program otestuje, o jaký vstup se jedná (římské nebo arabské číslice, lze rozhodnout podle prvního znaku), pak provede převod a výsledek přidá na konec jednoho ze spodních oken (podle toho, zda jde o římské nebo arabské číslice). Dřívější výstupy tedy zůstávají viditelné, nic se nepřepíše. Pouze při větším množství řetězců se posunou nahoru a ten nejvyšší (tedy nejstarší) zmizí.
Je nutné ošetřit chyby na vstupu.
Konec programu: klávesa ESC.

5. Zpracování dvou metod třídění v poli

Jedna metoda je QuickSort, druhá dle výběru.
Projekt bude obsahovat jednu knihovnu pro QuickSort, druhou pro další metodu a pak testovací .C soubor, který bude tyto knihovny využívat a např. umožní srovnání rychlosti algoritmů pro stejná data.
Metody budou pracovat se statickým polem čísel a statickým polem řetězců o délce 50 (stanovte pomocí symbolické konstanty - makra, aby bylo možné tuto hodnotu měnit, rovněž tuto symbolickou konstantu používejte při výpočtu).
Součástí knihoven budou funkce na porovnávání a vyměňování řetězců (příp. i čísel, tedy obecně prvků pole). Každá knihovna tedy bude obsahovat dvě verze metody, jednu pro pole čísel, druhou pro pole řetězců. Nebo lze napsat pouze jednu metodu s tím, že parametrem příslušné funkce bude pointer na příslušné funkce porovnávání a třídění.
Zdroje pro metody třídění: dokument Vyhledávání a třídění, Wirth N. Algoritmy a štruktůry údajov.

6. Převody mezi číselnými soustavami

Program bude převádět čísla mezi binární, dekadickou a hexadecimální soustavou. Projekt obsahuje:
  1. Prev.c soubor s funkcemi pro převody mezi soustavami. Nejvhodnější je zvolit jednu soustavu (např. binární), do které a z které je převod nejjednodušší, pak bude knihovna obsahovat pouze funkce pro převod z jakékoliv do zvolené soustavy a ze zvolené do jakékoliv další soustavy.
  2. Prvním parametrem funkcí bude vstupní řetězec znaků, druhým výstupní řetězec (nutné mít pointer na řetězec, aby se výsledek neztratil).
  3. Prev.h hlavičkový soubor k souboru Prev.c.
  4. Test.c testovací soubor prověřující funkce obsažené v Prev.c. Bude obsahovat rozhraní. Např. zobrazí dvě tabulky, první znamená určení vstupní soustavy, druhá určení výstupní soustavy. V každé je seznam soustav, uživatel pomocí kláves (např. TAB pro pohyb po soustavách, ENTER enbo mezerník pro označení zvolené) vybere nejdřív vstupní a pak výstupní soustavu. Pak zadá řetězec, který se má převést, provede se kontrola vstupu (zda patří do určené soustavy) a výpočet, zobrazí se výsledek.