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:

Окружность из единичек в нулевой матрице

Рейтинг@Mail.ru

вверх гостевая; E-mail
Hosted by uCoz