29.Prednaska/Cvicenie0: Rozdiel medzi revíziami

Z Pascal
Prejsť na: navigácia, hľadanie
Riadok 26: Riadok 26:
 
     Koren: TVrchol;
 
     Koren: TVrchol;
 
   end;
 
   end;
:* ručne vytvoriť, ak postupne pridávame: 6, 2, 4, 7, 3, 9, 5, 8, 1
+
* ručne vytvoriť, ak postupne pridávame: 6, 2, 4, 7, 3, 9, 5, 8, 1
 +
* pridať 6.5, 1.5, 5.5
 +
* rozchodiť aplikáciu z prednášky a vytvoriť v nej uvedený strom
 +
* nájsť minimálny vrchol stromu
 +
function TBVS.Min: Integer;
 +
begin
 +
  Result := koren;
 +
if Result <> nil then
 +
while Result.L <> Result do
 +
Result :=  Result.L;
 +
end;
 +
 
 +
: na vykreslenie minima treba mať v TForm1.Kresli podporu
 +
: všimnite si, že počet krokov while cyklu bude maximálne hĺbka stromu
 +
var
 +
M: TVrchol;
 +
begin
 +
M := Strom.min;
 +
if M <> nil then
 +
Image1.Canvas.TextOut(0, 0, 'min = ' + M.Text)
 +
end;
 +
 
 +
* verzia Vloz s dynamickým poľom ako parametrom
 +
function TVBStrom.Vloz(Hodnota: array of Integer)
 +
var
 +
h: Integer;
 +
begin
 +
for h in Hodnota do
 +
Vloz(h);
 +
end;
 +
 
 +
: otestujeme
 +
begin
 +
Strom.Vloz([6, 2, 4, 7, 3, 9, 5, 8, 1])
 +
Vloz(h);
 +
end;
 +
 
 +
* ručne vyhadzovať vrchol zo stromu
 +
: ak má dvoch synov, minimum pravého podstromu sa presťahuje do vrcholu + potrebné upratovanie
 +
: lepšie robiť na košatejšom strome
 +
 
 
:* ako vyzerá Preorder a Inorder výpis
 
:* ako vyzerá Preorder a Inorder výpis
 
* metódy - rekurzívne aj nerekurzívne
 
* metódy - rekurzívne aj nerekurzívne
: function TBVS.Min: Integer;
+
 
 
: function TBVS.Max: Integer;
 
: function TBVS.Max: Integer;
 
: function Hladaj(Hodnota: Integer): TVrchol;
 
: function Hladaj(Hodnota: Integer): TVrchol;
* ručne vyhadzovať vrchol zo stromu
+
 
  
 
* aritmetické stromy
 
* aritmetické stromy

Verzia zo dňa a času 09:08, 15. marec 2013

29. Cvičenie


< 29.Prednáška | riešené úlohy


Rozcvička

1. binárny strom je definovaný

TStrom = class
  Info: Integer;
  L, P: TStrom;
  • napísať metódu TStrom.Urob, ktorá upraví hodnoty vo vrcholoch (Info) stromu takto:
  • vo všetkých listoch bude hodnota 1
  • vo vnútorných listoch bude hodnota, ktorá je maximálna z hodnôt jeho synov zvýšené o 1 (alebo súčtom synov)


Cvičenie

  • BVS
type
  TBVS = class
    Koren: TVrchol;
  end;
  • ručne vytvoriť, ak postupne pridávame: 6, 2, 4, 7, 3, 9, 5, 8, 1
  • pridať 6.5, 1.5, 5.5
  • rozchodiť aplikáciu z prednášky a vytvoriť v nej uvedený strom
  • nájsť minimálny vrchol stromu
function TBVS.Min: Integer;
begin
 Result := koren;
	if Result <> nil then
		while Result.L <> Result do
			Result :=  Result.L;
end;
na vykreslenie minima treba mať v TForm1.Kresli podporu
všimnite si, že počet krokov while cyklu bude maximálne hĺbka stromu
var
	M: TVrchol;
begin
	M := Strom.min;
	if M <> nil then
		Image1.Canvas.TextOut(0, 0, 'min = ' + M.Text)
end;
  • verzia Vloz s dynamickým poľom ako parametrom
function TVBStrom.Vloz(Hodnota: array of Integer)
var
	h: Integer;
begin
	for h in Hodnota do
		Vloz(h);
end;
otestujeme
begin
Strom.Vloz([6, 2, 4, 7, 3, 9, 5, 8, 1])
	Vloz(h);
end;
  • ručne vyhadzovať vrchol zo stromu
ak má dvoch synov, minimum pravého podstromu sa presťahuje do vrcholu + potrebné upratovanie
lepšie robiť na košatejšom strome
  • ako vyzerá Preorder a Inorder výpis
  • metódy - rekurzívne aj nerekurzívne
function TBVS.Max: Integer;
function Hladaj(Hodnota: Integer): TVrchol;


  • aritmetické stromy


  • lexikografické stromy



ďalšie námety



Domáca úloha

1.