Pers.narod.ru. Алгоритмы. Окружность из единичек в нулевой матрице |
Сформировать матрицу A[21,21], заполненную нулями. Построить в этой матрице элементами, равными 1, окружность радиуса R, не превышающего 10. Центр окружности зафиксирован в элементе a[11,11]. Радиус R задать вводом.
Всё равно, в каком элементе находится центр окружности,
пусть это будет точка с целочисленными координатами (cx, cy).
В круг радиуса R попадают элементы, для которых выполняется
sqr(i-cx)+sqr(j-cy) <= sqr(r)
при i=1..n, j=1..n.
Поскольку о быстродействии ничего не сказано,
а размерность матрицы заведомо ограничена,
во втором двойном цикле просто исключим в каждой строке все единички,
кроме первой и последней.
const n=21; cx=11; cy=11;
var a:array [1..n,1..n] of integer;
i,j,r:integer;
begin
for i:=1 to n do for j:=1 to n do a[i,j]:=0;
write ('R='); read (r);
for i:=1 to n do
for j:=1 to n do
if sqr(i-cx)+sqr(j-cy) <= sqr(r) then a[i,j]:=1;
for i:=1 to n do begin
j:=1;
while a[i,j]=0 do begin inc(j); if j=n then break; end;
if j<n then begin
repeat
inc(j);
if (j=n) or (a[i,j+1]=0) then break
else a[i,j]:=0;
until j=n;
end;
end;
for i:=1 to n do begin
writeln;
for j:=1 to n do write (a[i,j]:2);
end;
reset (input); readln;
end.
Вот что вышло при R=10:
|
|