По двумерным массивам - 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.