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).