IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> Пирамидальная сортировка, Вывод отсортированного массива
Sensitive
сообщение 6.06.2009 14:36
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 132
Пол: Женский
Реальное имя: Юлия

Репутация: -  0  +


Здравствуйте!
В программе должен сортироваться массив с помощью пирамидальной сортировки. И отсортированный массив должен выводиться на экран пирамидой, а не в строку как обычный отсортированный массив. Думала записывать значения массива в СтрингГрид ( в виде пирамиды), но что-то вообще ничего из этого не вышло... sad.gif
Как можно вывести на экран массив в виде пирамиды?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 6.06.2009 16:30
Сообщение #2


Гость






Смотри:

Код вот такой:
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;


Вот что получается:
Прикрепленное изображение

При больших массивах катастрофически быстро разрасталось в ширину, поэтому пришлось потом проходить по всем столбцам, и для тех, которые пустые, сбрасывать их ширину до 2-х, можно и до 1-цы тоже smile.gif
Изначально ширина колонок в StringGrid-е выставлена в 25...

Так пойдет?
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 7.07.2025 0:04
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"