mff/13.6.2000/i      

Variant B

Prijímacie pohovory z informatiky

 

 

1.       V n-prvkovom celočíselnom poli a sa nachádzajú rôzne čísla z množiny {1,2,...,n}. Je daná časť programu:

  p:=0;

  for i:=1 to n do

    if i<>a[i] then

      if i=a[a[a[i]]] then p:=p+1;

  writeln(p);

a)       Zistite, čo vypíše tento program, ak sa v poli pre n=8 nachádzajú čísla:

5, 3, 6, 8, 7, 2, 1, 4

b)       Navrhnite také hodnoty do poľa a (pre čo najmenšie n), aby program vypísal číslo 9.

 

2.       V múzeu výpočtovej techniky sme objavili historickú celočíselnú kalkulačku, ktorá až na dve tlačidlá vôbec nefun­gu­je. Jedno tlačidlo má označenie [*2] a po jeho zatlačení sa číslo na dipleji vynásobí 2. Druhé tlačidlo [÷3] vydelí číslo na displeji troma - delenie je celočíselné, t.j. zvyšok po delení sa zanedbá. Na začiatku je na displeji číslo 3. Postupným stláčaním tlačidiel môžeme na displeji dosiahnuť rôzne výsledky.

a)       Je daná nasledovná postupnosť stláčania tlačidiel na tejto kalkulačke
        *2 *2 *2 *2 ÷3 ÷3 *2 *2 *2 *2 *2 ÷3 ÷3 ÷3 *2 *2 *2 ÷3
Zistite, aký výsledok dostaneme ak zadáme túto postupnosť príkazov.

b)       Na displeji je na začiatku číslo 3. Napíšte čo najkratšiu postupnosť operácií (t.j. tlačidiel) takú, aby ako výsledok vzniklo to isté číslo ako v príklade a).

 

3.       V poznámkach jedného programátora sa našiel úryvok programu v zabudnutom programovacom jazyku A--. Podarilo sa nám rozlúštiť tieto pravidlá jazyka - všetky inštrukcie sa skladajú z troch častí:

·         kódu operácie (= priradenie,+,-,*,/ celočíselné delenie,% zvyšok po celočíselnom delení,<> test na nulu, < test na menší ako 0);

·         premennej, s ktorou sa vykoná operácia;

·         parametra (číslo alebo premenná), resp. pre reláciu <> je posledným parametrom návestie skoku.

Niektoré inštrukcie navyše začínajú návestím na skok - číslo, za ktorým je dvojbodka (označuje miesto v programe, na ktoré bude možné skočiť inštrukciou testu na nulu).

Napr. + x 7 znamená, že k x sa pričíta 7, <> x 1 znamená, že ak x sa nerovná 0, tak program pokračuje na návestí 1.

Máte daný nasledujúci program v jazyku A--:

= y 0 1: < x 2 + y 1 = z y + z z - z 1 - x z <> y 1 2: - y 1

a)       Zistite, čo bude v premennej y po skončení programu, ak v premennej x bolo 123.

b)       Zistite, pre akú vstupnú hodnotu x bude mať program po skončení v premennej y číslo 33. Nájdite všetky riešenia.

 

4.       Predpokladajme, že v programovacom jazyku máme definovanú procedúru daj s troma parametrami r, s a h, ktorá do špeciálnej dvojrozmernej tabuľky celých čísel zapíše do r-tého riadku a s-tého stĺpca jedno číslo h. Riadky aj stĺpce číslujeme od 1. V programovacom jazyku už nemáme ďalšiu procedúru na prečítanie hodnoty zo žiadneho políčka.

Napíšte program, ktorý túto tabuľku zaplní rôznymi číslami len s použitím procedúry daj podľa nasledujúceho návodu (číslovanie políčok "po štvorcoch"):

·         v ľavom hornom rohu je 1 - vytvoril sa štvorec veľkosti 1x1;

·         k tomuto "štvorcu" pridáme sprava stĺpec a zospodu riadok tak, aby sa očísloval štvorec 2x2 (nové políčka postupne číslujeme odvrchu a potom vľavo);

·         takto postupne pridávame stĺpce a riadky, kým neočíslujeme celú tabuľku veľkosti NxN.

Zaplňte prvých N riadkov a N stĺpcov tabuľky číslami od 1 do N*N, pričom nesmiete použiť žiadne pomocné polia.

Môžete použiť ľubovoľný programovací jazyk, ktorý ste používali na strednej škole.

ÓAB