Krátké prográmky vzniklé převážně jako domácí úkoly do několika různých škol (shodou okolností většinou jiných než do kterých jsem chodil). Podrobné komentáře jsou samozřejmostí, měly by fungovat jako výukové příklady. Řazeno zhruba od nejjednodušších nahoře po nejsložitější dole.
Minimax - jak najít největší a nejmenší prvek v poli a jejich pozice a jak to pole co nejjednodušším způsobem vzestupně setřídit (metoda bubblesort). Jedna z nejjednodušších úloh vůbec a zároveň jedna z nejčastějších otázek na fórech na konci každého pololetí :-).
Prvočísla - tento krátký program obsahuje funkci, která zjistí, jestli dané číslo je prvočíslo, a funkci, která dané číslo rozloží na součin prvočinitelů (ve formě stringu).
Počítání znaků - miniprográmek, který zjišťuje výskyty písmen ve větě a průběžně je zvýrazňuje v abecedě. Psáno pro vlastní potřebu (takže bez komentářů), ale třeba se to někomu bude hodit. Končí se Escapem, písmena píšou, ostatní klávesy nedělají nic.
Palindrom je text, který je stejný ať ho čtete odpředu nebo odzadu. Tenhle prográmek zjišťuje, jestli to pro zadaný řetězec platí.
Hledání nejdelšího úseku stejných znaků - vstupní posloupnost písmen se dá zadat buď z klávesnice nebo náhodně vygenerovat dvěma různými způsoby. Program v ní najde a podtrhne nejdelší úsek tvořený stejnými znaky. Celé je to zacyklené a zabalené do jednoduchého menu.
Násobení matic a jejich načtení a zápis z a do textového souboru. Celkem tři jednoduché procedury zabalené do malé jednotky.
Modulace - převod řetězce (tedy ordinálních čísel jednotlivých znaků) do dvojkové soustavy a následná ukázka FM a MFM modulace pro zápis na magnetická média. Zní to hrozně složitě, ale ve skutečnosti jde jenom o přepis textu do jiného tvaru.
Kombinace - program, který vypíše všechny kprvkové kombinace z nprvkové množiny čísel. Možných algoritmů existuje víc; tenhle je natolik jednoduchý, že jsem ho dokázal vymyslet :-).
Slovní vyjádření čísel - program pro přepis celého čísla (Longint) na slova (123 → 'sto dvacet tri' apod.).
Operace s trojúhelníky - procedury a funkce pro zadání trojúhelníka z klávesnice pomocí souřadnic vrcholů, jeho vypsání na obrazovku, kontrola sestrojitelnosti, počítání délek stran, hledání středních příček a těžiště, výpočet obvodu a obsahu a test pravoúhlosti. K tomu ještě ukázkový program, který to všechno použije.
Mazání prvků ze spojového seznamu - tuhle trivialitu jsem dostal u zkoušky (mimochodem, moje úplně první zkouška z programování (květen 2007) :-) ). Úkolem bylo vytvořit jednosměrný spojový seznam a vymazat z něj prvek, který se nachází před nějakým jiným prvkem, který je zadán. S obousměrným seznamem by to byla práce na pár řádků, ale jednosměrný se musí píďalkovitě projít od začátku.
Koncentrace komentářů je sice menší než obvykle, ale neměl by být problém se v programu vyznat.
Obousměrné lineární spojové seznamy - šablony procedur, které stačí zkopírovat a upravit na míru konkrétnímu použití. Dělám to tak každou chvíli.
Četnosti znaků - kolikrát se které písmeno v daném textu nachází? O co jednodušší otázka, o to překombinovanější řešení: dá se prohledávat jak přímo zadaný řetězec, tak i textový soubor, četnosti se zobrazují v úhledně zarovnané tabulce a ještě se zvlášť vypíše nejčetnější znak.
Quicksort - prográmek, který předvádí třídění pole čísel algoritmem quicksort. Po každém kroku algoritmu je tříděné pole vypsáno na obrazovku s barevně vyznačenými pomocnými indexy, takže je přesně vidět, jak to vlastně uvnitř funguje.
Program není napsaný úplně nejlíp (místo aby si dělící hodnotu prostě zapamatoval, pamatuje si její index, který musí pracně přesouvat pokaždé, když se prvek pod ním pohne), optimalizace je úkol pro vás :-).
Radixsort - další třídicí algoritmus. Tentokrát jednoduše a bez průběžných výpisů, teorie je popsaná v komentářích.
Ponorka - jednoduchá textová hra o pátrání po potopeném pokladu. Účel je postupným zadáváním kursu a rychlosti ponorky podle údajů sonaru a dalších přístrojů doplout na určené souřadnice. Program obsahuje kromě vlastní hry i nastavení obtížnosti (pět stupňů) a návod s příběhem, vše přístupné z jednoduchého menu. Ve zdrojáku najdete vedle větvení, cyklů a procedur i praktické využití funkcí Sin, Cos a Random, převod úhlů mezi stupni a radiány a výpočet vzdálenosti dvou bodů v rovině. Veškeré vstupy a výstupy jsou řešeny přes Readln, Write a Writeln, takže pro kompilaci nejsou potřeba žádné jednotky.
Vyhodnocování výrazů - jak vypočítat hodnotu matematického výrazu zadaného ve formě textu, např. '2+3.14*4/(1-80)'. Program zvládá sčítání, odčítání, násobení, dělení a závorky. V podstatě jde o zjednodušenou a očesanou verzi algoritmu z jednotky Matyka.
Množiny - materiály pro práci s množinami tvořenými dynamickými poli čísel, zpracované ve formě jednotky. Nevyzkoušeno. Pro praktické využití bych spíš doporučil množiny z jednotky
NFSUP, ale pozor, že zdroják je z větší části zelený (Assembler).
Binární strom - procedury pro práci s binárním stromem: vkládání a mazání prvků, prohledávání stromu, výpis stylem preorder, inorder a postorder. Nevyzkoušeno, ale mělo by to fungovat.
Spojové pole - vytvoření, zrušení a čtení položek dvojrozměrného dynamického pole konstruovaného jako obousměrný spojový seznam. Prakticky nepoužitelná šílenost, ale škola je škola :-).
Logaritmický graf - program pro vykreslení sloupcového grafu. Zajímavé na něm je to, že zvládá jak lineární, tak i logaritmické měřítko (logaritmické se hodí pro současné zobrazení čísel lišících se o mnoho řádů).
Pomocí několika konstant jde jednoduše přenastavit všechno od rozlišení obrazovky přes rozměry a barvy grafu až po data, která se mají zobrazit, a všechno se ve vhodném poměru automaticky přepočítá. Takže teoreticky není problém předělat program na proceduru a tu použít v nějakém jiném programu.
Pro překlad je nutné stáhnout jednotky VESA a Retezce.
Referáty z Mechaniky 1. Jde o animaci pohybu otevřeného kinematického řetězce (dva programy pro dvě různá zadání), dají se z toho vykoukat postupy pro maticovou transformaci souřadnic v rovině. Protože jsem ale zapomněl zazálohovat starší verzi maticových výpočtů z jednotky Matyka, nepůjdou zdrojáky jen tak přeložit, dokud si nedoplníte příslušné procedury pro zadávání a násobení matic o rozměrech 3×3 (což by neměl být problém).
Nejrůznější matematické funkce, komplexní čísla, matice a mnoho dalšího najdete v jednotce Matyka. Obsah je podrobněji popsán v sekci Unitky.