Заменить максимальный элемент каждой строки матрицы нулем - Pascal
Формулировка задачи:
Дан двумерный массив размером n*m, заполненный случайным образом.
1. Заменить максимальный элемент каждой строки нулем
2. Вставить перед всеми строками, первый элемент которых делится на 3, строку из нулей.
3. Удалить самый левый столбец, в котором встретиться четный отрицательный элемент.
4. Поменять местами второй и предпоследний столбцы.
Решение задачи: «Заменить максимальный элемент каждой строки матрицы нулем»
textual
Листинг программы
var
ar: Array[Byte, Byte] Of ShortInt;
i, j, k, n, m, jMax: Byte;
temp: ShortInt;
flag: Boolean;
begin
repeat
Write('n(1..128)=');
ReadLn(n);
until (n in [1..128]);
repeat
Write('m=');
ReadLn(m);
until (m > 0);
Randomize; WriteLn('Original array:');
for i := 0 to n - 1 do
begin
jMax := 0;
for j := 0 to m - 1 do
begin
ar[i, j] := Random(199) - 99;
Write(ar[i, j]:4);
if (ar[i, j] > ar[i, jMax])
then
jMax := j;
end;
ar[i, jMax] := 0;
WriteLn;
end;
WriteLn('Task 1:');
for i := 0 to n - 1 do
begin
for j := 0 to m - 1 do
Write(ar[i, j]:4);
WriteLn;
end;
i := 0;
while (i < n) do
begin
if (ar[i, 0] mod 3 = 0)
then
begin
for k := n downto i + 1 do
for j := 0 to m - 1 do
ar[k, j] := ar[k - 1, j];
Inc(n);
for j := 0 to m - 1 do
ar[i, j] := 0;
Inc(i);
end;
Inc(i);
end;
WriteLn('Task 2:');
for i := 0 to n - 1 do
begin
for j := 0 to m - 1 do
Write(ar[i, j]:4);
WriteLn;
end;
j := 0; flag := False;
while ((j < m) And (Not flag)) do
begin
i := 0;
while ((i < n) And (Not flag)) do
begin
flag := (ar[i, j] < 0) And (Not Odd(ar[i, j]));
Inc(i);
end;
Inc(j);
end;
if flag
then
begin
for k := j - 1 to m - 2 do
for i := 0 to n - 1 do
ar[i, k] := ar[i, k + 1];
Dec(m);
end;
WriteLn('Task 3:');
for i := 0 to n - 1 do
begin
for j := 0 to m - 1 do
Write(ar[i, j]:4);
WriteLn;
end;
if (m > 1)
then
for i := 0 to n - 1 do
begin
temp := ar[i, 1];
ar[i, 1] := ar[i, m - 2];
ar[i, m - 2] := temp;
end;
WriteLn('Task 4:');
for i := 0 to n - 1 do
begin
for j := 0 to m - 1 do
Write(ar[i, j]:4);
WriteLn;
end;
end.
Объяснение кода листинга программы
- Объявление переменных:
ar: двумерный массив байтов, используется для хранения данных;i, j, k, n, m, jMax: переменные для итерации и хранения чисел;temp: переменная для временного хранения значения элемента массива;flag: логическая переменная для проверки условий.
- Ввод размеров массива:
- Цикл повторяется, пока пользователь не введет корректное значение для
n(количество строк) от 1 до 128; - Цикл повторяется, пока пользователь не введет корректное значение для
m(количество столбцов), большее 0.
- Цикл повторяется, пока пользователь не введет корректное значение для
- Заполнение массива случайными числами и замена максимального элемента в каждой строке на 0:
- Заполнение массива
arслучайными числами от -99 до 99; - Определение максимального элемента в каждой строке и замена его на 0.
- Заполнение массива
- Вывод исходного массива.
- Задача 1:
- Вывод измененного массива после замены максимальных элементов на 0.
- Задача 2:
- Перемещение строк с числами, делящимися на 3 без остатка, вниз и вставка нулей вверху;
- Вывод измененного массива.
- Задача 3:
- Удаление столбцов, содержащих отрицательные и четные числа;
- Вывод измененного массива.
- Задача 4:
- Поменять местами значения второго и предпоследнего столбца в каждой строке;
- Вывод конечного массива.