program PuntodeSilla;
const
Max=5;
type
t_matriz=array[1..Max,1..Max]of integer;
function mincolum(m:t_matriz;col:integer):integer;
var
i,min:integer;
begin
min:=m[1,col];mincolum:=1;
for i:=2 to Max do
begin
if m[i,col]<min then
begin
min:=m[i,col];mincolum:=i;
end
else if m[i,col]=min then
mincolum:=0;
end;
end;
function maxfila(m:t_matriz;f:integer):integer;
var
i,max:integer;
begin
max:=m[f,1];maxfila:=1;
for i:=2 to Max do
begin
if m[f,i]>max then
begin
max:=m[f,i]; maxfila:=i;
end
else if m[f,i]=max then
maxfila:=0;
end;
end;
procedure comparar(m:t_matriz);
var
fila,c,f:integer;
encontrado:boolean;
begin
encontrado:=false;
fila:=1;
c:=maxfila(m,fila);
f:=mincolum(m,c);
if (fila=f) and not (c=0) then
encontrado:=true;
fila:=fila+1;
while (fila<=max) and not (encontrado) do
begin
c:=maxfila(m,fila);
f:=mincolum(m,c);
if ((fila<>f) or (c=0)) then
begin
fila:=fila+1;
end
else encontrado:=true;
end;
if encontrado=true then
writeln('Punto de silla en la matriz, en la posición ',fila,' ',c,'y con valor ',m[fila,c])
else writeln('No existe punto de silla');
end;
procedure rellenar(var m:t_matriz);
var
i,j:integer;
begin
for i:=1 to Max do
for j:=1 to Max do
begin
writeln('Introduce el valor para ',i,' ',j,' :');
readln(m[i,j]);
end
end;
procedure visualizar(m:t_matriz);
var
i,j:integer;
begin
for i:=1 to Max do
begin
for j:=1 to Max do
write(m[i,j],' ');
writeln
end;
end;
procedure general;
var
m:t_matriz;
begin
rellenar(m);
visualizar(m);
comparar(m);
end;
begin
general;
end.