Дан двумерный массив размерностью 5×8, заполненный случайным образом.1- заменить все отрицательные элементы на нули.2- вставить перед всеми стоками, первый элемент которых делится на 5, строку из цифр 5.3- удалить столбец, в котором находится первый нечетный положительный элемент.4- поменять местами второй и последний столбцы — Pascal(Паскаль)

uses crt;
const n=5;
      m=8;
type mas=array[1..2*n,1..m] of integer;
procedure Vyvod(var mt:mas;x,y:integer);
var i,j:integer;
begin
for i:=1 to x do
 begin
  for j:=1 to y do
  write(mt[i,j]:5);
  writeln;
 end;
writeln;
end;
var a,b:mas;
    i,j,k,f,x,l,t:integer;
begin
clrscr;
randomize;
{создание исходной матрицы}
for i:=1 to n do
for j:=1 to m do
 repeat
  a[i,j]:=random(30)-10;
 until not(a[i,j] in [0]);{делаем матрицу без нолей}
writeln('Исходная матрица:');
Vyvod(a,n,m);
{замена отрицательных нолями пункт 1}
b:=a;f:=0;
for i:=1 to n do
for j:=1 to m do
if b[i,j]<0 then
 begin
  f:=1;
  b[i,j]:=0;
 end;
if f=0 then writeln('Отрицательных элементов нет!')
else
 begin
  writeln('Замена отрицательных на 0:');
  Vyvod(b,n,m);
 end;
write('Press Enter...');
readln;
clrscr;
{вставка строк по пункту 2}
writeln('Исходная матрица:');
Vyvod(a,n,m);
k:=n;b:=a;
f:=0;
i:=k;{встаем в последнюю строку}
while i>=1 do {идем к началу}
 begin
  if b[i,1] mod 5=0 then{если первый элемент кратен 5}
   begin
    f:=1;
    for l:=1 to m do{все элементы строк}
     begin
      for t:=k+1 downto i do{от последней до данной сдвигаем вверх}
      b[t,l]:=b[t-1,l];
      b[i,l]:=5;{на это место пишем строку из 5}
     end;
    k:=k+1;{увеличиваем количество строк}
    i:=i-1;{смотрим следующую}
   end
  else i:=i-1;{если не кратный}
 end;
if f=0 then writeln('Строк где первый элемент кратен 5 нет!')
else
 begin
  writeln('Вставка строк перед теми где первый элемент кратен 5:');
  Vyvod(b,k,m);
 end;
write('Press Enter...');
readln;
clrscr;
{удаление столбца по пункту 3}
writeln('Исходная матрица:');
Vyvod(a,n,m);
b:=a;x:=m;
k:=0;
for j:=m downto 1 do//здесь была ошибка вместо m было х
 begin
  t:=0;
  for i:=1 to n do
  if (a[i,j]>0)and odd(a[i,j]) then t:=1;
  if t=1 then k:=j;
 end;
if k=0 then writeln('Нечетных положительных элементов нет!')
else
 begin
  writeln('Удаление столбца № ',k,' с первым нечетным положительным элементом:');
  if k=x then x:=x-1
  else
   begin
    for i:=1 to n do
    for j:=k to x-1 do
    b[i,j]:=b[i,j+1];
    x:=x-1;
   end;
  writeln('Результат удаления столбца:');
  Vyvod(b,n,x);
 end;
write('Press Enter...');
readln;
clrscr;
{обмен 2 и последнего столбцов}
writeln('Исходная матрица:');
Vyvod(a,n,m);
b:=a;
for i:=1 to n do
 begin
  x:=b[i,2];
  b[i,2]:=b[i,m];
  b[i,m]:=x;//здесь была ошибка вместо m, m-1
 end;
writeln('Обмен второго и последнего столбцов:');
Vyvod(b,n,m);
write('Press Enter...');
readln
end.

Leave a Comment

95 − = 90