Курсовая работа: Работа с двумерными числовыми массивами
28 if lastColumn > high(arr[RowN]) then lastColumn:= high(arr[RowN]);
29 for ColN:= high(arr)-RowN+1 to lastColumn do //просуммируем элементы в высчитаных пределах
30 Result:= Result + arr[RowN, ColN];
31 end;
32 end;
Процедура SwapAboveBelow таким же образом, как функция GetSumAbove , определяет, какие элементы лежат выше пересечения диагоналей, но не суммирует их, а каждый меняет местами с элементом того же столбца, симметричным текущему относительно верхней и нижней границ матрицы. Для смены используется вспомогательная процедура swap для целых чисел, определённая в этом же модуле:
1 {вспомогательная процедура: поменять местами два целых числа}
2 procedure swap(var first, second: integer);
3 var tmp: integer;
4 begin
5 tmp:= first;
6 first:= second;
7 second:= tmp;
8 end;
9 {поменять местами элементы выше и ниже пересечения диагоналей матрицы arr}
10 procedure SwapAboveBelow (var arr: TMatrix);
11 var
12 RowN, ColN: integer;
13 lastColumn: integer;//номер столбца, содержащего элемент дальней диагонали минус 1
14 begin
15 for RowN:= 0 to (high(arr) div 2) do
16 begin//с нулевой, по средюю строку
17 lastColumn:= high(arr)-RowN-1;//определим номер столбца последнего элемента, подлежащего суммированию
18 //если число столбцов меньше числа строк, то последний столбец может оказаться ближе
19 if lastColumn > high(arr[RowN]) then lastColumn:= high(arr[RowN]);
20 for ColN:= RowN+1 to lastColumn do//для каждого элемента в высчитаных пределах
21 //поменяем его местами с элементом того же столбца, отстаящем на то же число строк, но от нижней границы матрицы
22 swap(arr[RowN, ColN], arr[high(arr) - RowN, ColN]);
23 end;