Задать расположение элементов двумерного массива - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

Нужно написать программу на паскале, в которой элементы двумерного массива будут располагаться следующим образом. Заранее благодарю.

Решение задачи: «Задать расположение элементов двумерного массива»

textual
Листинг программы
  1. const
  2.    MaxCol = 4; // 6;
  3.    MaxRow = 4;
  4.  
  5. type
  6.    TRowIndex = 1 .. MaxRow;
  7.    TColIndex = 1 .. MaxCol;
  8.    TItem = Integer;
  9.  
  10.    TDirection = (right, left_down, down, right_up);
  11.  
  12. const
  13.    delta: array[TDirection] of record X, Y: integer end =
  14.    ( (X: 1; Y: 0), (X:-1; Y: 1), (X: 0; Y: 1), (X: 1; Y:-1) );
  15.  
  16. // получаем позицию ячейки, и направление движения, возвращаем
  17. // позицию следующей ячейки (и, если изменилось - новое направление), в порядке обхода "змейкой"
  18. function get_next(var dir: TDirection; var col, row : integer) : boolean;
  19. var
  20.    new_col, new_row: integer;
  21.    ok: boolean;
  22. begin
  23.    get_next := false;
  24.    if (row = MaxRow) and (col = MaxCol) then exit;
  25.    case dir of
  26.       right:
  27.          if row = 1 then dir := left_down
  28.          else dir := right_up;
  29.       down:
  30.          if col = 1 then dir := right_up
  31.          else dir := left_down;
  32.    end;
  33.  
  34.    repeat
  35.       new_col := col + delta[dir].x; new_row := row + delta[dir].y;
  36.       ok := (new_col >= 1) and (new_col <= MaxCol) and (new_row >= 1) and (new_row <= MaxRow);
  37.       if not ok then
  38.          case dir of
  39.             right:     dir := down;
  40.             left_down: dir := down;
  41.             down:      dir := right;
  42.             right_up:  dir := right;
  43.       end;
  44.    until ok;
  45.    col := new_col; row := new_row;
  46.    get_next := true;
  47. end;
  48.  
  49. var
  50.    a : array[TRowIndex, TColIndex] of TItem;
  51.    dir : TDirection;
  52.    i, k, C, R, pC, pR : Integer;
  53.    T : TItem;
  54.  
  55. begin
  56.    writeln('Init matrix:');
  57.    for R in TRowIndex do
  58.    begin
  59.       for C in TColIndex do
  60.       begin
  61.          a[R, C] := random(200);
  62.          write(a[R, C]:4);
  63.       end;
  64.       writeln;
  65.    end;
  66.  
  67.    // Вот она, самая простая пузырьковая сортировка:
  68.    for K := MaxRow * MaxCol - 1 downto 1 do
  69.    begin
  70.       C := 1; R := 1; // Начинаем обход всегда с левой верхней ячейки, (1, 1)
  71.       dir := right_up; // направление движения задаем "по диагонали, вправо и вверх"
  72.  
  73.       for i := 1 to K do
  74.       begin
  75.          pC := C; pR := R; // Это позиция предыдущей найденной ячейки.
  76.          get_next(dir, C, R); // Запоминаем ее и ищем следующую
  77.  
  78.          if a[pC, MaxCol - pR + 1] > a[C, MaxCol - R + 1] then // А теперь (по алгоритму "пузызька") сравниваем предыдущую со следующей
  79.          begin
  80.             T := a[pC, MaxCol - pR + 1];
  81.             a[pC, MaxCol - pR + 1] := a[C, MaxCol - R + 1];
  82.             a[C, MaxCol - R + 1] := T;
  83.          end;
  84.       end;
  85.    end;
  86.  
  87.    writeln('Result matrix:'); // Всё, вывод результата
  88.    for R in TRowIndex do
  89.    begin
  90.       for C in TColIndex do
  91.       begin
  92.          write(a[R, C]:4);
  93.       end;
  94.       writeln;
  95.    end;
  96. end.

Объяснение кода листинга программы

В данном коде реализована сортировка двумерного массива методом пузырька. Вот список действий, которые происходят в коде:

  1. Инициализация двумерного массива случайными значениями от 200 до 1.
  2. Создание переменных для хранения текущей позиции (C, R), направления движения (dir), а также для хранения предыдущей позиции (pC, pR).
  3. Обход массива в порядке, заданном направлением движения (по умолчанию - по диагонали, вправо и вверх).
  4. Сравнение значения ячейки по текущей позиции с значением ячейки по предыдущей позиции.
  5. Если значение ячейки по текущей позиции больше, то значения ячеек меняются местами.
  6. После завершения цикла, результат сортировки выводится на экран.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.333 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы