Вам надо "вывалиться" из цикла при первом же не совпадении, а не прогонять цикл до конца, т.е. если переписать вашу функцию:
Код:
function Test(A: matrix;k:integer):boolean;
var i:integer;
begin
Test:=true;
if k=n then
for i:=1 to n do
if A[k,i]<>A[1,i] then
begin
Test:=false;
exit; {* сразу выйдем из функции, дальше смысла проверять нет *}
end;
// if k<>n then это заменим на else
else
for i:=1 to n do
if A[k,i]<>A[k+1,i] then
begin
Test:=false;
exit; {* сразу выйдем из функции, дальше смысла проверять нет *}
end;
end;
вместо exit, можно использовать break, в данном случае это не принципиально.