Другие языки программирования и технологии

Задача по Паскалю. Исправьте ошибки, пожалуйста.

Заполнить двумерный массив случайными числами и найти в нём седловую точку (число, наименьшее в строке и наибольшее в столбце)
Как её доделать, чтобы работала? Или предложите свой вариант.

Program name;
uses crt;
const
w=5; h=4;
var
a: array[1..w,1..h] of integer;
min,max,k,i,j,i1,i2,j2 : integer;
begin
randomize;
textbold;
for i:=1 to w do
for j:=1 to h do
begin
a[i,j]:=1+random(99);
write(a[i,j]);
end;
writeln;

writeln;
for i:=1 to w do
begin
min:=a[i,1];
j:=1;
max:=min;
j2:=1;
for k:=2 to h do
begin
if a[i,k] < min then
begin
min:=a[i,k];
j:=k;
end
else if a[i,k] > max then
max:=a[i,k];
j2:=k;
end;
end;
i1:=i;
i2:=i;
for k:=1 to w do
begin
if a[k,j] > min then
i1:=k;
if a[k,j2] < max then i2:=k;
end;

readln;

end.
Программа:
const
Rows = 5; Cols = 4;

var
a, min, max : array [1..Rows, 1..Cols] of integer;
Row, Col, Tmp : Integer;
Find : Boolean;

begin
randomize;
for Row := 1 to Rows do
begin
for Col := 1 to Cols do
begin
a[Row, Col] := 1 + random(99);
Write(a[Row, Col]:3);
min[Row, Col] := 0;
max[Row, Col] := 0;
end;
WriteLn;
end;

{ заполняем массив наименьших по строкам }
for Row := 1 to Rows do
begin
Tmp := 1;
for Col := 2 to Cols do if a[Row, Col] < a[Row, Tmp] then Tmp := Col;
min[Row, Tmp] := 1; { в адрес минимального элемента поставим 1 }
end;

{ заполняем массив наибольших по столбцам }
for Col := 1 to Cols do
begin
Tmp := 1;
for Row := 2 to Rows do if a[Row, Col] > a[Tmp, Col] then Tmp := Row;
max[Tmp, Col] := 1; { в адрес максимального элемента поставим 1 }
end;

{ если в min и max единица совпадает, то это седловая точка }
WriteLn('Седловая точка - это число наименьшее в строке, наибольшее в столбце: ');
Find := False;
for Row := 1 to Rows do
for Col := 1 to Cols do
if min[Row, Col] = 1 then
if max[Row, Col] = 1 then
begin
Find := True; { есть такая точка }
WriteLn('Седловая точка a[', Row, ',', Col, '] = ', a[Row, Col]);
end;
if Not Find then
WriteLn('Седловых точек нет. ');
end.
Результаты работы:
1) вот такая точка
97 40 43 37
92 39 74 23
93 56 62 98
64 55 86 11
92 1 5 54
Седловая точка - это число наименьшее в строке, наибольшее в столбце:
Седловая точка a[3,2] = 56
2) но чаще вот так
23 71 15 24
60 28 89 63
32 58 28 84
24 44 75 18
59 3 84 21
Седловая точка - это число наименьшее в строке, наибольшее в столбце:
Седловых точек нет.
Андрей=) Майер
Андрей=) Майер
60 485
Лучший ответ
Тебе повезло, у меня такая уже есть)
Вроде седловые точки только для квадратных массивов (число строк= числу столбцов)
Программа сделана функциями

program Pr;

Const n = 6;
Type myMas = Array [ 1 .. n, 1 .. n ] of integer;
Var
mas : myMas;
i, j, max, min : Integer;

function isMinInStb( a : myMas; x, y : integer ) : boolean;
var i, mn : integer;
begin
isMinInStb := false;
mn := 1;
for i := 2 to n do if a[ mn, y ] > a[ i, y ] then mn := i;
if x = mn then isMinInStb := true;
end;

function isMaxInStb( a : myMas; x, y : integer ) : boolean;
var i, mx : integer;
begin
isMaxInStb := false;
mx := 1;
for i := 2 to n do if a[ mx, y ] < a[ i, y ] then mx := i;
if x = mx then isMaxInStb := true;
end;

begin
Randomize;
for i := 1 to n do
begin
for j := 1 to n do
begin
mas[ i, j ] := random(100);
Write( mas[ i, j ]:5 );
end;
WriteLn;
end;
WriteLn;
for i := 1 to n do
begin
min := 1;
max := 1;
for j := 2 to n do
begin
if mas[ i, min ] > mas[ i, j ] then min := j;
if mas[ i, max ] < mas[ i, j ] then max := j;
end;
if isMinInStb( mas, i, max ) then WriteLn( 'A[ ', i, ', ', max, ' ]' );
if isMaxInStb( mas, i, min ) then WriteLn( 'A[ ', i, ', ', min, ' ]' );
end;
ReadLn;
end.
Dilshod Tulyaganov
Dilshod Tulyaganov
17 142