Заменить максимальный элемент каждой строки матрицы на противоположный - 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.

Объяснение кода листинга программы

  1. Объявляются переменные:
    • nmax - константа, равная 10.
    • a - матрица целых чисел размером от 1 до nmax строк и от 1 до 2*nmax столбцов.
    • m, n, i, j, jmx, k, mx, x - целочисленные переменные.
    • randomize - процедура инициализации генератора случайных чисел.
  2. Вводится количество строк и столбцов для матрицы с помощью команд readln и write.
  3. Генерируется матрица из случайных чисел и выводится на экран.
  4. Поочередно для каждой строки происходит:
    • Поиск максимального элемента в строке
    • Замена найденного максимального элемента на противоположный
    • Вывод измененной строки на экран
  5. Находится максимальный элемент в матрице, затем происходит вставка столбцов из 0 за столбцами с максимальными элементами.
  6. Удаляются столбцы с отрицательными элементами.
  7. Происходит обмен первого и последнего столбцов матрицы.
  8. Итоговая матрица выводится на экран.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5
Похожие ответы