Подскажите такое задание решается с помощью рекурсии или как-то по-другому? (Построить окружность вокруг которой расположено 8 окружностей меньшего радиуса,и вокруг каждой из этих окружностей расположено еще по 8 окружностей также меньшего радиуса и т.д.)
Lapp
9.06.2007 5:01
Цитата(Sensitive @ 9.06.2007 1:43)
решается с помощью рекурсии или как-то по-другому?
Конечно, рекурсия. То есть можно и по-другому - но зачем? Только определись с моментом остановки, иначе она "уйдет в себя"..
Вот, примерно так:
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;
У меня вот так вышло (идея судя по всему такая-же как предлагал 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.
Sensitive
11.06.2007 22:01
Вот,что получилось (делала так, как показано по ссылке 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.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.