Здравствуйте!
В программе должен сортироваться массив с помощью пирамидальной сортировки. И отсортированный массив должен выводиться на экран пирамидой, а не в строку как обычный отсортированный массив. Думала записывать значения массива в СтрингГрид ( в виде пирамиды), но что-то вообще ничего из этого не вышло...
Как можно вывести на экран массив в виде пирамиды?
Смотри:
Код вот такой:
procedure DrawHeap(const a: array of integer;
n: integer; var SG: TStringGrid);
var
level, levels: integer;
cnt, i, j, LWidth: integer;
b: boolean;
begin
levels := trunc(ln(n)/ln(2)) + 1;
SG.FixedCols := 0; SG.FixedRows := 0;
SG.ColCount := levels * 8;
SG.RowCount := levels;
level := 0; cnt := -1;
while cnt < n do begin
for i := 1 to 1 shl level do begin
LWidth := SG.ColCount div (1 shl level);
Form1.Memo1.Lines.Add(IntToStr(LWidth));
inc(cnt);
if cnt = n then break;
SG.Cells[pred(i) * LWidth + (LWidth div 2), level] := IntToStr(a[cnt]);
end;
inc(level);
end;
for i := 0 to SG.ColCount - 1 do begin
b := true;
for j := 0 to SG.RowCount do begin
b := b and (SG.Cells[i, j] = '');
end;
if b then SG.ColWidths[i] := 2;
end;
end;
const
n = 8;
arr: array[1 .. n] of integer = (
1, 2, 3, 4, 5, 6, 8, 11
);
procedure TForm1.Button7Click(Sender: TObject);
begin
//
DrawHeap(arr, n, StringGrid1);
end;
Неплохо получается. Спасибо.
Просмотрю сейчас как оно будет на больших увеличиваться в ширину