Kompletní program není nutnou součástí řešení, je však vhodnou formou přesného vyjádření popsaného algoritmu. Neuvedete-li program, musíte algoritmus zapsat jiným dostatečně přesným a detailním způsobem, aby z něj bylo zřejmé, jak si představujete programovou realizaci vašeho algoritmu. Program může být napsán v jazyce Pascal nebo C. Program nemusí zahrnovat celé řešení, je možné vynechat vstupy, výstupy a jednoduché technické operace (např. operace s množinami, implementace jednoduchých geometrických vztahů apod.). Slovní popis řešení musí být v každém případě jasný a srozumitelný i bez toho, že by bylo třeba nahlédnout do samotného programu.
P-III-1
Jsou dány souřadnice n modrých a n červených bodů v rovině. Žádné
tři z těchto bodů neleží na jedné přímce a všechny jsou navzájem
různé.
Napište co nejefektivnější algoritmus, který určí takových n úseček, že každá z nich má jeden koncový bod v červeném bodě a druhý v modrém bodě a žádné dvě úsečky nemají ani jeden společný bod. V případě, že řešení neexistuje, algoritmus o tom vypíše vhodnou zprávu.
Je dán počáteční bod S s celočíselnými souřadnicemi (S.x, S.y) a koncový bod K se souřadnicemi (K.x, K.y). Napište co nejefektivnější algoritmus, který určí schodovitou posloupnost s nejmenším možným počtem bodů takovou, že jejím prvním bodem bude S a posledním bodem K (bude-li tedy mít posloupnost n bodů, potom A[1]=S a A[n]=K). V případě, že takováto posloupnost neexistuje, algoritmus o tom vypíše vhodnou zprávu. Důležitou součástí řešení je důkaz, že množina, kterou váš algoritmus najde, má skutečně nejmenší možný počet bodů.
Vstupy a výstupy celého obvodu, stejně jako vstupy a výstupy jednotlivých hradel, se mohou nacházet v jednom ze dvou logických stavů 0 (false) nebo 1 (true). Výpočet obvodu je taktován. Jestliže jsou vstupy hradla H v čase t v logických stavech x1[t], x2[t], ..., xp[t], výstup hradla H bude v čase t+1 v logickém stavu z[t+1] určeném vstupy a typem hradla. Pokud je na tento výstup napojen například vstup x' hradla H', bude v čase t+1 vstup x' v logickém stavu z[t+1], tzn. logický stav se po spojnicích šíří bez zdržení.
Budeme používat tři typy hradel: NAND, NOR (s alespoň dvěma
vstupy) a NOT (s jedním vstupem). Závislost výstupu těchto tří
typů hradel na vstupech je popsána následující tabulkou (uvádíme
příklady hradel NAND a NOR se dvěma a s třemi vstupy):
x1[t] | x2[t] | z[t+1] |
0 | 0 | 1 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
x1[t] | x2[t] | z[t+1] |
0 | 0 | 1 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 0 |
x[t] | z[t+1] |
0 | 1 |
1 | 0 |
x1[t] | x2[t] | x3[t] | z[t+1] |
0 | 0 | 0 | 1 |
0 | 0 | 1 | 1 |
0 | 1 | 0 | 1 |
0 | 1 | 1 | 1 |
1 | 0 | 0 | 1 |
1 | 0 | 1 | 1 |
1 | 1 | 0 | 1 |
1 | 1 | 1 | 0 |
x1[t] | x2[t] | x3[t] | z[t+1] |
0 | 0 | 0 | 1 |
0 | 0 | 1 | 0 |
0 | 1 | 0 | 0 |
0 | 1 | 1 | 0 |
1 | 0 | 0 | 0 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 0 |
1 | 1 | 1 | 0 |
Vstupem celého obvodu je n-tice logických stavů, v nichž se nacházejí jednotlivé vstupy obvodu I1, I2, ..., In. Logický stav vstupů obvodu se během výpočtu nemění. Hradla postupně reagují na logické stavy svých vstupů a mění podle toho stavy svých výstupů. Samozřejmě, jakmile se v čase t ustálí (tj. dále se nemění) logické stavy vstupů hradla, od okamžiku t+1 se ustálí také jeho výstup. Po konečném čase se ustálí i logické stavy výstupů obvodu. Výsledkem výpočtu je m-tice logických stavů jednotlivých výstupů obvodu O1, O2, ..., Om.
I1 | I2 | O1 | O2 |
0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 |
1 | 0 | 0 | 1 |
1 | 1 | 1 | 1 |