IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> рекурсия вроде бы
Sensitive
сообщение 9.06.2007 0:43
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 132
Пол: Женский
Реальное имя: Юлия

Репутация: -  0  +


Подскажите такое задание решается с помощью рекурсии или как-то по-другому?
(Построить окружность вокруг которой расположено 8 окружностей меньшего радиуса,и вокруг каждой из этих окружностей расположено еще по 8 окружностей также меньшего радиуса и т.д.)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 9.06.2007 1:01
Сообщение #2


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Sensitive @ 9.06.2007 1:43) *

решается с помощью рекурсии или как-то по-другому?
Конечно, рекурсия. То есть можно и по-другому - но зачем? Только определись с моментом остановки, иначе она "уйдет в себя".. smile.gif

Вот, примерно так:
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;


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 9.06.2007 1:04
Сообщение #3


Гость






Да, это именно рекурсия...

Здесь глянь: Рекурсия. Планеты.
 К началу страницы 
+ Ответить 
Sensitive
сообщение 9.06.2007 12:51
Сообщение #4


Пионер
**

Группа: Пользователи
Сообщений: 132
Пол: Женский
Реальное имя: Юлия

Репутация: -  0  +


Спасибо Вам, я сделала программу!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 11.06.2007 16:37
Сообщение #5


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Показала бы чтоли что получилось smile.gif

Прикрепленное изображение

У меня вот так вышло (идея судя по всему такая-же как предлагал 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.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Sensitive
сообщение 11.06.2007 18:01
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 132
Пол: Женский
Реальное имя: Юлия

Репутация: -  0  +


Вот,что получилось (делала так, как показано по ссылке 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.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.07.2025 11:23
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"