usaa20/sk1/README.md

74 lines
2.7 KiB
Markdown
Raw Normal View History

2021-01-17 18:11:04 +00:00
## Zadanie
2021-01-17 17:30:11 +00:00
2021-01-17 18:11:04 +00:00
Virtuálny stroj programovacieho jazyka TUKAFUK sa skladá z dvoch pások. Na jednej páske je napísaný program. Po programovej páske beží programová hlava PH a číta inštrukcie zľava doprava. Stroj má k dispozícii aj dátovú pásku s osobitnou hlavou DH.
Príklad počiatočného stavu virtuálneho stroja TUKAFUK:
```
PH
|
v
+-----+-----+-----+-----+
Program | TUK | INK | DEK | FUK |
+-----+-----+-----+-----+
DH
|
v
+---+---+---+---+
Data | 0 | 0 | 0 | 0 |
+---+---+---+---+
```
Skladá sa z nasledujúcich symbolov:
```
TUK začiatok programu
INK inkrementuj údaj na mieste kde ukazuje DH
DEK dekrementuj údaj na mieste kde ukazuje DH
BREK posuň hlavu DH do prava o jedno miesto
GLEK posuň hlavu DH do ľava o jedno miesto
PUK vypíš 1 byte z miesta kde ukazuje hlava DH
KUK načítaj 1 byte na miesto je ukazuje hlava DH
[ ak je hlava DH nula, posuň PH na zodpovedajúcu značku ]. Inak pokračj ďalej.
] ak hlava nie je nula, pokračuj s PH na zodpovedajúvej značke [. Inak pokračuj ďalej.
FUK koniec programu
iný znak: odeľuje príkazy alebo slúži ako komentár.
```
Vytvorte interpret jazyka TUKAFUK. Program by mal implementovať funkciu:
2021-01-17 17:30:11 +00:00
```C
2021-01-17 18:11:04 +00:00
void run_tukafuk(const char* code);
2021-01-17 17:30:11 +00:00
```
2021-01-17 18:11:04 +00:00
Funkcia preloží vstupný program (zistí adresy skokov) a spustí ho. Preklad programu znamená identifikáciu inštrukcií a zistenie adries pre skok programovej hlavy PH. Pri implementácii zistenia adries PH v programe pre inštrukcie [ a ]. Funkcie getchar() a putchar() použite pre implementáciu inštrukcií PUK a KUK . Pre implementáciu dátovej pásky použite pole znakov, pre implementáciu programovej pásky použite pole spracovaných inštrukcií.
2021-01-17 17:30:11 +00:00
2021-01-17 18:11:04 +00:00
Vytvorte program v jazyku TUKAFUK na výpis celého Vášho mena.
2021-01-17 17:30:11 +00:00
2021-01-17 18:11:04 +00:00
## Stručný opis funkčnosti
2021-01-17 17:30:11 +00:00
2021-01-17 18:11:04 +00:00
Musíme navrhnúť jednoduchý programovací jazyk podobný brainfucku. Načíta zdrojový súbor s príkazmi a potom vykoná rôzne operácie s poľom údajov na základe príkazov, ktoré prečítal
2021-01-17 17:30:11 +00:00
2021-01-17 18:11:04 +00:00
## Stručný opis riešenia
2021-01-17 17:30:11 +00:00
2021-01-17 18:11:04 +00:00
Program číta vstupy slovo po slove (oddelené medzerou) a ak je načítaná slová jednou z funkcií, potom sa zapíše do špeciálneho poľa, ktoré tieto funkcie ukladá. Potom sa operácia zavolá na pole s funkciami, ktoré potom spustí samotnú akciu funkcie.
2021-01-17 17:30:11 +00:00
2021-01-17 18:11:04 +00:00
## Podmienky za ktorých funguje
2021-01-17 17:30:11 +00:00
2021-01-17 18:11:04 +00:00
Existuje neidentifikovaný dôvod, prečo program nikdy neopustí slučku hľadajúcu TUK, ak prvý riadok súboru nie je príkaz TUK alebo prázdny riadok
2021-01-17 17:30:11 +00:00
2021-01-17 18:11:04 +00:00
## Používateľská príručka
2021-01-17 17:30:11 +00:00
2021-01-17 18:11:04 +00:00
Zostavte pomocou:
2021-01-17 17:30:11 +00:00
2021-01-17 18:11:04 +00:00
```
make
2021-01-17 17:30:11 +00:00
```
2021-01-17 18:11:04 +00:00
Spustiť pomocou
2021-01-17 17:30:11 +00:00
```
2021-01-17 18:11:04 +00:00
./program source_file
```