Страница 1 из 1

Помощь

Добавлено: 14 дек 2009, 20:49
d0ki
Задача: Определить номера строк и столбцов двумерного массива, которые равны между собой.

program p;
uses crt;
const m = 3;
var A:array[1..m,1..m] of byte;
B:array[1..m,1..m] of boolean;
i,j,k:byte;
begin clrscr;
for i:=1 to m do
begin
for j:=1 to m do
begin
a[i,j]:=random(2);
write(a[i,j]:2,' ');
end;
writeln
end;
for i:=1 to m do
for j:= 1 to m do
B[i,j]:=false;
for i:= 1 to m do begin
for j:= 1 to m do begin
k:=0;
while true do begin
k:=k+1;
if k>m then break;
if (not (A[i,k] = A[k,j])) then break;
if k=m then begin B[i,j]:= true; break end;
end;
end;
end;
for i:= 1 to m do
for j:=1 to m do
if B[i,j]=true then writeln('strochka ',i, ' sovpadaet so stolbcom ', j);
readln;
end.

Вроде пашет, но объясните мне плиз как работает эта строчка:while true do begin??

Re: Помощь

Добавлено: 15 дек 2009, 09:32
Хыиуду
while true do - это бесконечный цикл. Выход из него реализуется оператором break. Все вот это:
while true do begin
k:=k+1;
if k>m then break;
if (not (A[i,k] = A[k,j])) then break;
if k=m then begin B[i,j]:= true; break end;
end;
можно было выразить более понятно:
repeat
inc(k);
if k=m then B[i,j]:=true;
until (k>=m) or (A[i,k]<>A[k,j]);