Задача: Определить номера строк и столбцов двумерного массива, которые равны между собой.
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??
Помощь
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]);
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]);
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.