IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Сортировка 2D массива змейкой, Отсортировать массив как показано на схеме
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 8
Пол: Мужской
Реальное имя: Sergey

Репутация: -  0  +


Данн двумерный массив n на m, состоящий из любых целых чисел.
Необходимо отсортировать массив змейкой по возрастанию(убыванию), как показано на рисунке.
Задавать дополнительный массив запрещено.
Голову уже сломал себе sad.gif

Сообщение отредактировано: MC-Sergey -


Эскизы прикрепленных изображений
Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Ну, сортировка - так сортировка smile.gif

const
max_col = 6;
max_row = 4;

type
tdirection = (right, left_down, down, right_up);
const
delta: array[tdirection] of record X, Y: integer end =
( (X: 1; Y: 0), (X:-1; Y: 1), (X: 0; Y: 1), (X: 1; Y:-1) );

function get_next(var dir: tdirection; var col, row: integer): boolean;
var
new_col, new_row: integer;
ok: boolean;
begin
get_next := false;
if (row = max_row) and (col = max_col) then exit;

case dir of
right:
if row = 1 then dir := left_down
else dir := right_up;
down:
if col = 1 then dir := right_up
else dir := left_down;
end;

repeat

new_col := col + delta[dir].x; new_row := row + delta[dir].y;
ok := (new_col >= 1) and (new_col <= max_col) and
(new_row >= 1) and (new_row <= max_row);

if not ok then
case dir of
right: dir := down;
left_down: dir := down;
down: dir := right;
right_up: dir := right;
end;

until ok;
col := new_col; row := new_row;
get_next := true;

end;

var
a: array[1 .. max_row, 1 .. max_col] of integer;
dir: tdirection;

i, j,
_col, _row,
first_row, first_col, mx_row, mx_col: integer;
value: integer;
T: integer;

begin
for _row := 1 to max_row do
for _col := 1 to max_col do
a[_row, _col] := random(20);

for i := 1 to max_row * max_col - 1 do begin

_col := 1; _row := 1;
dir := right_up;

for j := 1 to pred(i) do get_next(dir, _col, _row);
first_col := _col; first_row := _row;

mx_row := first_row; mx_col := first_col;
repeat

if a[mx_row, mx_col] > a[_row, _col] then begin
mx_row := _row; mx_col := _col;
end

until not get_next(dir, _col, _row);
T := a[first_row, first_col];
a[first_row, first_col] := a[mx_row, mx_col];
a[mx_row, mx_col] := T;

end;

for _row := 1 to max_row do begin
for _col := 1 to max_col do begin
write(a[_row, _col]:4);
end;
writeln;
end;

end.


Попробуй разобраться...
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 7.05.2024 20:53
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name