В матрице А удалить строки, содержащие более трех отрицательных элементов и вывести соответствующее сообщение, если таких строк не окажется — Pascal(Паскаль)

uses crt;
var
   a:array[1..100,1..100] of integer;
   i,m,n,c,j,i1:integer;
begin
 
c:=0;
Writeln('РАЗМЕРНОСТЬ:');
readln(n);
readln(m);
 
for i:=1 to n do
for j:=1 to m do
readLn(a[i,j]);
writeln('Матрица:');
 
for i:=1 to n do
for j:=1 to m do
write(a[i,j],' ');
writeln;
writeln('Удаление:');
 
for i:=1 to n do
for j:=1 to m do  begin
if (a[i,j]>-3) then
inc(c)
else begin
a[i,j-c]:=a[i,j];
dec(n,c);
dec(m,c);
end;
if a[i,j]<-3 then Writeln('Таких строк нет!');
 
for i:=1 to n do
for j:=1 to m do
 
write(a[i,j],' ');
 
end;
end.

Следующий вариант

uses crt;
const nmax=20;//максимальный размер матрицы, чтобы дурацкие числа не вводили
var a:array[1..nmax,1..nmax] of integer;
    m,n,i,j,f,p,k,o:byte;
begin
clrscr;
randomize;
//ввод матрицы с проверкой правильности ее размеров
repeat
write('Количество строк до ',nmax,' n=');
readln(n);
until n in [1..nmax];
repeat
write('Количество столбцов до ',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)-8;
     write(a[i,j]:4);
    end;
   writeln;
 end;
writeln;
//подсчет отрицательных в строках и их удаление
i:=1;//первая строка
f:=0;//пока удаленных строк нет
while (i<=n)and(n>0) do//пока не последняя строка и вообще есть строки
 begin
  o:=0;//кол. отриц. в строке
  for j:=1 to m do
  if a[i,j]<0 then o:=o+1;//считаем
  if o>3 then//если больше 3
   begin
    f:=1;//фиксируем что есть такие
    if i=n then n:=n-1//если это последняя строка, просто обрезаем
    else//иначе
     begin
      for k:=1 to m do//все элементы строк, которые ниже ее
      for p:=i to n-1 do//сдвигаем вверх к данной строке
      a[p,k]:=a[p+1,k];
      n:=n-1;//уменьшаем кол. строк
     end
   end
  else i:=i+1;//если не больше 3, то смотрим следующую
 end;
if f=0 then write('Строк с более 3 отрицательных нет')
else if n=0 then write('Все строки удалены!')
else
 begin
  writeln('Строки с более 3 отрицательных удалены:');
  for i:=1 to n do
   begin
    for j:=1 to m do
    write(a[i,j]:4);
    writeln;
   end;
 end;
readln
end.

Leave a Comment

28 − = 25