Треугольник Серпинского - Pascal ABC (129526)
Формулировка задачи:
Помогите пожалуйста написвть программу построения треугольника Серпинского с подробным описанием каждого действия
Решение задачи: «Треугольник Серпинского»
textual
Листинг программы
uses graphABC; //построение треугольника, 3 линии procedure tr(x1, y1, x2, y2, x3, y3: Real); begin moveto(round(x1),round(y1)); lineto(round(x2),round(y2)); lineto(round(x3),round(y3)); lineto(round(x1),round(y1)); end; //рекурсивная процедура рисования всей фигуры procedure draw(x1,y1,x2,y2,x3,y3,p:real;n:integer); var x1n,y1n,x2n,y2n,x3n,y3n:real; begin if n>0 then{если не конец рисования} begin {вычисляем координаты вершин меньшего треугольника} x1n:=(x1+x2)*p; y1n:=(y1+y2)*p; x2n:=(x2+x3)*p; y2n:=(y2+y3)*p; x3n:=(x3+x1)*p; y3n:=(y3+y1)*p; tr(x1,y1,x2,y2,x3,y3);{рисуем} {вызываем рекурсивно для каждой стороны} draw(x1,y1,x1n,y1n,x3n,y3n,p,n-1); draw(x2,y2,x1n,y1n,x2n,y2n,p,n-1); draw(x3,y3,x2n,y2n,x3n,y3n,p,n-1); end; end; var n,x,y,a,d,h,x1,y1,x2,y2,x3,y3:integer; p:real; begin repeat write('Глубина рекурсии [1..8] n='); readln(n); until n in [1..8]; x:=windowwidth div 2;{центр правильного треугольника} y:=windowheight div 2; a:=windowheight;{сторона} d:=a div 2;{половина стороны} h:=round(a*sqrt(3)/4);{половина высоты} x1:=x-d;y1:=y+h;{координаты исходного треугольника} x2:=x;y2:=y-h; x3:=x+d; y3:=y1; p:=0.5;{коэффициент уменьшения} tr(x1,y1,x2,y2,x3,y3);{рисуем первый} draw(x1,y1,x2,y2,x3,y3,p,n);{остальные} end.
Объяснение кода листинга программы
- Объявлены переменные: n, x, y, a, d, h, x1, y1, x2, y2, x3, y3, p.
- Введен цикл, который повторяется до тех пор, пока пользователь не введет значение n от 1 до 8.
- Внутри цикла объявлены переменные x, y, a, d, h, x1, y1, x2, y2, x3, y3, которые задают координаты и размеры треугольника.
- Вычислены координаты вершин треугольника по формуле (x1+x2)p, (y1+y2)p, (x2+x3)p, (y2+y3)p, (x3+x1)*p.
- Вызвана процедура tr(x1,y1,x2,y2,x3,y3), чтобы нарисовать треугольник с заданными координатами вершин.
- Вызвана рекурсивная процедура draw(x1,y1,x2,y2,x3,y3,p,n-1) для каждой стороны треугольника.
- Введены значения для переменных x, y, a, d, h, x1, y1, x2, y2, x3, y3.
- Вычислены координаты вершин треугольника по формуле (x1+x2)p, (y1+y2)p, (x2+x3)p, (y2+y3)p, (x3+x1)*p.
- Вызвана процедура tr(x1,y1,x2,y2,x3,y3), чтобы нарисовать треугольник с заданными координатами вершин.
- Вызвана рекурсивная процедура draw(x1,y1,x2,y2,x3,y3,p,n-1) для каждой стороны треугольника.
- Цикл повторяется до тех пор, пока значение n не станет равным 1.
- Программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д