Другие языки программирования и технологии

Помогите исправить ошибки в коде на Pascal, чтобы он выводил верные ответы. Или можете сами пожалуйста написать пжпжпж!

Вот само задание: Дан массив A размера M*N: поменять местами строки, содержащие минимальный и максимальный элементы матрицы; после смены строк поменять четверть левую нижнюю с правой верхней если m и n четные; после смены строк и проверки честности n и m. Если матрица квадратная - обнулить элементы матрицы на нечётных столбцах.


program swap_rows_and_quarters;const MAX_SIZE = 100;
type matrix = array [1..MAX_SIZE, 1..MAX_SIZE] of integer;var A: matrix;
M, N, i, j, min_i, max_i, temp, quarter_size: integer; min_val,max_val: integer;
is_square: boolean; procedure input_matrix(var A: matrix; M, N: integer);
var i, j: integer; begin
writeln('Введите элементы матрицы:'); for i := 1 to M do
begin for j := 1 to N do
begin readln(A[i,j]);
end; end;
end;procedure output_matrix(var A: matrix; M, N: integer);
var i, j: integer;begin
writeln('Матрица:'); for i := 1 to M do begin
for j := 1 to N do begin
write(A[i,j]:4); end;
writeln; end;
end;function find_min_index(var A: matrix; M, N: integer): integer;
var i, j: integer; min_val: integer;
min_i: integer; begin
min_val := A[1,1]; min_i := 1;
for i := 1 to M do begin
for j := 1 to N do begin
if A[i,j] < min_val then begin
min_val := A[i,j]; min_i := i;
end; end;
end;
find_min_index := min_i; end;
function find_max_index(var A: matrix; M, N: integer): integer;
var i, j: integer; max_val: integer; max_i: integer;begin max_val := A[1,1];
max_i := 1; for i := 1 to M do
begin for j := 1 to N do
begin if A[i,j] > max_val then
begin max_val := A[i,j];
max_i := i; end;
end; end;
find_max_index := max_i; end;
procedure swap_rows(var A: matrix; i, j, N: integer);var temp: integer; k: integer;
begin
for k := 1 to N do begin
temp := A[i,k]; A[i,k] := A[j,k];
A[j,k] := temp; end;
end;procedure swap_quarters(var A: matrix; M, N: integer);
var i, j, temp: integer;
quarter_size: integer; begin quarter_size := M div 2;
for i := 1 to quarter_size do begin
for j := 1 to N do begin
temp := A[i,j]; A[i,j] := A[M-quarter_size+i,j]; A[M-quarter_size+i,j] := temp; end;
end;end;procedure nullify_odd_columns(var A: matrix; M, N: integer);var i, j: integer;begin for i := 1 to M do
begin for j := 1 to N do begin if (j mod 2 = 1) then begin A[i,j] := 0; end;
end; end;
end;begin
writeln('Введите размеры матрицы M и N (не более ', MAX_SIZE, '):'); readln(M,N);
input_matrix(A,M,N); output_matrix(A,M,N);
min_i := find_min_index(A,M,N); max_i := find_max_index(A,M,N);
writeln('Минимальный элемент: ', A[min_i,1]);
writeln('Максимальный элемент: ', A[max_i,1]); swap_rows(A,min_i,max_i,N);
writeln('Матрица после смены строк:'); output_matrix(A,M,N);
is_square := (M = N) and (M mod 2 = 0) and (N mod 2 = 0); if is_square then
begin swap_quarters(A,M,N);
writeln('Матрица после смены четвертей:'); output_matrix(A,M,N);
end; nullify_odd_columns(A,M,N);
writeln('Матрица после обнуления нечетных столбцов:'); output_matrix(A,M,N);
end.
 program swap_rows_and_quarters; 

type
TMatrix = array of array of integer;
TIndval = record
ind, val: integer;
end;
TMatrixAggr = record
min, max: TIndval;
end;

procedure RandomMatrix(var aMatrix: TMatrix; ColCount, RowCount: integer);
var
i, j: integer;
begin
SetLength(aMatrix, RowCount);
for i := 0 to high(aMatrix) do
begin
SetLength(aMatrix[i], ColCount);
for j := 0 to high(aMatrix[i]) do
aMatrix[i, j] := Random(1000);
end;
end;

procedure PrintMatrix(const aMatrix: TMatrix; const aText: string);
var
i, j: integer;
begin
writeln(aText);
for i := 0 to high(aMatrix) do
begin
for j := 0 to high(aMatrix[i]) do
write(aMatrix[i, j]:3, ' ');
writeln;
end;
writeln;
end;

function AggregateMatrix(const aMatrix: TMatrix): TMatrixAggr;
var
i, j: integer;
begin
result.min.ind := 0;
result.min.val := 999;
result.max.ind := 0;
result.max.ind := 0;
for i := 0 to high(aMatrix) do
for j := 0 to high(aMatrix[i]) do
begin
if result.min.val > aMatrix[i, j] then
begin
result.min.val := aMatrix[i, j];
result.min.ind := i;
end;
if result.max.val < aMatrix[i, j] then
begin
result.max.val := aMatrix[i, j];
result.max.ind := i;
end;
end;
end;

procedure SwapRows(var aMatrix: TMatrix; aInd1, aInd2: integer);
var
i, j: integer;
begin
for i := 0 to high(aMatrix[aInd1]) do
begin
j := aMatrix[aInd1, i];
aMatrix[aInd1, i] := aMatrix[aInd2, i];
aMatrix[aInd2, i] := j;
end;
end;

procedure SwapQuarters(var aMatrix: TMatrix);
var
i, j, k: integer;
begin
if odd(length(aMatrix) + 1) and odd(length(aMatrix[0]) + 1) then
for i := length(aMatrix) div 2 to high(aMatrix) do
for j := 0 to length(aMatrix[i]) div 2 - 1 do
begin
k := aMatrix[i - length(aMatrix) div 2, j + length(aMatrix[i]) div 2];
aMatrix[
i - length(aMatrix) div 2,
j + length(aMatrix[i]) div 2
] := aMatrix[i, j];
aMatrix[i, j] := k;
end;
end;

procedure ZeroMatrix(var aMatrix: TMatrix);
var
i, j: integer;
begin
if length(aMatrix) = length(aMatrix[0]) then
for i := 0 to high(aMatrix) do
for j := 0 to (length(aMatrix) - 1) div 2 do
aMatrix[i, j * 2] := 0;
end;

var
A: TMatrix;
M, N: integer;

begin
write('Размеры матрицы M N: ');
read(M, N);
randomize;
RandomMatrix(A, M, N);
PrintMatrix(A, #13#10'Исходная матрица:'#13#10);
with AggregateMatrix(A) do
if min.ind max.ind then
SwapRows(A, min.ind, max.ind);
PrintMatrix(A, #13#10'После перестановки строк:'#13#10);
SwapQuarters(A);
PrintMatrix(A, #13#10'После перестановки четвертей:'#13#10);
ZeroMatrix(A);
PrintMatrix(A, #13#10'Полученная матрица:'#13#10);
end.
Женя Архипов
Женя Архипов
1 916
Лучший ответ
Уже не помню всех этих операторов. Точнее, как их использовать. Слишком давно изучал.
Евгений Черепанов А ты где его изучаешь?