Подскажите такое задание решается с помощью рекурсии или как-то по-другому?
(Построить окружность вокруг которой расположено 8 окружностей меньшего радиуса,и вокруг каждой из этих окружностей расположено еще по 8 окружностей также меньшего радиуса и т.д.)
procedure Circles(x,y,r:integer);
begin
if r>0 then begin
Circle(x,y,r);
for i:=1 to 8 do Circles({тут вычисленные значения центров и рудиусов})
end
end;
Да, это именно рекурсия...
Здесь глянь: http://forum.sources.ru/index.php?showtopic=157133&view=findpost&p=1295438
Спасибо Вам, я сделала программу!
Показала бы чтоли что получилось
У меня вот так вышло (идея судя по всему такая-же как предлагал Lapp):
uses crt, graph;
function _x (const angle: Integer; const cx, len: integer): Integer;
begin _x := round(cx + len * cos(45*angle / 180 * pi)); end;
function _y (const angle: Integer; const cy, len: integer): Integer;
begin _y := round(cy - len * sin(45*angle / 180 * pi)); end;
procedure Circles(cx, cy, radius, deep: Integer);
var
angle: Integer;
begin
if deep > 0 then begin
dec(deep);
for angle := 0 to 7 do begin
Circle (_x(angle, cx, radius * 2), _y(angle, cy, radius * 2), radius div 3);
Circles (_x(angle, cx, radius * 2), _y(angle, cy, radius * 2), radius div 4, deep);
end;
end;
end;
var
gd, gm: Integer;
begin
gd := detect;
initgraph(gd, gm, '');
Circle(GetMaxX div 2, GetMaxY div 2, 120);
Circles(GetMaxX div 2, GetMaxY div 2, 120, 3);
readkey;
closegraph;
end.
Вот,что получилось (делала так, как показано по ссылке volvo)
uses crt,graph;
var x,y,r,n:integer;
Procedure circles(x,y,pr,r,n:integer);
var i:integer;
newX,newY:integer;
const angle=pi/4;
begin
setcolor(lightgreen);
circle(x,y,pr);
if n>1 then
for i:=1 to 8 do begin
circles(x+trunc(r*sin(i*angle)),y-trunc(r*cos(i*angle)),pr div 4,r div 3,n-1);
end;
end;
begin
writeln('Vvedite glubinu rekursii-');
readln(n);
init;
circles(getmaxx div 2,getmaxy div 2,40,160,n);
readkey;
closegraph;
end.