Zapoctovka 8.2.2011

Cílem semináře je seznámit posluchače s jazykem C#, prostředím platformy .NET a tvorbou aplikací s grafickým uživatelským rozhraním. Předpokládají se znalosti objektově orientovaného programování.
Nikto ma nema rad

Zapoctovka 8.2.2011

Příspěvek od Nikto ma nema rad »

Ahoj,

takze dnesne zadanie:

Kód: Vybrat vše

Virtuální zásobníkový stroj
===========================
Napište interpret zásobníkového stroje, jehož specifikace je popsána níže. Aplikace dostane
právě jeden parametr -- cestu k souboru s programem. Tento program načte a začne vykonávat.
Program je ve speciálním assembleru a vejde se celý do paměti (obsahuje nejvýše 2^31-1 instrukcí).
Veškerý vstup i výstup provádějte z/na konzoli.

Stroj pracuje pouze s 32-bit celými čísly se znaménkem. Přetečení a podtečení čísel při operacích ignorujte.
Má jeden číselný registr (akumulátor), potenciálně nekončné pole (jako paměť) indexované od nuly a potenciálně
nekonečný zásobník čísel. Akumulátor i všechny položky paměti jsou na začátku nastaveny na 0 a zásobník je prázdný.

Instrukce stroje jsou v následujícím tvaru:

[label:] [INSTRUCTION [operand]]

Label i operand jsou volitelné (přítomnost operandu závisí na konkrétní instrukci).
Label se skládá pouze z malých a velkých písmen, číslic a podtržítka a je ukončen dvojtečkou.
Kromě toho může label existovat samostatně na řádku bez instrukce.
Operandem může být pouze celé číslo zapsané desítkově, nebo label deklarovaný jinde v programu
(bez dvojtečky). Kromě toho se mohou před, za i mezi jednotlivými částmi instrukce vyskytovat
mezery a tabulátory. Mezi jednotlivými částmi instrukce musí být alespoň jeden bílý znak.

Program používá právě tyto instrukce:
MOV literal - uloží daný literál (číslo v desítkovém zápisu) do akumulátoru
LOAD addr - načte z dané adresy paměti (indexu pole) číslo do akumulátoru
STORE addr - uloží číslo v akumulátoru na danou adresu paměti (index pole)
PUSH - vloží obsah akumulátoru na zásobník
POP - vybere obsah zásobníku a uloží ho do akumulátoru (pokud je zásobník prázdný, skončí program
	s běhovou chybou)
IN - načte do akumulátoru číslo z konzole (číslo je na samostatném řádku)
OUT - vypíše číslo v akumulátoru na konzoli (na samostatný řádek)
ADD - vyjme dvě čísla ze zásobníku, sečte je a výsledek uloží do akumulátoru
	(pokud na zásobníku nejsou alespoň dvě čísla, skončí program s běhovou chybou)
SUB - vyjme dvě čísla ze zásobníku, odečte je (v takovém pořadí, jak byla čísla na zásobník uložena)
	a výsledek uloží do akumulátoru (pokud na zásobníku nejsou alespoň dvě čísla, skončí program s běhovou chybou)
MUL - vyjme dvě čísla ze zásobníku, vynásobí je a výsledek uloží do akumulátoru
	(pokud na zásobníku nejsou alespoň dvě čísla, skončí program s běhovou chybou)
JMP label - povede nepodmíněný skok na daný label
	(label musí existovat, jinak měla být nahlášena chyba při načítání)
JMPCOND label - pokud je v akumulátoru nula, provede skok na daný label, jinak pokračuje dál
	(label musí existovat, jinak měla být nahlášena chyba při načítání)
HALT - ukončí běh programu

Program začíná na prvním řádku a končí, pokud doběhne "za konec" souboru nebo instrukcí HALT.
Kromě instrukcí můžou být ve vstupním souboru prázdné řádky (tj. řádky složené pouze z bílých znaků)
a také komentáře. Komentáře začínají znakem # a končí zalomením řádku (jinak se mohou vyskytovat jak
samostatně, tak na řádku za instrukcí).

Při oznamování chyb (ať již při načítání nebo běhových) je potřeba uvést číslo řádku zdrojového kódu,
kde chyba nastala a chybu krátce popsat.

Program musí být rozumně efektivní. Provedení instrukce musí trvat konstantně dlouho
(až na uživatelský vstup), načítání by mělo být jednoprůchodové (z hlediska čtení souboru).
Este upresnim:
-komentare boli klasicke jednoriadkove a mohli sa vyskytovat na lubovolnom mieste, ziadne pravidla typu: medzi instrukciou a # musi byt medzera neplatili
- odchytit trebalo vsetky vynimky a vsetky problemy ktore mohli nastat - kontroloval to celkom prisne

Boli sme tam len 4 ci 5 a ja som odchadzal po 2,5 hodinach ako prvy uspesny, takze uspesnost neviem.
Odpovědět

Zpět na „NPRG035 Jazyk C# a platforma .NET“