Moje poznámky:
Jeden z testů byl cyklus. Mým problémem bylo odkazování se na správný řádek, ale už jsem ho poté nevyhodnotil, šel jsem na další.
Z komentáře Zavorala doporučuji nezapomínat const reference a místo deteti ifů pro rozlišení instrukce použít enum.
Pro reprezentaci proměnných se hodí buď polymorfismus nebo type std::variant.
Z recodexu:
Sémantika
Název proměnné v našem dynamickém jazyce nesmí obsahovat bílé znaky, veškeré ostatní znaky jsou dovolené (např. i včetně cifer). Hodnoty proměnných mohou nabývat dvou různých typů: celá čísla a řetězce. Přiřazením nové hodnoty do existující proměnné tuto hodnotu přepíšeme, čímž můžeme změnit i její typ. Pokud chceme získat hodnotu proměnné, do které ještě nebyla žádná hodnota přiřazená, získáme prázdný řetězec (""). Kontext může vyžadovat konverzi proměnné na druhý z typů, ta je vždy možná:
Celé číslo
Může obsahovat kladná i záporná čísla, pro rozsah hodnot postačí datový typ int.
Konverze na řetězec je standardní, tj. odpovídá výpisu hodnoty pomocí operátoru << do streamu.
Řetězec
Obsahuje hodnotu std::string, nesmí obsahovat bílé znaky (pro zjednodušení parsování, viz níže).
Pokud řetězec začíná platnou číselnou hodnotou typu int, konverze na celé číslo vrací tuto hodnotu, v opačném případě hodnotu 0. Např.: "-42abc" -> -42, "abc5" -> 0.
Vstup
Vstupní soubor
Program dostane jako argument příkazové řádky název právě jednoho zdrojového souboru, který má načíst a spustit. Každý řádek obsahuje nanejvýše jednu instrukci, ta se může skládat ze dvou a více slov oddělených bílými znaky. Můžeme předpokládat, že soubor vždy existuje a je ve správném formátu.
Instrukce
Program vykonává řádky s jednotlivými instrukcemi postupně odshora dolů, řádky neobsahující instrukce přeskakuje, při dosažení konce souboru se zastaví. Instrukce skoku (goto, brt a brf) však umožňují nastavit číslo příštího řádku ke zpracování. Řádky se číslují od 1, t.j. stejně jako v textovém editoru. Skoky mohou být zpětné i dopředné, zpravidla je tedy nutné napřed všechny řádky souboru načíst a teprve později program vykonat. Na začátku programu v sobě nemá žádná proměnná uloženou žádnou hodnotu. Typy instrukcí:
stconst_i trg i uloží celočíselnou konstantu i do proměnné trg.
stconst_s trg s uloží řetězec s do proměnné trg. Řetězec není ohraničený uvozovkami a nesmí obsahovat bílé znaky.
stadd trg a b konvertuje na celá čísla (pokud je to nutné) proměnné a a b, sečte je a výsledek uloží do proměnné trg.
stmul trg a b konvertuje na celá čísla (pokud je to nutné) proměnné a a b, vynásobí je a výsledek uloží do proměnné trg.
stcat trg a b konvertuje na řetězce (pokud je to nutné) proměnné a a b, zkonkatenuje je (tj. napojí za sebe do jednoho řetězce) a výsledek uloží do proměnné trg.
stgt trg a b konvertuje na celá čísla (pokud je to nutné) proměnné a a b, do proměnné trg uloží hodnotu 1 pokud a > b, jinak hodnotu 0.
stlt trg a b konvertuje na celá čísla (pokud je to nutné) proměnné a a b, do proměnné trg uloží hodnotu 1 pokud a < b, jinak hodnotu 0.
print v vypíše hodnotu proměnné v na standardní výstup a odřádkuje. Pokud je v řetězec, vypíše kolem hodnoty dvojité uvozovky (viz příklad níže).
goto line nastaví jako číslo příštího řádku ke zpracování hodnotu line.
brt line cond konvertuje na celé číslo (pokud je to nutné) proměnnou cond a nastaví jako číslo příštího řádku ke zpracování hodnotu line, pokud cond není rovno 0.
brf line cond konvertuje na celé číslo (pokud je to nutné) proměnnou cond a nastaví jako číslo příštího řádku ke zpracování hodnotu line, pokud cond je rovno 0.
Příklad
Vstup (basic.in)
print unknown
stconst_i a 40
print a
stconst_i b 2
print b
stconst_i c -10
print c
stadd aplusb a b
print aplusb
stcat acatb a b
print acatb
stmul acatbmulb acatb b
print acatbmulb
stconst_s s1 Hello_World!
print s1
stconst_s s2 ByeWorld
print s2
stcat s1cats2 s1 s2
stcat acats2 a s2
stcat s1catb s1 b
print s1cats2
print acats2
print s1catb
stadd s1pluss2 s1 s2
stadd apluss2 a s2
stadd s1plusa s1 a
stadd bplusacats2 b acats2
print s1pluss2
print apluss2
print s1plusa
print bplusacats2
goto 43
stconst_s wrong Wrong!
print wrong
goto 49
stlt cond a b
brt 39 cond
stgt cond a b
brf 39 cond
Výstup (basic.out)
""
40
2
-10
42
"402"
804
"Hello_World!"
"ByeWorld"
"Hello_World!ByeWorld"
"40ByeWorld"
"Hello_World!2"
0
40
40
42
Hodnocení
Při hodnocení bude kladen důraz zejména na funkčnost řešení a jeho čitelnost, není tedy nutné ani doporučené kód optimalizovat pro výkon na úkor přehlednosti.
V úloze je vhodné využívat principy OOP (např. běhový polymorfismus pro hodnoty proměnných), jeho správným použitím je možné si ušetřit práci a zároveň napomoci přehlednosti kódu. Pro plný počet bodů však není nutné jej příliš protlačovat na úkor rozumné velikosti kódu (např. není nutné každou instrukci naprogramovat jako třídu).
Zkouška 19.1. 2021
Základní kurs objektově orientovaného programování v C++. Třídy a objekty, zapouzdření, metody, plymorfismus. Abstraktní datové typy, přetěžování. Kontejnery, iterátory, algoritmy. Šablony, generické programování, kompilační polymorfismus. Výjimky. Bezpečné a přenositelné programování, vazby na OS.
-
- Matfyz(ák|ačka) level I
- Příspěvky: 3
- Registrován: 24. 1. 2019 20:06
- Typ studia: Informatika Bc.
- Login do SIS: cahalu
Zkouška 19.1. 2021
- Přílohy
-
- nprg041test20210119.cz.pdf
- (273.32 KiB) Staženo 312 x
Zpět na „NPRG041 Programování v C++“
Přejít na
- Aktuální informace
- ↳ Studijní oddělení
- ↳ Knihovna
- ↳ Studentská komora Akademického senátu (SKAS)
- ↳ Volby na ak. rok 2013/2014
- Všichni
- ↳ Práce
- ↳ Klubovna
- ↳ Toto fórum
- ↳ Státní závěrečná zkouška
- ↳ Bakalářské SZZ
- ↳ Magisterské SZZ
- ↳ Info for foreign students
- ↳ Akce
- ↳ Fotbalový turnaj 2008
- Informatika ZS
- ↳ Výuka ZS 1. ročník
- ↳ DMI002 Diskrétní matematika
- ↳ 2007
- ↳ 2006
- ↳ 2005
- ↳ 2004
- ↳ MAI054 Matematická analýza I
- ↳ 2007
- ↳ 2006
- ↳ 2005
- ↳ 2004
- ↳ MAI057 Lineární algebra I
- ↳ 2006
- ↳ 2005
- ↳ 2004
- ↳ PRG030 Programování I
- ↳ 2006
- ↳ 2005
- ↳ 2004
- ↳ SWI120 Principy počítačů a operačních systémů
- ↳ SWI087 Principy počítačů
- ↳ Ostatní
- ↳ DMI051 Úvod do řešení problémů kombinatorických, mat. i jiných (IPS) II
- ↳ Výuka ZS 2. ročník
- ↳ MAI056 Matematická analýza III
- ↳ 2006
- ↳ 2005
- ↳ 2004
- ↳ OFY016 Fyzika pro nefyziky I - Svět kolem nás
- ↳ SWI089 Ochrana informace I
- ↳ SWI096 Internet
- ↳ TIN061 Algoritmy a datové struktury II
- ↳ 2006
- ↳ 2005
- ↳ 2004
- ↳ Ostatní
- ↳ Aplikační software
- ↳ NPRG035 Jazyk C# a platforma .NET
- ↳ NPRG041 Programování v C++
- ↳ AIL062 Výroková a predikátová logika
- ↳ 2007
- ↳ 2006
- ↳ 2005
- ↳ PGR013 Java
- ↳ MAI059 Pravděpodobnost a statistika
- ↳ Výuka ZS 3. ročník
- ↳ SWI099 Administrace Systemu Windows
- ↳ SWI015 Programování v Unixu
- ↳ SWI098 Principy překladačů
- ↳ 2006
- ↳ Ostatní
- ↳ DBI007 Organizace a zpracování dat I
- ↳ 2006
- ↳ MAI062 Algebra I
- ↳ PGR003 Počítačová grafika I
- ↳ SWI090 Počítačové sítě I
- ↳ Výuka ZS NMgr.
- ↳ TIN066 Datové struktury I
- ↳ TIN062 Složitost I
- ↳ TIN064 Vyčíslitelnost I
- ↳ MAI060 Pravděpodobnostní metody
- ↳ SWI004 Operační systémy
- ↳ SWI106 Administrace Unixu
- ↳ Ostatní
- ↳ NTIN090 Základy složitosti a vyčíslitelnosti
- ↳ OPT042 Programování s omezujícími podmínkami
- ↳ AIL002 Neuronové sítě
- ↳ AIL025 Evoluční algoritmy I
- ↳ AIL069 Umělá inteligence I
- ↳ NDBI001 Dotazovací jazyky I
- ↳ TIN070 Testování software
- ↳ NDBI027 Datové sklady a analytické metody pro Business Intelligence
- ↳ NDBI034 Vyhledávání multimediálního obsahu na webu
- ↳ NPRG023 Softwarový projekt
- Informatika LS
- ↳ Výuka LS 1. ročník
- ↳ MAI055 Matematická analýza II
- ↳ 2006
- ↳ 2005
- ↳ 2004
- ↳ MAI058 Lineární algebra II
- ↳ 2006
- ↳ 2005
- ↳ 2004
- ↳ PRG031 Programování II
- ↳ 2006
- ↳ 2005
- ↳ 2004
- ↳ TIN060 Algoritmy a datové struktury I
- ↳ 2006
- ↳ 2005
- ↳ 2004
- ↳ SWI095 Úvod do UNIXu
- ↳ 2006
- ↳ 2005
- ↳ 2004
- ↳ Ostatní
- ↳ Výuka LS 2. ročník
- ↳ SWI071 Ochrana informace II
- ↳ TIN071 Automaty a gramatiky
- ↳ PRG033 Ročníkový projekt - specifikace
- ↳ DMI011 Kombinatorika a grafy I
- ↳ DBI025 Databázové systémy
- ↳ Ostatní
- ↳ SWI036 Programování pro Windows I & II
- ↳ SWI096 Internet
- ↳ PRG005 Neprocedurální programování
- ↳ 2006
- ↳ 2005
- ↳ 2004
- ↳ NSWI143 Architektura počítačů
- ↳ Výuka LS 3. ročník
- ↳ Ostatní
- ↳ PGR004 Počítačová grafika II
- ↳ PRG036 Technologie XML
- ↳ SZZ026 Bakalářská práce
- ↳ PRG003 Metodika programování a filozofie programovacích jazyků
- ↳ MAI064 Matematické struktury
- ↳ MAI042 Numerická matematika
- ↳ SWI021 Počítačové sítě II
- ↳ SWI045 Rodina protokolů TCP/IP
- ↳ NPRG038 Pokročilé programování pro .NET
- ↳ Výuka LS NMgr.
- ↳ SWI109 Konstrukce překladačů
- ↳ NPRG042 Programování v paralelním prostředí
- ↳ SWI117 Technologie vývoje webových aplikací
- ↳ SWI026 Softwarové inženýrství
- ↳ MAI061 Metody matematické statistiky
- ↳ I1 Ostatní Teoretická informatika
- ↳ I2 Ostatní Softwarové systémy
- ↳ I3 Ostatní Matematická lingvistika
- ↳ I4 Ostatní Diskrétní modely a algoritmy
- ↳ AIL026 Evoluční algoritmy II
- ↳ AIL070 Umělá inteligence II
- ↳ NDBI010 Dokumentografické informační systémy
- ↳ NDBI023 Dobývání znalostí
- ↳ NDBI016 Transakce
- ↳ NDBI006 Dotazovací jazyky II
- ↳ NAIL029 Strojové učení
- Matematika
- ↳ Výuka LS 1. ročník
- ↳ Lineární algebra 2
- ↳ Programování 2
- ↳ Matematická analýza 1b
- ↳ Volitelné předměty
- ↳ Výuka LS 2. ročník
- ↳ Pravděpodobnost a statistika
- ↳ Teorie Míry a integrálu II
- ↳ Algebra II
- ↳ Matematická analýza 2b
- ↳ Ostatní
- ↳ Výuka LS 3. ročník
- ↳ Předměty numeriky
- ↳ Úvod do funcionální analýzy
- ↳ Funkcionální analýza I
- ↳ Vybrané partie z funkcionální analýzy
- ↳ Náhodné procesy 2
- ↳ Matematická statistika 2
- ↳ Teorie pravděpodobnosti 2
- ↳ Matematická ekonomie
- ↳ Ostatní
- ↳ LS - Předměty MMIB a pokročilé Algebry
- ↳ Všeobecná diskuse
- ↳ Počítačová algebra
- ↳ Teorie čísel a RSA
- ↳ Aplikovaná kryptografie II
- ↳ Standardy v kryptografii
- ↳ Kryptoanalytické útoky
- ↳ Aplikace bezpečnostních mechanismů
- ↳ Kvantové a DNA počítače
- ↳ Faktorizace velkých čísel
- ↳ Algebraická geometrie v kladné charakteristice
- ↳ Výuka ZS 1. ročník
- ↳ MAA001 Matematická analýza 1a
- ↳ PRM044 Programování I
- ↳ MAA079 Proseminář z kalkulu 1a
- ↳ DMA005 Diskrétní matematika
- ↳ ALG001 Lineární algebra a geometrie I
- ↳ Ostatní
- ↳ Volitelné předměty
- ↳ Výuka ZS 2. ročník
- ↳ MIB
- ↳ Matematická analýza 2a
- ↳ Teorie míry a integrálu
- ↳ Numerika
- ↳ Algebra
- ↳ Předměty finanční matematiky
- ↳ Ostatní
- ↳ Výuka ZS 3. ročník
- ↳ Matematická statistika
- ↳ Teorie pravděpodobnosti
- ↳ Náhodné procesy
- ↳ Optimalizace
- ↳ Předměty numeriky
- ↳ Předměty finanční matematiky
- ↳ Komplexní analýza
- ↳ Funcionální analýza
- ↳ Ostatní
- ↳ ZS - předměty MMIB a pokročilé Algebry
- ↳ Úvod do algebry
- ↳ Složitost pro kryptografii
- ↳ Samoopravné kódy
- ↳ Teoretická kryptografie
- ↳ Aplikovaná kryptografie I
- ↳ Datové a procesní modely
- ↳ Eliptické křivky
- ↳ Členění kryptografických standardů
- ↳ Kryptografické protokoly
- ↳ Úvod do teorie grup
- ↳ Právní aspekty zabezpečení dat
- ↳ Komutativní okruhy
- Fyzika ZS
- ↳ Výuka ZS 1. ročník
- ↳ OFY067 Fyzika v experimentech I
- ↳ MAF027 Lineární algebra I
- ↳ OFY021 Fyzika I (mechanika a molekulová fyzika)
- ↳ OFY056 Programování pro fyziky
- ↳ MAF033 Matematická analýza I
- Oborový mix aktuální
- ↳ Anglický jazyk
- ↳ Tělesná výchova
- ↳ Granty GAUK
- Odkazy
- ↳ Wiki
- ↳ SKAS
- ↳ Spolek Matfyzák
- Matematika Archiv
- ↳ Výuka LS 2006/2007 3. ročník
- ↳ Předměty numeriky
- ↳ Úvod do funcionální analýzy
- ↳ Náhodné procesy 2
- ↳ Matematická statistika 2
- ↳ Teorie pravděpodobnosti 2
- ↳ Matematická ekonomie
- ↳ Výuka LS 2006/2007 2. ročník
- ↳ Pravděpodobnost a statistika
- ↳ Teorie Míry a integrálu II
- ↳ Angličtina
- ↳ Algebra II
- ↳ Matematická analýza 2b
- ↳ Ostatní
- ↳ Výuka LS 2006/2007 1. ročník
- ↳ Volitelné předměty
- ↳ Lineární algebra 2
- ↳ Programování 2
- ↳ Matematická analýza 1b
- Zrušené předměty
- ↳ SWI087 Principy počítačů
- ↳ SWI120 Principy počítačů a operačních systémů
- ↳ 2006
- ↳ 2005
- ↳ 2004
- ↳ PRG029 Programování v C++
- ↳ 2006
- ↳ 2005
- ↳ 2004
- ↳ PRG032 Objektově orientované programování
- ↳ 2006
- ↳ 2005
- ↳ 2004
- ↳ SWI097 Základy operačních systémů
- ↳ NDBI003 Organizace a zpracování dat II
- Roztřídit (resty)
- ↳ Výuka ZS 2005/06 2. ročník
- ↳ Předměty informační bezpečnosti
- ↳ Předměty finanční matematiky
- ↳ Teorie míry a integrálu
- ↳ Numerika
- ↳ Algebra
- ↳ Analýza/kalkulus
- ↳ Matematika obecně
- ↳ Výuka LS 2005/06 2.ročník
- ↳ Základy matematického modelování
- ↳ Finanční management
- ↳ Úvod do optimalizace
- ↳ Numerika
- ↳ Kalkulus
- ↳ Angličtina
- ↳ Diferenciální geometrie
- ↳ Pravděpodobnost a statistika
- ↳ Teorie míry a integrálu II
- ↳ Algebra II
- ↳ Analýza 2b