Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
 Аватар для chealbert
257 / 143 / 85
Регистрация: 13.10.2011
Сообщений: 454

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

12.03.2014, 13:21. Показов 1149. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Может кому-то попадалось... Есть ли способ сортировать элементы двумерного масива (максимальный элемент в верхнем левом углу, минимальный в нижнем правом) без перелива масива в одномерный?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.03.2014, 13:21
Ответы с готовыми решениями:

Отсортировать четные строки двумерного масива по возрастанию
Отсортировать четные строки двумерного массива по возрастанию.

Найти сумму элементов заштрихованной части двумерного масива
ВОТ РИСУНОК : http://www.save-files.ru/download.php?file=1671a2281fb165ca4980ce24c40a5856

Сортировка масива
А неполучается сортировка!помогие program pr_1; var mas:array of integer; tmp,i,n:integer; begin randomize; writeln('vvedite...

5
Модератор
10445 / 5737 / 3406
Регистрация: 17.08.2012
Сообщений: 17,453
12.03.2014, 13:37
chealbert, а к чему в одномерный-то копировать? В индексах, что ль, чтобы не путаться?
0
 Аватар для chealbert
257 / 143 / 85
Регистрация: 13.10.2011
Сообщений: 454
12.03.2014, 14:31  [ТС]
все методы сортировки описывают одномерные масивы... и, да) с индексами при переходе со строки в строку и происходит проблема при переборе и сравнивании элементов...
0
Модератор
10445 / 5737 / 3406
Регистрация: 17.08.2012
Сообщений: 17,453
12.03.2014, 15:15
Лучший ответ Сообщение было отмечено chealbert как решение

Решение

Ну вот накарябал для двумерного.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
const m = 5; n = 4;
var a: array [1..m, 1..n] of integer;
    i, j, ii, jj, t: integer;
begin
  randomize;
  writeln('Source array:');
  for j := 1 to n do
    begin
      for i := 1 to m do
        begin
          a[i, j] := random(198) - 99;
          write(a[i, j]:4)
        end;
      writeln
    end;
  for jj := 1 to n do for ii := 1 to m do
    begin
      j := jj;
      i := ii;
      while j <= n do
        begin
          while i <= m do
            begin
              if a[i, j] < a[ii, jj]
                then begin
                  t := a[i, j];
                  a[i, j] := a[ii, jj];
                  a[ii, jj] := t
                end;
              inc(i)
            end;
          i := 1;
          inc(j)
        end;
    end;
  writeln('Sorted array:');
  for j := 1 to n do
    begin
      for i := 1 to m do write(a[i, j]:4);
      writeln
    end;
  readln
end.
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33400 / 21510 / 8236
Регистрация: 22.10.2011
Сообщений: 36,907
Записей в блоге: 12
12.03.2014, 21:15
Цитата Сообщение от chealbert Посмотреть сообщение
без перелива масива в одномерный?
А не надо ничего никуда переливать, достаточно только попросить компилятор временно трактовать этот массив как одномерный:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
const m = 5; n = 4;
type
  ta = array[1 .. m*n] of integer;
var
  a: array [1..m, 1..n] of integer;
  i, j, t: integer;
begin
  randomize;
  writeln('Source array:');
  for i := 1 to m do
    begin
      for j := 1 to n do
        begin
          a[i, j] := Integer(random(198)) - 99;
          write(a[i, j]:4)
        end;
      writeln
    end;
 
    for i := 1 to m*n do
      for j := m*n downto i+1 do
      if ta(a)[j-1] > ta(a)[j] then
      begin
        t := ta(a)[j - 1]; ta(a)[j - 1] := ta(a)[j]; ta(a)[j] := t;
      end;
 
  writeln('Sorted array:');
  for i := 1 to m do
    begin
      for j := 1 to n do write(a[i, j]:4);
      writeln
    end;
  readln
end.
(небольшой недостаток: для этого способа размеры типов должны совпадать, то есть, надо точно знать на этапе компиляции размер массива A, иначе будет ошибка), либо написать процедуру сортировки с параметром - открытым массивом:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
procedure sort(var a : array of integer; size : integer);
var i, j, t : integer;
begin
  for i := 0 to size - 1 do
    for j := size - 1 downto i + 1 do
      if a[j-1] > a[j] then
      begin
        t := a[j - 1]; a[j - 1] := a[j]; a[j] := t;
      end;
end;
 
const m = 5; n = 4;
type
  pta = ^ta;
  ta = array[0 .. pred(maxint) div sizeof(integer)] of integer;
var
  a: array [1..m, 1..n] of integer;
  i, j, t: integer;
begin
  randomize;
  writeln('Source array:');
  for i := 1 to m do
    begin
      for j := 1 to n do
        begin
          a[i, j] := Integer(random(198)) - 99;
          write(a[i, j]:4)
        end;
      writeln
    end;
 
  sort(pta(@a)^, m*n);
 
  writeln('Sorted array:');
  for i := 1 to m do
    begin
      for j := 1 to n do write(a[i, j]:4);
      writeln
    end;
  readln
end.
(не бойся, описание такого типа ta на потребление памяти программой не влияет, это опять же - только указание компилятору, как трактовать ту или иную область памяти).

Оба метода работают и под Turbo Pascal-ем и под FPC...
1
Модератор
10445 / 5737 / 3406
Регистрация: 17.08.2012
Сообщений: 17,453
12.03.2014, 21:31
UI, тогда можно и
Pascal
1
2
var a: array [1..m, 1..n] of integer;
    t: array [1..m*n] of integer absolute a;
или цикл
Pascal
1
2
3
4
for i := 1 to m * n do
  begin
    ... a[(i - 1) div (n - 1) + 1, (i - 1) mod (n - 1) + 1] ...
  end;
Я же просто объяснял, как не запутаться в индексах.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.03.2014, 21:31
Помогаю со студенческими работами здесь

Сортировка масива
Всем привет, помогите пожалуйста есть идея а воплотить немогу никак, чтото не так работает, Смотрите как я хочу, берем например a и ищем...

Сортировка одномерного масива
Дан текстовый файл, в котором имеется масив целых чисел. Нужно прочитать данные из текстового файла в типизированный файл и отсортировать с...

Сортировка одномерного масива
Отсортировать масив методом вставки. program pr1; type mas=array of integer; var m:mas; procedure init(var a:mas); var i:integer;...

Как найти максимальное значение двумерного масива
как найти максимальное значение двумерного масива?

Найти номер макс. элемента масива и произведение элементов масива между 1-м и 2-м нулевыми элементами
В одномерном масиве,состоящем из н элементов,вычеслить номер макс. масива,и произведение элементов масива,рассположеных мнжду 1-м и 2-м...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru