Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 50
1

По заданному натуральному числу n построить систему из n вложенных друг в друга многоугольников

14.05.2014, 17:00. Показов 1286. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пусть на плоскости задан правильный n-угольник, вписанный в единичную окружность, одна из вершин которого имеет координаты (cos(a ), sin(a )), где a - некоторый угол. Второй правильный n-угольник строится так, что его вершины являются серединами сторон первого многоугольника и т. д. Составить рекурсивную программу-функцию, которая по заданному натуральному числу n строит систему из n вложенных друг в друга описанным образом многоугольников, точнее создает массив точек, последовательное соединение которых на плоскости отрезками и формирует эту систему


Написать рекурсивную функцию по алгоритму
Миниатюры
По заданному натуральному числу n построить систему из n вложенных друг в друга многоугольников  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.05.2014, 17:00
Ответы с готовыми решениями:

Построить по заданному натуральному числу N список, состоящий из натуральных чисел от N до 1
Создайте предикат, порождающий по заданному натуральному числу N список, состоящий из натуральных...

Построить 30 вложенных друг в друга квадратов ("колодец"), закрасить его отдельные части в разные цвета
Помогите пожалуйста с программами. 2) Построить 30 вложенных друг в друга квадратов ("колодец"),...

Создание вложенных папок друг в друга
Здравствуйте ! Помогите создать (улучшить батник) для копирования . Смысл заключается в том что...

Суммарный объём вложенных в друг друга коробок
Добрый день! Пожалуйста, помогите составить программу. До меня никак не доходит) Заранее спасибо! ...

6
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
14.05.2014, 19:57 2
И где Вы этот малопонятный алгоритм взяли? Задача вроде намного проще алгоритма.
0
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 50
14.05.2014, 20:21  [ТС] 3
Цитата Сообщение от Puporev Посмотреть сообщение
И где Вы этот малопонятный алгоритм взяли? Задача вроде намного проще алгоритма.
http://study.sfu-kras.ru/DATA/... b_polg.htm
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
14.05.2014, 20:28 4
Так назагибают что простую задачу фиг решишь...
0
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 50
14.05.2014, 20:54  [ТС] 5
Цитата Сообщение от Puporev Посмотреть сообщение
Так назагибают что простую задачу фиг решишь...
Как я понял для написания данной рекурсивные функции нужно написать еще эти две, но изложить это в код у меня не получается
Миниатюры
По заданному натуральному числу n построить систему из n вложенных друг в друга многоугольников  
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
14.05.2014, 21:04 6
Лучший ответ Сообщение было отмечено fourston как решение

Решение

Вот пример такого рекурсивного построения, но намного проще. Здесь все правильное, бес искажения, но это легко поправить. А то что там написано я не понимаю, не математик....
Это писалось в простом АВС
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
uses graphABC;
type point=record
           x,y:integer
           end;
      pl=array[1..20] of point;
//рекурсивная функция
function Mng(xc,yc,r,k:integer;var p:pl;n:integer):integer;
var j:byte;
begin
if n=0 then Mng:=0
else
 begin
  polygon(p,k+1);
  dec(n);
  for j:=1 to k do
   begin
    p[j].x:=p[j].x+round((p[j+1].x-p[j].x)*0.5);
    p[j].y:=p[j].y+round((p[j+1].y-p[j].y)*0.5);
   end;
  p[k+1]:=p[1];
  Mng:=Mng(xc,yc,r,k,p,n);
 end;
end;
 
var n,k,r,i,xc,yc:integer;
    p:pl;
    u,m:real;
begin
setwindowsize(500,500);
r:=200; //радиус масштабирования, одинаковый по обеим осям
n:=20; //количество n-угольников
k:=5;//количество вершин
xc:=windowwidth div 2;//центр экрана
yc:=windowheight div 2;
u:=pi/6;//начальный угол
for i:=1 to k+1 do
 begin
  p[i].x:=xc+round(r*cos(u));
  p[i].y:=yc-round(r*sin(u));
  u:=u+2*pi/k
 end;
Mng(xc,yc,r,k,p,n);
end.
Добавлено через 4 минуты
Вот с разными масштабами по осям. Кстати параметр r в функции лишний.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
uses graphABC;
type point=record
           x,y:integer
           end;
      pl=array[1..20] of point;
//рекурсивная функция
function Mng(xc,yc,k:integer;var p:pl;n:integer):integer;
var j:byte;
begin
if n=0 then Mng:=0
else
 begin
  polygon(p,k+1);
  dec(n);
  for j:=1 to k do
   begin
    p[j].x:=p[j].x+round((p[j+1].x-p[j].x)*0.5);
    p[j].y:=p[j].y+round((p[j+1].y-p[j].y)*0.5);
   end;
  p[k+1]:=p[1];
  Mng:=Mng(xc,yc,k,p,n);
 end;
end;
 
var n,k,rx,ry,i,xc,yc:integer;
    p:pl;
    u,m:real;
begin
setwindowsize(500,500);
rx:=150; //радиус масштабирования, одинаковый по обеим осям
ry:=100;
n:=20; //количество n-угольников
k:=6;//количество вершин
xc:=windowwidth div 2;//центр экрана
yc:=windowheight div 2;
u:=pi/6;//начальный угол
for i:=1 to k+1 do
 begin
  p[i].x:=xc+round(rx*cos(u));
  p[i].y:=yc-round(ry*sin(u));
  u:=u+2*pi/k
 end;
Mng(xc,yc,k,p,n);
end.
1
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 50
14.05.2014, 21:52  [ТС] 7
спасибо большое, теперь разобрался!
0
14.05.2014, 21:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.05.2014, 21:52
Помогаю со студенческими работами здесь

Посчитать количество инструкций for вложенных друг в друга
Лабораторная 1 курс. Текст представляет собой программу на языке Си . Посчитать количество...

По заданному натуральному числу N определите является ли оно трехзначным
По заданному натуральному числу N определите является ли оно трёхзначным. Формат входных данных...

Создайте приложение, которое по заданному натуральному числу N вычисляет N!
Создайте приложение, которое по заданному натуральному числу N вычисляет N!. C#

Вывести на экран 10 вложенных в друг друга закрашенных прямоугольников
вывести на экран 10 вложенных в друг друга закрашенных прямоугольников. в паскале


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru