-вывести на экран элементы этой матрицы с наименьшими значениями,
начиная с a(1,1) и продолжая в строку ниже строго в направлениях: вниз,влево-вниз,вправо-вниз
-вывести сумму значений этих «наименьших» элементов.
например:
1 2 3 4
2 3 1 4
4 3 1 2
2 3 4 1
{ а(1 1) первый , идем вниз а(2 1) , оттуда можно в последний столбец в а(3 4) , а оттуда в а(4 4)}
a(1 1) + a(2 1) + a(3 4) + a(4 4)
1 + 2 + 2 + 1 = 6
Program xa;
uses
crt;
function min(a,b:byte):byte;
begin
if a<b then
min:=a
else
min:=b;
end;
var
matr:array [1..9,1..9] of byte;
mas:array [1..9] of byte;
m:set of byte;
i,j,n,tmp,sum,jj:byte;
begin
randomize;
repeat
clrscr;
Writeln('VVedute N. N>3 u N<10');
Write('N=');
readln(n);
until (n>3) and (n<10);
for i:=1 to n do
begin
m:=[];
for j:=1 to n do
begin
repeat
tmp:=random(9)+1;
until not (tmp in m);
m:=m+[tmp];
matr[i,j]:=tmp;
end;
end;
clrscr;
Writeln('MatpuL/a ');
writeln;
for i:=1 to n do
begin
for j:=1 to n do
Write(matr[i,j], ' ');
writeln
end;
sum:=matr[1,1];
jj:=1;
mas[1]:=1;
for i:=2 to n do
begin
if jj=1 then
tmp:=min(min(matr[i,n],matr[i,jj]),matr[i,jj+1])
else
if jj=n then
tmp:=min(min(matr[i,n-1],matr[i,n]),matr[i,1])
else
tmp:=min(min(matr[i,jj-1],matr[i,jj]),matr[i,jj+1]);
for j:=1 to n do
if matr[i,j]=tmp then
mas[i]:=j;
inc(sum,tmp);
jj:=mas[i];
end;
writeln;
Writeln('HaLLIb /7yt''');
writeln;
for i:=1 to n do
begin
for j:=2 to mas[i] do
write(' ');
writeln(matr[i,mas[i]])
end;
writeln;
Writeln('Sum= ',sum);
readkey
end.
Вариант 2
Program xa;
uses
crt;
function min(a,b:byte):byte;
begin
if a<b then
min:=a
else
min:=b;
end;
var
matr:array [1..9,1..9] of byte;
mas:array [1..9] of byte;
m:set of byte;
i,j,n,tmp,sum,jj:byte;
c:char;
begin
randomize;
repeat
n:=4+random(6);
for i:=1 to n do
begin
m:=[];
for j:=1 to n do
begin
repeat
tmp:=random(9)+1;
until not (tmp in m);
m:=m+[tmp];
matr[i,j]:=tmp;
end;
end;
clrscr;
Writeln('MatpuL/a ');
writeln;
for i:=1 to n do
begin
for j:=1 to n do
Write(matr[i,j], ' ');
writeln
end;
sum:=matr[1,1];
jj:=1;
mas[1]:=1;
for i:=2 to n do
begin
if jj=1 then
tmp:=min(min(matr[i,n],matr[i,jj]),matr[i,jj+1])
else
if jj=n then
tmp:=min(min(matr[i,n-1],matr[i,n]),matr[i,1])
else
tmp:=min(min(matr[i,jj-1],matr[i,jj]),matr[i,jj+1]);
for j:=1 to n do
if matr[i,j]=tmp then
mas[i]:=j;
inc(sum,tmp);
jj:=mas[i];
end;
writeln;
Writeln('HaLLIb /7yt''');
writeln;
for i:=1 to n do
begin
for j:=2 to mas[i] do
write(' ');
writeln(matr[i,mas[i]])
end;
writeln;
Writeln('Sum= ',sum);
Writeln;Writeln('}l{elaete povtoput'' deuctvuia? (Y/N)');
c:=readkey
until (c<>'y') and (c<>'Y') and (c<>#13);
end.