Заменить максимальный элемент каждой строки матрицы на противоположный - Pascal (80574)
Формулировка задачи:
Дан двумерный массив размером n*m, заполненный случайным образом.
1. Заменить максимальный элемент каждой строки на противоположный.
2. Вставить после всех столбцов, содержащий максимальный элемент столбцов из нулей.
3. Удалить все столбцы, в которых есть отрицательный элемент.
4. Поменять местами первый и последний столбцы.
все в одной программе нужно
Решение задачи: «Заменить максимальный элемент каждой строки матрицы на противоположный»
textual
Листинг программы
const nmax=10;
var a:array[1..nmax,1..2*nmax] of integer;
m,n,i,j,jmx,k:byte;
mx,x:integer;
begin
randomize;
repeat
write('Количество строк от 2 до ',nmax,' n=');
readln(n);
until n in [2..nmax];
repeat
write('Количество столбцов от 2 до ',nmax,' m=');
readln(m);
until m in [1..nmax];
writeln('Исходная матрица:');
for i:=1 to n do
begin
for j:=1 to m do
begin
a[i,j]:=random(20);
write(a[i,j]:4);
end;
writeln;
end;
{пункт 1}
for i:=1 to n do
begin
jmx:=1;
for j:=1 to m do
if a[i,j]>a[i,jmx] then jmx:=j;
a[i,jmx]:=-a[i,jmx];
end;
writeln('Замена максимальных в строках на противположные');
for i:=1 to n do
begin
for j:=1 to m do
write(a[i,j]:4);
writeln;
end;
{пункт 2}
mx:=a[1,1];
for i:=1 to n do
for j:=1 to m do
if a[i,j]>mx then mx:=a[i,j];
writeln('Максимальный элемент матрицы=',mx);
j:=1;
while j<=m do
begin
i:=1;
k:=0;
while(i<=n)and(k=0) do
if a[i,j]=mx then k:=1
else inc(i);
if k=1 then
begin
inc(m);
if j=m-1 then
for i:=1 to n do
a[i,m]:=0
else
begin
for k:=m downto j+2 do
for i:=1 to n do
a[i,k]:=a[i,k-1];
for i:=1 to n do
a[i,j+1]:=0;
end;
inc(j,2);
end
else inc(j);
end;
writeln('Вставка столбцов из 0 за столбцами с максимальным');
for i:=1 to n do
begin
for j:=1 to m do
write(a[i,j]:4);
writeln;
end;
{пункт 3}
j:=1;
while j<=m do
begin
k:=0;
i:=1;
while(i<=n)and(k=0) do
if a[i,j]<0 then k:=1
else inc(i);
if k=1 then
begin
if j<m then
begin
for k:=j to m-1 do
for i:=1 to n do
a[i,k]:=a[i,k+1];
end;
dec(m);
end
else inc(j);
end;
writeln('Удаление столбцов с отрицательными элементами');
for i:=1 to n do
begin
for j:=1 to m do
write(a[i,j]:4);
writeln;
end;
{пункт 4}
for i:=1 to n do
begin
x:=a[i,1];
a[i,1]:=a[i,m];
a[i,m]:=x;
end;
writeln('Обмен первого и последнего столбцов');
for i:=1 to n do
begin
for j:=1 to m do
write(a[i,j]:4);
writeln;
end;
end.
Объяснение кода листинга программы
- Объявляются переменные:
nmax- константа, равная 10.a- матрица целых чисел размером от 1 доnmaxстрок и от 1 до2*nmaxстолбцов.m,n,i,j,jmx,k,mx,x- целочисленные переменные.randomize- процедура инициализации генератора случайных чисел.
- Вводится количество строк и столбцов для матрицы с помощью команд
readlnиwrite. - Генерируется матрица из случайных чисел и выводится на экран.
- Поочередно для каждой строки происходит:
- Поиск максимального элемента в строке
- Замена найденного максимального элемента на противоположный
- Вывод измененной строки на экран
- Находится максимальный элемент в матрице, затем происходит вставка столбцов из 0 за столбцами с максимальными элементами.
- Удаляются столбцы с отрицательными элементами.
- Происходит обмен первого и последнего столбцов матрицы.
- Итоговая матрица выводится на экран.