Заменить максимальный элемент каждой строки матрицы на противоположный - 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 за столбцами с максимальными элементами.
- Удаляются столбцы с отрицательными элементами.
- Происходит обмен первого и последнего столбцов матрицы.
- Итоговая матрица выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д