Треугольник Серпинского - 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.

Объяснение кода листинга программы

  1. Объявлены переменные: n, x, y, a, d, h, x1, y1, x2, y2, x3, y3, p.
  2. Введен цикл, который повторяется до тех пор, пока пользователь не введет значение n от 1 до 8.
  3. Внутри цикла объявлены переменные x, y, a, d, h, x1, y1, x2, y2, x3, y3, которые задают координаты и размеры треугольника.
  4. Вычислены координаты вершин треугольника по формуле (x1+x2)p, (y1+y2)p, (x2+x3)p, (y2+y3)p, (x3+x1)*p.
  5. Вызвана процедура tr(x1,y1,x2,y2,x3,y3), чтобы нарисовать треугольник с заданными координатами вершин.
  6. Вызвана рекурсивная процедура draw(x1,y1,x2,y2,x3,y3,p,n-1) для каждой стороны треугольника.
  7. Введены значения для переменных x, y, a, d, h, x1, y1, x2, y2, x3, y3.
  8. Вычислены координаты вершин треугольника по формуле (x1+x2)p, (y1+y2)p, (x2+x3)p, (y2+y3)p, (x3+x1)*p.
  9. Вызвана процедура tr(x1,y1,x2,y2,x3,y3), чтобы нарисовать треугольник с заданными координатами вершин.
  10. Вызвана рекурсивная процедура draw(x1,y1,x2,y2,x3,y3,p,n-1) для каждой стороны треугольника.
  11. Цикл повторяется до тех пор, пока значение n не станет равным 1.
  12. Программа завершается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.733 из 5
Похожие ответы