Лабораторная работа № 3 Тема. D-кучи. Цель: - изучить устройство и принцип заполнения D-куч - научиться использовать на практике основные алгоритмы по обработке D-куч Ход работы1. Разработайте программу в соответствии со следующими требованиями: а) создание d-кучи (случайное / ручной ввод); б) добавление элемента в d-кучу; в) удаление минимального элемента из d-кучи; г) удаление произвольного элемента из d-кучи; д) поиск минимального элемента; е) уменьшение ключа вершины i на значение value; ж) увеличение ключа вершины i на значение value; з) все операции должны быть наглядно представлены. Важно: обязательно соблюдение инварианта! 2. Напишите отчет, содержащий исходные тексты программ. РЕШЕНИЕ var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin randomize; for i:=0 to 29 do begin stringgrid1.Cells[i,0]:=inttostr(random(99)); end; end; procedure TForm1.Button5Click(Sender: TObject); var i,j,sss,t,t1,star:integer; begin repeat sss:=0; for i:=0 to stringgrid1.ColCount-2 do begin t:=strtoint(stringgrid1.Cells[i,0]); t1:=strtoint(stringgrid1.Cells[i+1,0]); if t>t1 then begin sss:=1; star:=strtoint(stringgrid1.Cells[i,0]); stringgrid1.Cells[i,0]:=stringgrid1.Cells[i+1,0]; stringgrid1.Cells[i+1,0]:=inttostr(star); end; end; until (sss=0); end; procedure TForm1.Button2Click(Sender: TObject); begin if v<30 then begin stringgrid1.Cells[v,0]:=edit1.Text; v:=v+1; end; end; procedure TForm1.Button3Click(Sender: TObject); var n,i:integer; begin n:=strtoint(edit2.Text); if n<29 then begin for i:=n-1 to 29 do begin stringgrid1.Cells[i,0]:=stringgrid1.Cells[i+1,0]; end; stringgrid1.Cells[i+1,0]:=' '; end; end; procedure TForm1.Button7Click(Sender: TObject); var n,i:integer; begin randomize; n:=random(29); if n<29 then begin for i:=n-1 to 29 do begin stringgrid1.Cells[i,0]:=stringgrid1.Cells[i+1,0]; end; stringgrid1.Cells[i+1,0]:=' '; end; end; procedure TForm1.Button6Click(Sender: TObject); var min,i:integer; begin min:=strtoint(stringgrid1.Cells[0,0]); for i:=0 to 28 do begin if min>strtoint(stringgrid1.Cells[i,0]) then min:=strtoint(stringgrid1.Cells[i,0]); end; edit3.Text:=inttostr(min); end; procedure TForm1.Button4Click(Sender: TObject); var versh,i,max,n:integer; stroka:string; begin n:=0; memo1.Lines.Clear; //1 stroka versh:=strtoint(edit4.Text); memo1.Lines.Add(' '+stringgrid1.Cells[0,0]); //2 stroka for i:=1 to versh do begin stroka:=stroka+' '+stringgrid1.Cells[i,0]; end; memo1.Lines.Add(stroka); stroka:=' '; //3 stroka max:=versh*versh+i; if i<29-max then begin for i:=versh+1 to max-1 do begin stroka:=stroka+' '+stringgrid1.Cells[i,0]; n:=n+1; if n=versh then begin stroka:=stroka+' '; n:=0; end; end; end; memo1.Lines.Add(stroka); stroka:=' '; n:=0; //4 stroka max:=versh*max; i:=i; if max>29 then max:=29; if i<29 then begin for i:=i to max do begin stroka:=stroka+' '+stringgrid1.Cells[i,0]; n:=n+1; if n=versh then begin stroka:=stroka+' '; n:=0; end; end; end; if max=28 then begin stroka:=stroka+stringgrid1.Cells[29,0]; max:=29; end; memo1.Lines.Add(stroka); stroka:=' '; if max<29 then begin //5 stroka max:=max*versh+1; i:=i; if max>29 then max:=29; if i<29 then begin for i:=i to max do begin stroka:=stroka+' '+stringgrid1.Cells[i,0]; n:=n+1; if n=versh then begin stroka:=stroka+' '; n:=0; end; end; end; memo1.Lines.Add(stroka); stroka:=' '; end; if max<29 then begin //6 stroka max:=max+versh*versh+i; i:=i+versh+1; if max>29 then max:=29; if i<29 then begin for i:=versh+1 to max do begin stroka:=stroka+' '+stringgrid1.Cells[i,0]; n:=n+1; if n=versh then begin stroka:=stroka+' '; n:=0; end; end; end; memo1.Lines.Add(stroka); stroka:=' '; end; //sluchay s 1 vershinoy if versh=1 then begin memo1.Lines.Clear; for i:=0 to 29 do begin memo1.Lines.Add(stringgrid1.Cells[i,0]); end; end; end; end.
|