Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2010, 10:31   #1
Damer
Пользователь
 
Регистрация: 11.01.2009
Сообщений: 13
Вопрос Сортировка вставкой

Необходимо вставкой отсортировать элементы массива А размерностью MxN по строкам начиная с элемента А[k,l] и заканчивая элементом A[c,d] , k<=c (l<=d). Остальные элементы массива не сортировать.

покажи пожалуйста пример, как сортировать , используя StringGrid1

среда Delphi 2006

Последний раз редактировалось Damer; 19.05.2010 в 10:38.
Damer вне форума Ответить с цитированием
Старый 19.05.2010, 14:43   #2
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

Сортируешь в массиве, расположенном в оперативной памяти.
А потом выводишь в StringGrid.

Не надо их смешивать!
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948
Z1000000 вне форума Ответить с цитированием
Старый 19.05.2010, 15:26   #3
Damer
Пользователь
 
Регистрация: 11.01.2009
Сообщений: 13
По умолчанию

Я некорректно написал. То , что StringGrid выводить надо в конце - это я знаю. А как пустить цикл для двумерного массива?

Код:
{i - столбец, j - строка}
 for i := l to d do
   begin
     for j := k to c do
     buf:=a[j,i];
     r:=j-1;
     while (r>=1) and (a[r,i]>buf) do
     begin
       a[r+1,i]:=a[r,i];
       r:=r-1;
     end;
      a[r+1,i]:=buf
   end;
так же ? или я что-то напутал? у меня не совсем как надо сортирует.
Damer вне форума Ответить с цитированием
Старый 19.05.2010, 15:50   #4
DoDge_VipeR
Форумчанин
 
Аватар для DoDge_VipeR
 
Регистрация: 30.04.2010
Сообщений: 317
По умолчанию

а как вы выводите свой массив в Strnggrid?
icq:627719[сто сорок четыре] - помогу с Pascal & Delphi!
DoDge_VipeR вне форума Ответить с цитированием
Старый 19.05.2010, 16:04   #5
Damer
Пользователь
 
Регистрация: 11.01.2009
Сообщений: 13
По умолчанию

Код:
StringGrid1.ColCount:=n+1;  
StringGrid1.RowCount:=m+1;  
for j := 1 to m do        {чистка 'StringGrid1'}
   for i := 1 to n do
   stringgrid1.Cells[i,j]:=inttostr(0);

for j := 1 to m do
 begin
   for i := 1 to n do
     StringGrid1.Cells[i,0]:=inttostr(i); {вводит i-ое кол-во столбцов}
  StringGrid1.Cells[0,j]:=inttostr(j);  {вводит j-ое кол-во строк}
 end;



Код:
for j := 1 to m do
 for i := 1 to n do
 stringgrid1.Cells[i,j]:=inttostr(a[j-1,i-1]);
это после сортировки (2 код)

Последний раз редактировалось Damer; 19.05.2010 в 16:07.
Damer вне форума Ответить с цитированием
Старый 19.05.2010, 16:07   #6
DoDge_VipeR
Форумчанин
 
Аватар для DoDge_VipeR
 
Регистрация: 30.04.2010
Сообщений: 317
По умолчанию

а надо вот так
Код:
for j := 0 to m-1 do
 for i := 0 to n-1 do
 stringgrid1.Cells[i,j]:=inttostr(a[j+1,i+1]);
icq:627719[сто сорок четыре] - помогу с Pascal & Delphi!
DoDge_VipeR вне форума Ответить с цитированием
Старый 19.05.2010, 16:09   #7
Damer
Пользователь
 
Регистрация: 11.01.2009
Сообщений: 13
По умолчанию

я изначально просто добавил +1 к "m" и "n"

Код:
StringGrid1.ColCount:=n+1;  
StringGrid1.RowCount:=m+1;
Damer вне форума Ответить с цитированием
Старый 19.05.2010, 16:17   #8
DoDge_VipeR
Форумчанин
 
Аватар для DoDge_VipeR
 
Регистрация: 30.04.2010
Сообщений: 317
По умолчанию

и что?
в гриде нумерация строк и столбцов идет с 0
поэтому цикл должен быть как в посте #6
icq:627719[сто сорок четыре] - помогу с Pascal & Delphi!
DoDge_VipeR вне форума Ответить с цитированием
Старый 19.05.2010, 16:28   #9
Damer
Пользователь
 
Регистрация: 11.01.2009
Сообщений: 13
По умолчанию

а так ошибку выдает (

вот код:

Код:
procedure TForm1.N5Click(Sender: TObject);
Var a: array of array of integer;
m,n,i,j:integer;
k,l: integer; {координаты начала сортировки}
c,d: integer; {координаты конца сортировки}
buf: integer; 
r: integer;
begin
m:=strtoint(label1.caption);
n:=strtoint(label2.caption);
SetLength(a,m,n);
k:=strtoint(inputbox('Начало сортировки','Введите номер строки (k)',''));
l:=strtoint(inputbox('Начало сортировка','Введите номер столбца (l)',''));
c:=strtoint(inputbox('Конец сортировки','Введите номер строки (c)',''));
d:=strtoint(inputbox('Конец сортировки','Введите номер столбца (d)',''));
for j := 1 to m do
   for i := 1 to n do
   a[j-1,i-1]:=strtoint(StringGrid1.Cells[i,j]); 

 for i := l to d do
   begin
     for j := k to c do
     buf:=a[j,i];
     r:=j-1;
     while (r>=1) and (a[r,i]>buf) do
     begin
       a[r+1,i]:=a[r,i];
       r:=r-1;
     end;
      a[r+1,i]:=buf
   end;

for j := 0 to m do
 for i := 0 to n do
 stringgrid1.Cells[i,j]:=inttostr(a[j-1,i-1]);

end;
Damer вне форума Ответить с цитированием
Старый 19.05.2010, 16:32   #10
DoDge_VipeR
Форумчанин
 
Аватар для DoDge_VipeR
 
Регистрация: 30.04.2010
Сообщений: 317
По умолчанию

ты слепой???
это вывод в Stringgrid
Код:
for j := 0 to m-1 do
 for i := 0 to n-1 do
 stringgrid1.Cells[i,j]:=inttostr(a[j+1,i+1]);
это ввод из стринггрида
Код:
for j := 0 to m-1 do
   for i := 0 to n-1 do
   a[j+1,i+1]:=strtoint(StringGrid1.Cells[i,j]);
icq:627719[сто сорок четыре] - помогу с Pascal & Delphi!
DoDge_VipeR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Структура, сортировка вставкой Slimikus Общие вопросы C/C++ 1 30.04.2010 15:40
алгоритм сортировки «вставкой» curly182 Помощь студентам 2 19.10.2009 22:56
Помогите с вставкой рисунка fire_on Паскаль, Turbo Pascal, PascalABC.NET 2 09.10.2009 01:14
Сортировка вставкой MAKEDON Общие вопросы C/C++ 1 26.04.2009 12:30
Косяки со вставкой в эдит joker Общие вопросы Delphi 1 14.09.2008 09:00