![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
Narcisa |
![]() ![]()
Сообщение
#1
|
![]() Группа: Пользователи Сообщений: 4 Пол: Женский Репутация: ![]() ![]() ![]() |
Такая, вроде бы банальная задачка: как отсортировать двумерный массив в Дэлфи? Но "чем только я ее ни пробовала" ....
![]() Вобще задача такая: нужно отсортировать так, чтобы максимальный элемент оказался в одном углу, и так по убывающей числа бы в матрице шли в другой угол. Так получается, когда сортируешь матрицу 2 раза: сначала по строкам, затем - по столбцам (или наоборот). Вот только мне не удается даже 1 раз 2-мерный массив отсортировать ![]() ![]() Перепробовала много способов и вариантов, а результат один:либо просто все перетасовывается, либо половина чисел заменяется "0"-ми, или исчезает один из элементов, а все остальное сортируется .... Можно просто застрелиться, когда ты новичек в этом деле ![]() ![]() Помогите пожалуйста!! Внизу последнее из моих усилий, но тоже не работает ![]() Там сначала идет вывод в StringGrid1, затем в StringGrid2 выводятся мах значения, а в StringGrid3 надо расположить отсортированный массив... Цитата procedure TForm1.Button1Click(Sender: TObject); var i,j,m,t,c:integer; begin randomize; for i:=1 to 5 do for j:=1 to 5 do begin mass [i,j]:=random(21); StringGrid1.cells[j-1,i-1]:=inttostr(mass[i,j]); end; for i:=1 to 5 do begin max[i]:=mass[i,1]; for j:=1 to 5 do begin if max[i]<mass[i,j] then begin max[i]:=mass[i,j]; end; end; end; for i:=1 to 5 do stringgrid2.Cells[0,i-1]:=inttostr(max[i]); for i:=1 to 5 do begin for j:=1 to 5 do begin a[j]:=mass[i,j]; end; if j=5 then begin for t:=1 to 5 do if a[t]<a[t+1] then begin c:=a[t]; a[t]:=a[t+1]; a[t+1]:=c; end; end; for m:=1 to 5 do stringgrid3.Cells[m-1,i-1]:=inttostr(a[i]); end; end; end. |
![]() ![]() |
мисс_граффити |
![]()
Сообщение
#2
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
самый простой вариант: "разворачиваешь" двумерный в одномерный (хотя бы мысленно), сортируешь и опять "сворачиваешь".
это если тебе нужно получить, например, такой массив: 1 2 3 4 5 6 7 8 А сортировка по строкам, а потом по столбцам дает несколько иной результат. Ну например: 0 0 2 2 4 3 3 3 4 5 3 4 5 6 6 как видишь, и строки, и столбцы отсортированы. Смотри - какой из них тебе нужен. -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
klem4 |
![]()
Сообщение
#3
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Если массив очень большой, то создание еще такого же по размеру может быть просто невозможно ... Вот такой вариант могу предложить:
const procedure SortMatrix(var mx: TMx); -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
мисс_граффити |
![]()
Сообщение
#4
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
klem4, а кто говорил про еще один такой же?
и все-таки хотелось бы узнать, какой результат Narcisa стремится получить... -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
klem4 |
![]()
Сообщение
#5
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Ну а как ты еще его развернешь ? Если только действительно в уме
![]() {$mode delphi} -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
мисс_граффити |
![]()
Сообщение
#6
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
именно что в уме... какая разница, что делфи его считает двумерным... по сути - просто сравнивать последний в строке элемент с первым в следующей строке.
-------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
klem4 |
![]()
Сообщение
#7
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Мм что-то я тебя не очень понимаю, покажи что ты имеешь в виду.
Тут еще одна идея у меня родилась, попозже попробую сделать. -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
мисс_граффити |
![]()
Сообщение
#8
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
ну... грубо говоря, вот так.
for k:=1 to 25 do //до то есть до n*n - размерность массива в результате получается массив вида 1 2 3 4 5 6 7 8 -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
![]() varРазмеры-то совпадают идеально... |
klem4 |
![]()
Сообщение
#10
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
А как вам такой вариант:
{$mode delphi} -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
мисс_граффити |
![]()
Сообщение
#11
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
По-моему, Narcisa давно испугалась и убежала.
-------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Narcisa |
![]()
Сообщение
#12
|
![]() Группа: Пользователи Сообщений: 4 Пол: Женский Репутация: ![]() ![]() ![]() |
Цитата По-моему, Narcisa давно испугалась и убежала. неее ![]() ![]() ![]() ![]() как я поняла из своего задания, результат должен быть примерно таким: 9 8 4 3 7 7 3 2 5 4 2 1 3 2 2 1 Ну, что-то типа этого... Или может действительно змейкой? ![]() Вобщем, чем больше способов знаем, тем лучше ![]() ![]() |
klem4 |
![]()
Сообщение
#13
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Результат должен быть совсем не таким
![]() Вот если у нас на входе матрица: 9 8 4 3 7 7 3 2 5 4 2 1 3 2 2 1 то на выходе 1 1 2 2 2 2 3 3 3 4 4 4 7 7 8 9 -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
![]() ![]() |
![]() |
Текстовая версия | 15.07.2025 1:20 |