treug.PAS

{* Треугольники *}

Unit TREUG;
Interface
Implementation
Begin
 writeln('В графическом режиме с помощью рекурсии выводится треугольники. В большой треугольник вписываются треугольники меньшего размера.');
End.

Program Treug;

Uses treug.pas; {* Эту строку можно удалить *}
Uses Crt, Graph; {* Подключение модулей *}
Const {* Константы *}
  x1 = 10;
  y1 = 10;
  x2 = 10;
  y2 = 400;
  x3 = 400;
  y3 = 400;
  n = 4;
Procedure InitGr; {инициализация графики}
Var {* В работе нам потребуются переменные: *}
  a         : integer;
  b         : integer;
  Begin
  a := Vga;
  B := VgaHI;
Procedure Rec(x1, y1, x2, y2, x3, y3, k, l, n : word); {рекурсия, с помощью которой    на экран выводятся треугольники}
Begin
MoveTo(x1, y1);
LineTo(x2, y2);
LineTo(x3, y3);
LineTo(x1, y1);
SetColor(random(15) + 1);
If n > 0 Then
  Rec(x1, y1 - k, x1 + l, y1 - k, x1 + l, y1, round(k / 2), round(l / 2), n - 1);
If n > 0 Then
  Rec(x2, y1 + k, x2 + l, y1 + k, x2 + l, y1 + 2 * k, round(k / 2), round(l / 2), n - 1);
If n > 0 Then
  Rec(x1, y1 + k, x1 + l, y1 + k, x1 + l, y1 + 2 * k, round(k / 2), round(l / 2), n - 1);
End;
Begin
InitGr; {инициализация графики}
MoveTo(x1, y1); {рисуем первоначальный}
LineTo(x2, y2); {треугольник}
LineTo(x3, y3);
LineTo(x1, y1);
randomize;
Rec(x1, y1 + (y2 - y1) Div 2, x1 + (x3 - x1) Div 2, y3, x1 + (x3 - x1) Div 2, y1 + (y3 - y1) Div 2,(y2 - y1) Div 4, (x3 - x1) Div 4 , n);
ReadKey; {ожидание нажатия на клавишу}
CloseGraph; {закрытие графического режима}
End.....