Matrix75. Дана матрица размера M \times N. Элемент матрицы называется ее локальным максимумом, если он больше всех окружающих его элементов. Поменять знак всех локальных максимумов данной матрицы на противоположный. При решении допускается использовать вспомогательную матрицу.
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
program Matrix75; type matrix = array [1..10,1..10] of integer; var a:matrix; K, M, N, i, j:Integer; Function CheckMatrixLocMax(var mat:matrix; X,Y:Integer):Boolean; Begin CheckMatrixLocMax:=true; if x>1 then if mat[x,y]<=mat[x-1,y] then CheckMatrixLocMax:=False; if x<M then if mat[x,y]<=mat[x+1,y] then CheckMatrixLocMax:=False; if y>1 then if mat[x,y]<=mat[x,y-1] then CheckMatrixLocMax:=False; if y<N then if mat[x,y]<=mat[x,y+1] then CheckMatrixLocMax:=False; if (y>1) and (x>1) then if mat[x,y]<=mat[x-1,y-1] then CheckMatrixLocMax:=False; if (y<N) and (x<M) then if mat[x,y]<=mat[x+1,y+1] then CheckMatrixLocMax:=False; if (y>1) and (x<M) then if mat[x,y]<=mat[x+1,y-1] then CheckMatrixLocMax:=False; if (y<N) and (x>1) then if mat[x,y]<=mat[x-1,y+1] then CheckMatrixLocMax:=False; end; begin Write('N: '); Readln(N); Write('M: '); Readln(M); for i:=1 to M do begin writeln(i,': '); for j:=1 to N do begin Write(j,' : '); Read(a[i,j]); end; end; for i:=1 to M do for j:=1 to N do if CheckMatrixLocMax(a,i,j) then a[i,j]:=(-1)*a[i,j]; for i:=1 to M do begin for j:=1 to N do begin Write(' : ',a[i,j]); end; writeln(' : '); end; end. |
Другие задачи из раздела Matrix можно посмотреть здесь.
тот же вариант,но без функции (она там на самом деле не нужна):