Задать расположение элементов двумерного массива - PascalABC.NET
Формулировка задачи:
Нужно написать программу на паскале, в которой элементы двумерного массива будут располагаться следующим образом.
Заранее благодарю.
Решение задачи: «Задать расположение элементов двумерного массива»
textual
Листинг программы
const MaxCol = 4; // 6; MaxRow = 4; type TRowIndex = 1 .. MaxRow; TColIndex = 1 .. MaxCol; TItem = Integer; 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 = MaxRow) and (col = MaxCol) 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 <= MaxCol) and (new_row >= 1) and (new_row <= MaxRow); 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[TRowIndex, TColIndex] of TItem; dir : TDirection; i, k, C, R, pC, pR : Integer; T : TItem; begin writeln('Init matrix:'); for R in TRowIndex do begin for C in TColIndex do begin a[R, C] := random(200); write(a[R, C]:4); end; writeln; end; // Вот она, самая простая пузырьковая сортировка: for K := MaxRow * MaxCol - 1 downto 1 do begin C := 1; R := 1; // Начинаем обход всегда с левой верхней ячейки, (1, 1) dir := right_up; // направление движения задаем "по диагонали, вправо и вверх" for i := 1 to K do begin pC := C; pR := R; // Это позиция предыдущей найденной ячейки. get_next(dir, C, R); // Запоминаем ее и ищем следующую if a[pC, MaxCol - pR + 1] > a[C, MaxCol - R + 1] then // А теперь (по алгоритму "пузызька") сравниваем предыдущую со следующей begin T := a[pC, MaxCol - pR + 1]; a[pC, MaxCol - pR + 1] := a[C, MaxCol - R + 1]; a[C, MaxCol - R + 1] := T; end; end; end; writeln('Result matrix:'); // Всё, вывод результата for R in TRowIndex do begin for C in TColIndex do begin write(a[R, C]:4); end; writeln; end; end.
Объяснение кода листинга программы
В данном коде реализована сортировка двумерного массива методом пузырька
. Вот список действий, которые происходят в коде:
- Инициализация двумерного массива случайными значениями от 200 до 1.
- Создание переменных для хранения текущей позиции (C, R), направления движения (dir), а также для хранения предыдущей позиции (pC, pR).
- Обход массива в порядке, заданном направлением движения (по умолчанию -
по диагонали, вправо и вверх
). - Сравнение значения ячейки по текущей позиции с значением ячейки по предыдущей позиции.
- Если значение ячейки по текущей позиции больше, то значения ячеек меняются местами.
- После завершения цикла, результат сортировки выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д