По двумерным массивам - Pascal (92843)

Узнай цену своей работы

Формулировка задачи:

дана целочисленная квадратная матрица. Определить: 1)сумму элементов в тех столбцах, которые не содержат отрицательных элементов(оформить в виде функции); 2) Минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы(оформить в виде процидуры). заранее спасибо!

Решение задачи: «По двумерным массивам»

textual
Листинг программы
uses crt;
const nmax=20;
type matr=array[1..nmax,1..nmax] of integer;
function Summa(mt:matr;x:byte):integer;
var i,j,k,p:byte;
    s:integer;
begin
s:=0;
for j:=1 to x do
 begin
  k:=0;
  for i:=1 to x do
  if mt[i,j]<0 then k:=1;
  if k=0 then
  for p:=1 to x do
  s:=s+mt[p,j];
 end;
Summa:=s;
end;
procedure PobDiag(mt:matr;x:byte);
var i,j,l:byte;
    min,sum:integer;
begin
min:=abs(mt[1,1]);
For l:=1 to 2*x-1 do{количество диагоналей}
  begin
    sum:=0;
    if l<=x then{выше диагонали и она, если саму дагональ не нужно, то
                 if l<x}
      begin
       for i:=1 to l do
       for j:=1 to l do
       if j=l-i+1 then sum:=sum+abs(mt[i,j]);
       if sum<min then min:=sum;
      end
    else if l>x then{ниже диагонали}
      begin
       for i:=l-x+1 to x do
       for j:=l-x+1 to x do
       if j=l-i+1 then sum:=sum+abs(mt[i,j]);
       if sum<min then min:=sum;
      end;
  writeln('Сумма модудей диагонали ',l,'=',sum:4);
 end;
writeln;
write('Минимальная сумма=',min);
readln
end;
var a:matr;
    n,i,j:byte;
begin
clrscr;
randomize;
repeat
write('Размер матрицы до ',nmax,' n=');
readln(n);
until n in [1..nmax];
writeln('Матрица:');
for i:=1 to n do
 begin
  for j:=1 to n do
   begin
    a[i,j]:=random(20)-4;
    write(a[i,j]:4);
   end;
  writeln;
 end;
writeln;
writeln('Сумма элементов в тех столбцах, где нет отрицательных элементов=',Summa(a,n));
writeln;
PobDiag(a,n);
end.

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

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