30.9.1998
Test pre fanatikov
pre 1.ročník I, MI a FI |
1. Máme dané typy:
type cas=record hod,min,sek:byte
end;
veta=record
c:cas;
info:string[30];
end;
Napíšte program, ktorý z textového súboru
VSTUP.TXT načítava riadky (3 celé čísla a nejaký text – navzájom je to
oddelené medzerou) štruktúry veta a zaraďuje ich do jednorozmerného
poľa plan, ktorého prvky sú typu veta
tak, aby toto pole bolo vzostupne utriedené podľa času. Môžete predpokladať,
že vstupný súbor je zadaný korektne, neobsahuje viac ako 1000 riadkov a
žiadny čas sa nevyskytuje viac ako raz. Pri hľadaní miesta, kam zaradiť
novú vetu, použite binárne vyhľadávanie.
2. Daný je binárny
súbor PLAN.DAT, ktorý obsahuje vety typu z predchádzajúceho príkladu. Tieto
sú utriedené vzostupne podľa času. Napíšte program, ktorý zo štandardného
vstupu (klávesnica) načíta množinu čísel z intervalu 0..59 (čísla na vstupe
sú oddelené medzerou) a potom z binárneho súboru vyhodí všetky vety, ktoré
majú položku času sek (sekundy) v zadanej množine
zo vstupu. Nevytvárajte žiadne ďalšie (pomocné) súbory.
3. Daný je textový súbor
PROGRAM.PAS, v ktorom je zapísaný program v Pascale. Súbor môže obsahovať
komentáre (v {} zátvorkách) a aj konštanty znakových reťazcov. Napíšte
program, ktorý zistí, koľkokrát sa v danom textovom súbore nachádza rezervované
slovo END (teda mimo komentárov a znakových reťazcov).
4. Dátová štruktúra rad (front) je
deklarovaná nasledovne:
const max=500;
type prvok = string[80];
queue
= object
constructor init;
procedure serve(var p:prvok); virtual;
procedure append(p:prvok); virtual;
function empty:boolean; virtual;
function full:boolean; virtual;
private
q:array[1..max] of prvok;
hl,poc:0..max;
end;
Metóda append, resp. serve
ukladá na koniec radu, resp. vyberá hodnotu uloženú na začiatku radu. Metódy
full a empty
sa používajú aj v týchto dvoch metódach: metóda append najprv zistí,
či rad nie je plný (full) a ak áno, volá príkaz halt,
inak uloží na koniec radu; podobne metóda serve najprv skontroluje,
či rad nie je prázdny (empty) a ak áno, program končí príkazom halt,
inak vyberie hodnotu zo začiatku radu. Stavová premenná hl obsahuje
index do poľa q, kde začína samotný rad (s poľom pracujeme ako s
cyklickým) a premenná poc obsahuje momentálny počet prvkov radu.
Naprogramujte všetky metódy tejto
triedy. Navrhnite potomka queue1 tejto triedy, ktorý bude obsahovať
len dve opravené metódy full a empty,
nebude používať žiadne privátne stavové premenné a pritom zabezpečí, že
táto novo definovaná trieda nespadne ani pri zaplnenom rade pre append
(metóda full vyčistí rad) ani pri prázdnom pre serve
(metóda empty tam vtedy uloží jeden prvok,
napr. prázdny reťazec).