Страница 1 из 1
Сортировка в многомерном массиве
Добавлено: 15 май 2008, 17:54
Регина
Здравствуйте! У меня такая вот проблема. Нужно задать массив многомерный и отсортировать его по убыванию, методом вставки. Сортировку и вставку я сделала, проблема заключается в том, что нужно отсортировать определенную область массива. У меня сортируется, только не та область которая нужно. Вот ссылка с скриншотом этой области. Мне нужна область 7я, а сортируется почему-то 5. Вот отрывок кода:
[syntax='delphi']
for i:=0 to High(mas) do
for j:=0 to High(mas) do
begin
mas[i,j]:=random(90);
strMas.Cells[j,i]:=IntToStr(mas[i,j]);
strRez.Cells[j,i]:='0';
end;
for j:=0 to k-1 do
begin
kol:=0;
for i:=k to n-1-j do inc(kol);
SetLength(m,kol); pos:=0;
for a:=k to n+j+1 do
begin
m[pos]:=mas[n+j+1,a];
inc(pos);
end;
for b:=1 to kol-1 do
for c:=0 to b-1 do
if m
>m[c] then
begin
p:=m;
for l:=b-1 downto c do
m[l+1]:=m[l];
m[c]:=p;
end;
for l:=0 to k-j-1 do
strRez.Cells[l+k,n+j+1]:=IntToStr(m[l]);
end;
end;
[/syntax]
Помогите пожалуйста!!! завтра курсовик сдавать!!!!
заранее спасибки!
http://www.cyberforum.ru/delphi/thread8 ... #post35854
Re: Сортировка в многомерном массиве
Добавлено: 16 май 2008, 09:38
Игорь Акопян
кто-то обещался использовать теги....

Re: Сортировка в многомерном массиве
Добавлено: 16 май 2008, 17:05
Регина
Игорь Акопян писал(а):кто-то обещался использовать теги....
упс... забыла! вот короче код всей программы, может поможешь, примерно как перейти к той области?
Код: Выделить всё
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, ComCtrls, Buttons, Menus;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
txtN: TEdit;
Label1: TLabel;
txtKol: TEdit;
Label2: TLabel;
Label3: TLabel;
cmdOk: TButton;
cmdRun: TButton;
cmdExit: TButton;
Memo2: TMemo;
strRez: TStringGrid;
strMas: TStringGrid;
Label4: TLabel;
Label5: TLabel;
procedure cmdRunClick(Sender: TObject);
procedure cmdExitClick(Sender: TObject);
procedure cmdOkClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
//Îáúÿâëÿåì ãëîáàëüíóþ ïåðåìåííóþ
//äëÿ îáðàùåíèÿ ê íåìó èç ëþáîé ïðîöåäóðû
n:Byte;
implementation
{$R *.dfm}
procedure TForm1.cmdRunClick(Sender: TObject);
var //Îáúÿâëÿåì ïåðåìåííûå
i,j,kol,k,a,pos,p,l,b,c:Word;
mas:array of array of Word;
m:array of Word;
begin
Randomize; //Àêòèâèðóåì ãåíåðàòîð ñëó÷àéíûõ ÷èñåë
//Çàäàåì ðàçìåðû äëÿ êàæäîé òàáëèöû (n:n)
strRez.ColCount:=n;
strRez.RowCount:=n;
strMas.ColCount:=n;
strMas.RowCount:=n;
k:=StrToInt(txtN.Text);
//Öèêë äëÿ çàäàíèÿ ðàçìåðà
//äèíàìè÷åñêîãî ìàññèâà
for i:=0 to 1 do
begin
SetLength(mas,n);
for j:=0 to n-1 do
SetLength(mas[j],n);
end;
//Öèêë äëÿ çàïîëíåíèÿ ìàññèâà
//ñëó÷àéíûìè ÷èñëàìè
for i:=0 to High(mas) do
for j:=0 to High(mas) do
begin
mas[i,j]:=random(90);
strMas.Cells[j,i]:=IntToStr(mas[i,j]);
//Ðåçóëüòèðóþùóþ òàáëèöó âðåìåííî
//çàïîëíÿåì íóëÿìè
strRez.Cells[j,i]:='0';
end;
//Öèêë äëÿ ïðîõîäà ïî ñòðîêàì äî ñåðåäèíû
for j:=0 to k-1 do
begin
kol:=0; //Îáíóëÿåì êîë-âî ýëåìåíòîâ ìàññèâà
//Öèêë äëÿ çàäàíèÿ ðàçìåðà íîâîãî ìàññèâà
for i:=k to n-1-j do
inc(kol);
SetLength(m,kol); //Çàäàåò ðàçìåðíîñòü ìàññèâà
pos:=0;
//Öèêë äëÿ çàïîëíåíèÿ íîâîãî ìàññèâà ýëåìåíòàìè
//èç ïðåäûäóùåãî ìàññèâà 'mas'
for a:=k to n-j-1 do
begin
m[pos]:=mas[n-j-1,a];
inc(pos);
end;
//Öèêë äëÿ ñîðòèðîâêè ìàññèâà
for b:=1 to kol-1 do
for c:=0 to b-1 do
if m[b]>m[c] then
begin
p:=m[b];
for l:=b-1 downto c do
m[l+1]:=m[l];
m[c]:=p;
end;
//Öèêë äëÿ âûâîäà ðåçóëüòàòà ñîðòèðîâêè
for l:=0 to k-j-1 do
strRez.Cells[l+k,n-j-1]:=IntToStr(m[l]);
end;
end;
procedure TForm1.cmdExitClick(Sender: TObject);
begin
Close;
end;
procedure TForm1.cmdOkClick(Sender: TObject);
begin
txtKol.Text:=IntToStr(StrToInt(txtN.Text)*2);
n:=StrToInt(txtN.Text)*2;
end;
end.
теперь все =)))
Re: Сортировка в многомерном массиве
Добавлено: 19 май 2008, 10:28
Игорь Акопян
вот из ЛС от нашего, пока не активированного друга
Sender Ghost писал(а):Здравствуйте.
Мой аккаунт ещё не активировал администратор, поэтому не имею возможности написать в
теме.
Решение следующее:
[SYNTAX='Delphi']
procedure TForm1.cmdRunClick(Sender: TObject)],n);
//end;
//Цикл для заполнения массива
//случайными числами
for i:=0 to High(mas) do
for j:=0 to High(mas) do
begin
mas[i,j]:=random(90);
strMas.Cells[j,i]:=IntToStr(mas[i,j]);
//Результирующую таблицу временно
//заполняем нулями
strRez.Cells[j,i]:='0';
end;
//Цикл для прохода по строкам до середины
for j:=0 to k-1 do
begin
kol:=0; //Обнуляем кол-во элементов массива
//Цикл для задания размера нового массива
for i:=0 to j do
inc(kol);
SetLength(m,kol); //Задает размерность массива
pos:=0;
//Цикл для заполнения нового массива элементами
//из предыдущего массива 'mas'
for a:=0 to j do
begin
m[pos]:=mas[n-j-1,a];
inc(pos);
end;
//Цикл для сортировки массива
for b:=1 to kol-1 do
for c:=0 to b-1 do
if m
>m[c] then
begin
p:=m;
for l:=b-1 downto c do
m[l+1]:=m[l];
m[c]:=p;
end;
//Цикл для вывода результата сортировки
for l:=0 to j do
strRez.Cells[l, n-j-1]:=IntToStr(m[l]);
end;
end;
[/SYNTAX]
Проход цикла: строки: снизу-вверх; столбцы: слева-направо.
Отправил аналогичное письмо Регине.
Не могли бы вы написать само решение в теме?
ЗЫ. Лично от меня 
1. Для выделения синтаксиса - используйте тэги [noparse][syntax='delphi'] ваш код на Дельфи [/syntax][/noparse] - будет выделение цветом
2. Перед копированием кода из другой программы включите русский язык - тогда при вставке не будут портиться русские буквы
Пойду-ка я обновлю правила раздела 
Re: Сортировка в многомерном массиве
Добавлено: 20 май 2008, 18:56
Регина
большое пребольшое спасибо!!!!!!!!!!!