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

> ВНИМАНИЕ!

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

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Пирамидальная сортировка, Вывод отсортированного массива
сообщение
Сообщение #1


Пионер
**

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

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


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


Гость






Цитата
отсортированный массив должен выводиться на экран пирамидой
Поясни, пожалуйста... Что значит "пирамидой"? Вот, скажем, исходный массив:
1, 3, 5, 8, 2, 6, 11, 4
Напиши, как он должен выводиться после сортировки (пользуйся тегами [cоdefaq][/cоdefaq] для того, чтобы форматировать текст, как тебе нужно, а не так, как хочет форум smile.gif ). Тогда будет ясно, какой компонент использовать для вывода информации...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

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

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


Цитата(volvo @ 6.06.2009 15:05) *

Поясни, пожалуйста... Что значит "пирамидой"? Вот, скажем, исходный массив:
1, 3, 5, 8, 2, 6, 11, 4
Напиши, как он должен выводиться после сортировки (пользуйся тегами [cоdefaq][/cоdefaq] для того, чтобы форматировать текст, как тебе нужно, а не так, как хочет форум smile.gif ). Тогда будет ясно, какой компонент использовать для вывода информации...


1, 3, 5, 8, 2, 6, 11, 4 для этого массива будет так:

Код

                 1
           2         3
        4    5   6     8
    11

В итоге на рисунке образуется как бы пирамида из этого массива. От каждого элемента отходит две ветви вниз. (вроде бы так поянисла)

Сообщение отредактировано: Sensitive -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Смотри:

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

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


Пионер
**

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

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


Неплохо получается. Спасибо.
Просмотрю сейчас как оно будет на больших увеличиваться в ширину smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 5.05.2024 16:41
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name