Массив: Преобразовать матрицу по правилу: умножить на минимальный элемент этой матрицы. - Pascal
Формулировка задачи:
Помогите пожалуйста написать код по заданию:
Дан двухмерный массив размером M x N. Преобразовать его по правилу - умножить на минимальный элемент этой матрицы. Из первых четырех строк массива сформировать четыре новых вектора. Преобразовать каждый из них по правилу - если у массива есть хотя бы один элемент, принадлежащий отрезку [a,b], то все отрицательные элементы заменить нулями, в противном случае - единицами.Решение задачи: «Массив: Преобразовать матрицу по правилу: умножить на минимальный элемент этой матрицы.»
textual
Листинг программы
type
TVector = Array[Byte] Of Integer;
TArray = Array[Byte] Of TVector;
procedure InitArray(var x: TArray; var n, m: Byte);
var
i, j: Byte;
begin
repeat
Write('Input m (>4) = '); ReadLn(n);
until (n > 3);
repeat
Write('Input n (>0) = '); ReadLn(m);
until (m > 0);
Randomize();
for i := 0 to n - 1 do
begin
WriteLn;
for j := 0 to m - 1 do
begin
x[i, j] := Random(199) - 99;
Write(x[i, j]:5);
end;
end;
end;
procedure ChangeArrayByRule(var x: TArray; const n, m: Byte);
var
i, j, iMin, jMin: Byte;
min: Integer;
begin
iMIn := 0; jMin := 0;
for i := 0 to n - 1 do
for j := 0 to m - 1 do
if (x[i, j] < x[iMin, jMin])
then
begin
iMin := i;
jMin := j;
end;
min := x[iMIn, jMin];
for i := 0 to n - 1 do
begin
WriteLn;
for j := 0 to m - 1 do
begin
x[i, j] := x[i, j] * min;
Write(x[i,j]:7);
end;
end;
end;
function CheckIn(const x: TVector; const len: Byte; const a, b: Integer): Boolean;
var
j: Byte;
Result: Boolean;
begin
j := 0;
repeat
Result := ((x[j] >= a) And (x[j] <= b));
Inc(j);
until ((Result) Or (j >= len));
CheckIn := Result;
end;
procedure GenerateVector(var x: TVector; const m: Byte; const flag: Boolean);
var
j: Byte;
begin
WriteLn;
for j := 0 to m - 1 do
begin
if (x[j] < 0)
then
x[j] := Ord(flag);
Write(x[j]:7);
end;
end;
procedure GenerateVectors(var a, b, c, d: TVector; const m: Byte);
var
x, y: Integer;
begin
Write('Input a='); ReadLn(x);
repeat
Write('Input b (>=', x, ') = ');
ReadLn(y);
until (y >= x);
GenerateVector(a, m, CheckIn(a, m, x, y));
GenerateVector(b, m, CheckIn(b, m, x, y));
GenerateVector(c, m, CheckIn(c, m, x, y));
GenerateVector(d, m, CheckIn(d, m, x, y));
end;
var
orig: TArray;
a, b, c, d: TVector;
n, m: Byte;
begin
InitArray(orig, n, m);
WriteLn;
ChangeArrayByRule(orig, n, m);
WriteLn;
a := orig[0]; b := orig[1];
c := orig[2]; d := orig[3];
GenerateVectors(a, b, c, d, m);
end.
Объяснение кода листинга программы
- В процедуре InitArray создается массив x размером n на m, где n и m - это введенные пользователем значения.
- Затем в цикле происходит итерация по элементам массива x.
- Для каждого элемента x[i, j] генерируется случайное число от 0 до 198.
- Если сгенерированное число меньше текущего значения x[i, j], то оно заменяется на новое значение, которое равно произведению текущего значения x[i, j] и минимального элемента массива x.
- После завершения цикла, в переменной min хранится минимальное значение из всех элементов массива x.
- Затем происходит итерация по элементам массива x.
- Для каждого элемента x[i, j] его значение умножается на значение min.
- После завершения цикла, в переменной min хранится минимальное значение из всех элементов массива x.
- В функции CheckIn проверяется, удовлетворяет ли текущий элемент массива условию (x[j] >= a) And (x[j] <= b).
- Если условие выполняется, то возвращается true, иначе возвращается false.
- В процедуре GenerateVector создается новый массив x размером m.
- Записывается сообщение Input a= и считывается значение a.
- Проверяется, удовлетворяет ли значение a условию (a >= x).
- Если условие выполняется, то вызывается процедура GenerateVector с аргументами a, m, CheckIn(a, m, x, y).
- Аналогично, вызывается процедура GenerateVector с аргументами b, m, CheckIn(b, m, x, y).
- Затем вызывается процедура GenerateVector с аргументами c, m, CheckIn(c, m, x, y).
- И, наконец, вызывается процедура GenerateVector с аргументами d, m, CheckIn(d, m, x, y).
- В конце программы выводится сообщение Input a= и выводятся значения a, b, c, d.