Заменить нечетный элемент каждой строки матрицы нулем - Pascal
Формулировка задачи:
Дан двумерный массив размером n*m, заполненный случайным образом.
1. Заменить нечетный элемент каждой строки нулем
2. Вставить после всех строк, содержащий минимальные значения строку 1,2 ,3
3. Удалить все столбцы, в которых первый элемент четный
4. Поменять местами первый и последний столбцы.
Решение задачи: «Заменить нечетный элемент каждой строки матрицы нулем»
textual
Листинг программы
{$MODE TP}
type
TLine = Array[Byte] Of ShortInt;
TArray = Array[Byte] Of TLine;
procedure PrintArray(const a: TArray; const n, m: Byte);
var
i, j: Byte;
begin
for i := 0 to n - 1 do
begin
WriteLn;
for j := 0 to m - 1 do
Write(a[i, j]:4);
end;
WriteLn;
end;
procedure GenerateArray(var a: TArray; var n, m: Byte);
var
i, j: Byte;
begin
repeat
Write('n='); ReadLn(n);
until (n > 0);
repeat
Write('m='); ReadLn(m);
until (m > 0);
Randomize();
for i := 0 to n - 1 do
for j := 0 to m - 1 do
a[i, j] := Random(199) - 99;
PrintArray(a, n, m);
end;
procedure Zad1(var a: TArray; const n, m: Byte);
var
i, j: Byte;
begin
for i := 0 to n - 1 do
for j := 0 to m - 1 do
a[i, j] := a[i, j] * Ord(Not Odd(a[i, j]));
PrintArray(a, n, m);
end;
procedure Zad2(var a: TArray; var n: Byte; const m: Byte);
function GetMin(const a: TArray; const n, m: Byte): ShortInt;
var
Result: ShortInt;
i, j: Byte;
begin
Result := a[0, 0];
for i := 0 to n - 1 do
for j := 0 to m - 1 do
if (a[i, j] < Result)
then
Result := a[i, j];
GetMin := Result;
end;
function CheckLine(const l: TLine; const m: Byte; const min: ShortInt): Boolean;
var
j: Byte;
Result: Boolean;
begin
Result := False; j := 0;
while ((j < m) And (Not Result)) do
begin
Result := (l[j] = min);
Inc(j);
end;
CheckLine := Result;
end;
var
i, ii, j: Byte;
min: ShortInt;
begin
min := GetMin(a, n, m); i := 0;
while (i < n) do
begin
if (CheckLine(a[i], m, min))
then
begin
for ii := n - 1 downto i + 1 do
a[ii + 1] := a[ii];
for j := 0 to m - 1 do
a[i + 1, j] := j + 1;
Inc(n);
Inc(i);
end;
Inc(i);
end;
PrintArray(a, n, m);
end;
procedure Zad3(var a: TArray; const n: Byte; var m: Byte);
var
i, j, jj: Byte;
begin
j := 0;
while (j < m) do
if (a[0, j] = 0)
then
begin
for jj := j to m - 2 do
for i := 0 to n - 1 do
a[i, jj] := a[i, jj + 1];
Dec(m);
end
else
Inc(j);
PrintArray(a, n, m);
end;
procedure Zad4(var a: TArray; const n, m: Byte);
procedure SwapElements(var x, y: ShortInt);
var
z: ShortInt;
begin
z := x;
x := y;
y := z;
end;
var
i: Byte;
begin
if (m > 1)
then
for i := 0 to n - 1 do
SwapElements(a[i, 0], a[i, m - 1]);
PrintArray(a, n, m);
end;
var
ar: TArray;
n, m: Byte;
begin
GenerateArray(ar, n, m);
Zad1(ar, n, m);
Zad2(ar, n, m);
Zad3(ar, n, m);
Zad4(ar, n, m);
end.
Объяснение кода листинга программы
- Объявление типов данных:
- TLine: массив байтов (ShortInt)
- TArray: массив байтов, состоящий из TLine
- Процедура вывода массива:
- PrintArray(const a: TArray, const n, m: Byte): выводит значения массива a размером n x m
- Процедура генерации массива:
- GenerateArray(var a: TArray, var n, m: Byte): запрашивает у пользователя размеры массива n и m, инициализирует массив случайными числами и выводит его на экран
- Процедура для задачи 1:
- Zad1(var a: TArray; const n, m: Byte): заменяет нечетные элементы каждой строки массива a нулями и выводит результат
- Процедура для задачи 2:
- Zad2(var a: TArray; var n: Byte; const m: Byte): ищет минимальный элемент в массиве a, затем перемещает все строки, содержащие этот минимальный элемент, вниз и добавляет новую строку со значениями от 1 до m, если это необходимо, и выводит результат
- Процедура для задачи 3:
- Zad3(var a: TArray; const n: Byte; var m: Byte): удаляет столбцы, содержащие хотя бы один ноль, из массива a и выводит результат
- Процедура для задачи 4:
- Zad4(var a: TArray; const n, m: Byte): меняет местами первый и последний элементы каждой строки массива a и выводит результат
- Основная часть программы:
- Инициализирует массив ar, n и m
- Генерирует массив и выводит его
- Последовательно вызывает процедуры для решения задач 1-4, передавая массив ar, n и m в каждую из них.