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:
гостевая; E-mail |