Курсовая работа: Работа с двумерными числовыми массивами

29 arr[RowN]:= arr[RowN-1];//текущая строка равна верхней

30 end;

31 arr[1]:= tmpRow;//первую строку приравняем нулевой

32 end;

33 end;

«Разворачивание» матрицы

Процедура UnwindMatrix осуществляет "разворачивание" матрицы в одномерный массив против часовой стрелки. Эта процедура в своих локальных переменных хранит координаты текущего элемента, текущее направление обхода (посредством перечислимого типа TDirection), а так же границы ещё не обойдённой части матрицы, которые сужаются каждый раз, когда проходится целая строка, или столбец. В этот же момент меняется направление обхода и текущим становится элемент в этом направлении. Обход завершается, когда число пройденных элементов станет равняться количеству элементов в матрице:

1 //перечисление - направления

2 type TDirection = (down, right, up, left);

3

4 {обходит матрицу arr против часовой стрелки и наполняет элементами массив res}

5 procedure UnwindMatrix(const arr: TMatrix; var res: TVector);

6 var

7 count, cur: integer;//число элементов в матрице и счётчик элементов

8

9 RowN, ColN: integer;

10 leftB, bottomB, rightB, topB: integer;//границы обхода - меняются при проходе полной строки или столбца

11 direction: TDirection;//текущее направление обхода

12

13 begin

14 if (length(arr) = 0) or (length(arr[0]) = 0) then exit;//если в матрице нет элементов - выходим

15 count:= length(arr) * length(arr[0]);//подсчитаем число элементов в матрице

16 SetLength(res, count);//выделим память для хранения всех элементов матрицы

17

18 //начальные условия обхода: текущий элемент [0,0], границы совпадают с граниуцами матриы, направление - вниз

19 direction:= down;

20 RowN:= 0;

21 ColN:= 0;

22 leftB:= 0;

К-во Просмотров: 515
Бесплатно скачать Курсовая работа: Работа с двумерными числовыми массивами