Сортировка в многомерном массиве

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Аватара пользователя
Регина
Сообщения: 11
Зарегистрирован: 10 апр 2008, 17:35

Здравствуйте! У меня такая вот проблема. Нужно задать массив многомерный и отсортировать его по убыванию, методом вставки. Сортировку и вставку я сделала, проблема заключается в том, что нужно отсортировать определенную область массива. У меня сортируется, только не та область которая нужно. Вот ссылка с скриншотом этой области. Мне нужна область 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
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

кто-то обещался использовать теги.... ;)
Изображение
Аватара пользователя
Регина
Сообщения: 11
Зарегистрирован: 10 апр 2008, 17:35

Игорь Акопян писал(а):кто-то обещался использовать теги.... ;)

упс... забыла! вот короче код всей программы, может поможешь, примерно как перейти к той области?

Код: Выделить всё

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.
теперь все =)))
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

вот из ЛС от нашего, пока не активированного друга :)
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. Перед копированием кода из другой программы включите русский язык - тогда при вставке не будут портиться русские буквы

Пойду-ка я обновлю правила раздела :)
Изображение
Аватара пользователя
Регина
Сообщения: 11
Зарегистрирован: 10 апр 2008, 17:35

большое пребольшое спасибо!!!!!!!!!!!
Ответить