Test z programovania zo šk. roku 1997/98 |
28. apr.1999 |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | súčet | |
max. | 3.5 | 0.5 | 3.3 | 3.5 | 1.6 | 3.0 | 0.6 | 3.0 | 0.5 | 3.0 | 22.5 |
priemer | 0.9 | 0.4 | 0.5 | 1.0 | 1.0 | 1.0 | 0.5 | 1.1 | 0.5 | 1.0 | 7.5 |
1. V 17 prvkovom celočíselnom poli máme uloženú haldu:
33 | 29 | 30 | 25 | 21 | 27 | 22 | 19 | 24 | 10 | 13 | 17 | 20 | 15 | 18 | 14 | 16 |
V jednom kroku triedením haldou (heapsort) sa prvok z koreňa dostáva
medzi utriedené, posledný prvok haldy sa presunie na jeho miesto a pole
sa minimálnymi zmenami stane opäť haldou. Zrealizujete tento jeden krok.
Do nasledovných dvoch tabuliek zapíšte výsledok po prvom a druhom kroku
triedenia:
a) Napíšte, ako sa zmení vstupný všeobecný zoznam
procedure pridaj(var s:strom; x,y:word);
begin
if s=nil then
begin
new(s); s^.info:=0;
s^.syn[0]:=nil; s^.syn[1]:=nil;
s^.syn[2]:=nil;
end;
if x=0 then s^.info:=y
else pridaj(s^.syn[x mod 3],x div 3,y)
end;
a) Nakreslite strom pre N=8.
b) Koľko všetkých a nenulových vrcholov má strom pre N=81?
c) Aká je hĺbka stromu pre N=250?
5. Binárny vyhľadávací strom vznikol postupným pridávaním vrcholov
(začali sme od prázdneho stromu) v tomto poradí:
13 22 16 6 19 9 2 20 7 8 5 1 17 11 4a) Nakreslite tento strom.b) Navrhnite čo najviac rôznych čísel (rôznych aj od čísel v strome), ktoré, keby sme pridali do daného stromu (štandardným algoritmom na pridanie vrchola do BVS), tak by sa zakaždým zväčšila jeho hĺbka.
6. Daná je nasledovná deklarácia neorientovaného grafu a procedúra
prehľadávajúca graf do hĺbky:
var vis:set of 1..n; { množina navštívených vrcholov, na začiatku [] }
procedure dohlbky(i:integer);
var j:integer;
begin
vis:=vis+[i]; write(i,' ');
for j:=1 to n do
if not (j in vis) and (j in graf[i]) then
dohlbky(j);
end;
Zistite, akým vrcholom muselo začínať prehľadávanie do hĺbky, keď skončilo
vo vrchole 8. Napíšte túto postupnosť navštevovaných vrcholov.
Nakreslite príslušný lexikografický strom pre abecedu {a, e, m, u} (na
hrany stromu zapíšte príslušné písmeno, do vrcholov počet výskytov príslušného
podreťazca).
procedure back(i,j:integer);
begin
if (i=N) and (j=M) then inc(p)
else if (i in [1..N]) and (j in [1..M]) and (a[i,j]=0) then
begin
a[i,j]:=1;
back(i-1,j);
back(i+1,j);
back(i,j+1);
a[i,j]:=0;
end;
end;
begin
fillchar(a,N*M,0); a[2,3]:=1; p:=0;
back(1,1);
writeln(p);
end.
9. Daný je binárny strom tohoto tvaru:
function x(s:strom):word;
begin
if s=nil then x:=0
else x:=max(x(s^.syn)+s^.info,x(s^.brat));
end;
a) Zistite, aký výsledok vráti pre daný strom.
b) Z ktorého vrcholu stromu treba začať (pre ktorý podstrom), aby bol
výsledok maximálny?
c) V strome opravte jeden vrchol (číselnú hodnotu) tak, aby výsledok
funkcie pre celý strom bol 41.