close

Вход

Забыли?

вход по аккаунту

?

рекурсия2

код для вставки
программирование паскаль
(урок 2)
Тема урока:
Рекурсивные методы в построении графических изображений.
Цель урока:
Дать определение рекурсивного метода в построении графических изображений
Научить использовать рекурсивные процедуры при составлении программ
Развивать логическое мышление. Повышать уровень компьютерной грамотности.
Рекурсивное построение "сателлитов"
Вокруг базовой фигуры (здесь окружность) строится
несколько ее копий уменьшенного размера, далее процесс
рекурсивно повторяется для каждой из копий (см. файл satellit.pas).
uses Crt, Graph;
var Gd,Gm,m,n: integer;
x,y, r,r1, ks,kr: double;
PROCEDURE SAT( x,y,r,r1: double; n: integer);
var x1,y1: double; i: Integer;
{ от фигуры размером r с центром x,y рекурсивно строится m фигур-сателлитов
размером r=r/ks равномерно по периметру на расстоянии r1=kr*r }
begin
If n=0 then EXIT;
{ прерывание рекурсивного вызова }
setcolor(15-n); { цвет очередной рекурсивной группы }
circle(round(x),round(y),round(r));
{ вывод фигуры }
r1:=kr*r;
{ расстояние до фигур-сателлитов }
{ рекурсивные вызовы }
For i:=1 to m do begin
x1:= x+r1*cos(2*pi*i/m); { координаты центра i-го сателлита }
y1:= y+r1*sin(2*pi*i/m);
SAT( x1,y1,r/ks,r1,n-1)
end
End;
begin
Gd:=0; InitGraph(Gd,Gm,'');
x:=GetMaxX div 2; { центр начальной фигуры }
y:=GetMaxY div 2;
ks:=3;
kr:=2;
m:=6;
r:=90;
n:=5;
SAT( x,y,r,r1,n);
{
{
{
{
{
коэффициент уменьшения размера сателлитов }
отношение радиуса орбиты к размеру фигуры }
число сателлитов }
размер начальной фигуры }
глубина рекурсии }
readkey; CloseGraph end.
Построить треугольник, который делится на четыре части своими средними линиями;
центральная часть остаётся пустой, а к трём крайним применяется та же процедура.
Построение повторяется n раз, где n порядок фигуры.
uses graph;
var x1,x2,x3,y1,y2,y3:real;
n,gd,gm:integer;
procedure triang(x1,y1,x2,y2,x3,y3:REAL);
begin {Процедура построения треугольника }
line(round(x1),round(y1),round(x2),round(y2));
1
line(round(x2),round(y2),round(x3),round(y3));
line(round(x3),round(y3),round(x1),round(y1));
end;
procedure tr(x1,y1,x2,y2,x3,y3:REAL;n:integer);
var x1n,y1n,x2n,y2n,x3n,y3n:REAL;
begin if n>0 then begin x1n:=(x1+x2)/2; y1n:=(y1+y2)/2;
x2n:=(x2+x3)/2; y2n:=(y2+y3)/2;{Нахождение координат }
x3n:=(x1+x3)/2; y3n:=(y1+y3)/2;{середин сторон }
triang(x1n,y1n,x2n,y2n,x3n,y3n);{Треугольник в центре}
tr(x1,y1,x1n,y1n,x3n,y3n,n-1);{Обработка крайних }
tr(x2,y2,x1n,y1n,x2n,y2n,n-1);{треугольников}
tr(x3,y3,x2n,y2n,x3n,y3n,n-1);end;end;
begin
write('vvedite x1,y1,x2,y2,x3,y3');
readln(x1,y1,x2,y2,x3,y3 );
write('vvedite n');
readln(n);
gd:=detect;initgraph(gd,gm,'');
triang(x1,y1,x2,y2,x3,y3);
tr(x1,y1,x2,y2,x3,y3,n);
readln; closegraph;end.
Ковер Серпинского
uses graph;
var x1,x2,y1,y2:real;
n,gd,gm:integer;
procedure serp(x1,y1,x2,y2:REAL;n:integer);
var x1n,y1n,x2n,y2n:REAL;
begin if n>0 then begin
x1n:=2*x1/3+x2/3;y1n:=2*y1/3+y2/3;
x2n:=2*x2/3+x1/3;y2n:=2*y2/3+y1/3;
bar(round(x1n),round(y1n), round(x2n), round(y2n));
serp(x1,y1,x1n,y1n,n-1);
serp(x1n,y1,x2n,y1n,n-1);
serp(x2n,y1,x2,y1n,n-1);
serp(x1,y1n,x1n,y2n,n-1);
serp(x2n,y1n,x2,y2n,n-1);
serp(x1,y2n,x1n,y2,n-1);
serp(x1n,y2n,x2n,y2,n-1);
serp(x2n,y2n,x2,y2,n-1);
end;end;
begin
write('vvedite x1,y1,x2,y2');
readln(x1,y1,x2,y2 );
write('vvedite n');
readln(n);
gd:=detect;initgraph(gd,gm,'');
setfillstyle(1,15);
bar(round(x1),round(y1), round(x2), round(y2));setfillstyle(1,black);
serp(x1,y1,x2,y2,n);
readln; closegraph;end.
2
Автор
ovsianik
Документ
Категория
Образование
Просмотров
14
Размер файла
39 Кб
Теги
рекурсия2, графика, программирование
1/--страниц
Пожаловаться на содержимое документа