Курсовая работа: Работа с двумерными числовыми массивами
54 direction:= left;//сменим направление на "влево"
55 dec(rightB);//сдвинем правую границу к центру
56 dec(ColN);//сдвинемся влево
57 end;
58
59 left://если влево
60 if ColN > leftB then dec(ColN)//если не дошли до левой границы - сдвигаемся влево
61 else
62 begin//иначе - прошли верхнюю строку
63 direction:= down;//сменим направление на "вниз"
64 inc(topB);//сдвинем верхнюю границу к центру
65 inc(RowN);//сдвинемся вниз
66 end;
67 end;
68 end;
69 end;
Сортировка строк матрицы
Наконец упорядочивание строк матрицы по убыванию суммы элементов каждой строки. Вспомогательная функция getRowSum возвращает сумму элементов заданной строки:
1 {возвращает сумму элементов RowN-ой строки матрицы arr}
2 function getRowSum(const arr: TMatrix; RowN: integer): Int64;
3 var ColN: integer;
4 begin
5 Result:= 0;
6 if RowN > high(arr) then exit;//если в матрице нет RowN-ой строки - выходим
7 for ColN:= 0 to high(arr[RowN]) do//суммируем элементы строки
8 Result:= Result + arr[RowN, ColN];
9 end;
Сама сортировка осуществляется посредством процедуры SortRows . Был выбран алгоритм прямой вставки, так как число строк в матрице не предполагается большим, а этот алгоритм эффективен на небольших наборах данных. В любом случае сортировка осуществляется быстро, так как при перемене мест строк не происходит копирование данных, но просто переставляются местами указатели. Листинг этой функции:
1 {сортирует строки матрицы по убыванию сумм элементов каждой строки}