Povinné úlohy k zápočtu I065

Hodnotí se: Při stoprocentním splnění všech kritérií u všech úloh (těchto povinných + úloh zadaných cvičícími) dostanete celkem 40 bodů, jež budou představovat 40 % vašeho hodnocení.

Unita na zásobník

Napište unitu implementující ADT zásobník. Zásobník implementujte jako dynamickou datovou strukturu, unita bude obsahovat procedury (funkce) na přidání prvku do zásobníku, na odebrání prvku ze zásobníku vč. testu, zda-li lze něco odebrat, na nahlédnutí na vrchol zásobníku bez odebrání prvku,na test prázdnosti zásobníku a inicializaci zásobníku.
Procedury a funkce pomenujte nejlépe podle pokynů na přednášce.

Vyhodnocení aritmetického výrazu

Uživatel zadá aritmetický výraz (jako řetězec) s použitím celých čísel, operátorů + - * / a závorek (). Program tento výraz vyhodnotí a na obrazovku napíše výsledek. Pro vyhodnocení využijte převodu z infixoveho do postfixoveho tvaru. Program bude tedy postupovat ve dvou fázích: vstupní (infixový) tvar -> interní postfixový tvar -> výsledek vyhodnocení
Algoritmus viz přednáška.

Unita na frontu

Frontu implementujte jako dynamickou datovou strukturu, unita bude obsahovat procedury (funkce) na přidání prvku do fronty, na odebrání prvku z fronty vč. testu, zda-li lze něco odebrat, na test prázdnosti fronty a inicializaci fronty. (K této jednotce napište i demo prográmek, který bude názorně demonstrovat použití funkcí a procedur z jednotky.

Unita na grafy

Napište jednotku na počítačovou reprezentaci grafů, která bude zajišťovat nejdůležitější operace nad grafy. Jednotka bude pracovat s celkem třemi typy grafů: neorientovaný graf, orientovaný graf a neorientovaný ohodnocený graf.

Unita by měla umět (nespecifikuje-li cvičící jinak):

Ariadna a Minotaurus

Implementujte algoritmus, kterým projdete v bludišti (grafu) libovolným způsobem ze vstupního vrcholu do cílového tak, ze neprojdete žadnou hranou dvakrát a nasledně zpětným průchodem takového tahu vygenerujete takovou posloupnost vrcholů a hran - cestu - při níž do žádného vrcholu nevstoupíte více než jedenkrát.
Předpokládejte neorientovaný graf, síň je reprezentovaná uzlem, chodba hranou, a platí, že vždy existuje cesta ze vstupní síně do síně cílové.

Zjišťování souvislosti grafu (Warshall)

Nalezněte matici souvislosti grafu Warschallovým algoritmem. Na vstupu předpokládejte booleovskou matici sousednosti, na výstupu je rovněž booleovská matice udávající souvislost grafu.

Zjišťování vzdáleností od daného uzlu (Dijkstra)

Nalezněte nejkratší cesty (vzdálenosti) od zadaného uzlu ke všem ostatním použitím Dijkstrova algoritmu. Nalezené cesty vhodným způsobem vizualizujte.

Prohledávání grafu do hloubky (deep-first search)

Pro daný acyklický orientovaný graf G a jeho uzel u jediný, který nemá žádného bezprostředního předchůdce v G, určete vzdálenosti z u do každého uzlu grafu G s využitím prohledávání grafu do hloubky.

Prohledávání grafu do šířky (breadth-first search)

Pro daný acyklický orientovaný graf jeho uzel u jediný, který nemá žádného bezprostředního předchůdce v G, určete vzdálenosti z u do každého uzlu grafu G s využitím prohledávání grafu do šířky.

Výpočet matice vzdáleností (Warshall)

V daném nezáporně ohodnoceném grafu určete pro každou dvojici uzlů vzdálenost z uzlu i do uzlu j.

Obchodní cestující

Je dán seznam měst a pro každou dvojici měst je známa jejich vzdálenost. Určete nejkratší (nejlevnější) cestu, procházející všemi městy daného seznamu. Použijte metody heuristického algoritmu.

Pět čísel

Sestavte algoritmus generujicí pětice čísel (zobrazené do kříže) z čísel 1..8, a to tak, že žádné sousední políčka v kříži neobsahují po sobě jdoucí čísla. Použijte backtracking.

Pozn.: V programu PETCISEL ve skriptech je jedna chyba. Uvedeny program nedava zadne reseni pro x[s]=7 kvuli tomu, ze vsechna (dalsi) x[i]=8. Staci pridat pred radek i:=pred(i); prikaz x[i]:=-1;
Autor opravy: Pavel Moravec

QuickSort

Setřiďte posloupnost 20 čísel vzestupně metodou quicksortu (rekurzivně). Bližší popis zadání viz cvičení.