Дана целочисленная квадратная матрица. Определить: 1) сумму элементов в тех строках, которые не содержат отрицательных элементов; 2) минимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы — Pascal(Паскаль)

uses crt;
const max=20;
type mas=array[1..max] of integer;{строка матрицы}
     matr=array[1..max] of mas;{масив строк - матрица}
procedure Vvod(var mt:matr;var x:byte);{ввод данных в матрицу и вывод ее на экран}
var i,j:byte;
begin
write('Размер матрицы = ');
readln(x);
writeln('Матрица:');
for i:=1 to x do
 begin
  for j:=1 to x do
   begin
    mt[i,j]:=random(20)-2;
    write(mt[i,j]:5);
   end;
  writeln;
 end;
writeln;
end;
function NoOtr(v:mas;x:byte):boolean;{определяем есть ли отрицательные в строке}
var i:byte;
begin
NoOtr:=true;{нет}
for i:=1 to x do
if v[i]<0 then
 begin
  NoOtr:=false;{есть}
  break;
 end;
end;
function SumStr(v:mas;x:byte):integer;{сумма в строке}
var i:byte;
    s:integer;
begin
s:=0;
for i:=1 to x do
s:=s+v[i];
SumStr:=s;
end;
procedure VyvSumm(mt:matr;x:byte);{вывод сумм в строках без отрицательных}
var i:byte;
begin
writeln('Суммы в строках, где нет отрицатедьных элементов:');
for i:=1 to x do
if NoOtr(mt[i],x) then{если нет отрицательных}
writeln('Сумма в строке ',i,'=',SumStr(mt[i],x));{выводим сумму}
writeln;
write('Press Enter...');
readln;
end;
Function SumDg(mt:matr;x,k:integer):integer;{подсчет сумм в диагоналях, параллельных главным}
var i,j,sum:integer;
begin
sum:=0;
if k<=x then{выше главной и на ней}
 begin
  for i:=x-k+1 to x do
  for j:=1 to k do
  if j=i-x+k then sum:=sum+mt[i,j];
 end
else{ниже главной}
 begin
  for i:=1 to 2*x-k do
  for j:=k-x+1 to x do
  if j=i+k-x then sum:=sum+mt[i,j];
 end;
SumDg:=sum;
end;
function Min(mt:matr;x:byte):integer;{нахождение мимальной суммы}
var i,j,k:byte;
    mn:integer;
begin
mn:=maxint;
for k:=1 to 2*x-1 do{смотрим все диагонали}
if SumDg(mt,x,k)<mn then mn:=SumDg(mt,x,k);{ищем минимальную сумму}
Min:=mn;
end;
procedure VyvDg(mt:matr;x:byte);{вывод сумм по диагоналям и минимальной суммы}
var k:byte;
begin
writeln('Суммы по диагоналям, параллельных главным:');
for k:=1 to 2*x-1 do
writeln('Сумма диагонали ',k,'=',SumDg(mt,x,k));
writeln('Минимальная сумма=',Min(mt,x));
end;
var n:byte;
    a:matr;
    v:mas;
begin
clrscr;
randomize;
Vvod(a,n);
VyvSumm(a,n);
VyvDg(a,n);
readln;
end.

Leave a Comment

+ 50 = 60