Среда программирования:
PascalABC.NET
Статья по теме:
Запуск кода:
Для того чтобы запустить код нужно открыть приложение PascalABC.NET. Далее нужно скопировать код в рабочую зону и нажать на кнопку "Выполнить". После чего произойдет компиляция кода и с помощью модуля GraphABC появится окно в котором уже и будет построен фрактал.
Код программы:
Program Selim; uses GraphABC; type квадрат = class const минимальнаяДлинаСтороныКвадрата = 2; private x : integer; y: integer; длинаСтороныКвадрата: integer; внутренниеКвадраты : array [1..8] of квадрат; procedure создать8квадратов(); public constructor Create(x : integer; y: integer; длинаСтороныКвадрата: integer); procedure Нарисовать(); end; procedure квадрат.создать8квадратов(); var новаяДлинаСтороны,i : integer; begin новаяДлинаСтороны := round( длинаСтороныКвадрата / 3 ); if новаяДлинаСтороны > минимальнаяДлинаСтороныКвадрата then begin внутренниеКвадраты[1] := new квадрат( x, y, новаяДлинаСтороны); внутренниеКвадраты[2] := new квадрат( x + новаяДлинаСтороны, y, новаяДлинаСтороны); внутренниеКвадраты[3] := new квадрат( x + 2 * новаяДлинаСтороны, y, новаяДлинаСтороны); внутренниеКвадраты[4] := new квадрат( x, y + новаяДлинаСтороны, новаяДлинаСтороны); внутренниеКвадраты[5] := new квадрат( x + 2 *новаяДлинаСтороны, y + новаяДлинаСтороны, новаяДлинаСтороны); внутренниеКвадраты[6] := new квадрат( x, y + 2 * новаяДлинаСтороны, новаяДлинаСтороны); внутренниеКвадраты[7] := new квадрат( x + новаяДлинаСтороны, y + 2 * новаяДлинаСтороны, новаяДлинаСтороны); внутренниеКвадраты[8] := new квадрат( x + 2 * новаяДлинаСтороны, y + 2 * новаяДлинаСтороны, новаяДлинаСтороны); end else begin //если мы находимся на глубине и длина стороны меньше минимальнаяДлинаСтороныКвадрата то квадраты не создаются и они равны NIL for i:=1 to 8 do begin внутренниеКвадраты[i] := NIL; end; end; end; constructor квадрат.Create(x : integer; y: integer; длинаСтороныКвадрата: integer); begin Self.x := x; Self.y := y; Self.длинаСтороныКвадрата := длинаСтороныКвадрата; end; procedure квадрат.Нарисовать(); var новаяДлина,i : integer; begin SetBrushColor(clBlack); //устанавливаем цвет кисти //закрашиваем первый квадрат FillRect(x, y, x + длинаСтороныКвадрата, y + длинаСтороныКвадрата); SetBrushColor(clWhite); //устанавливаем белый цвет кисти //закрашиваем центральный квадрат новаяДлина := round( длинаСтороныКвадрата / 3); FillRect(x + новаяДлина, y + новаяДлина, x + 2 * новаяДлина, y + 2 * новаяДлина); //формируем 8 новых квадратов и у каждого вызываем метод Нарисовать //при этом в каждом вызове формируется еще 8 квадратов и рисуются они // и в каждом из вызовов снова формируются 8 квадратов и так опускаемся вглубь до самого маленького // квадратика со стороной не меньше минимальнаяДлинаСтороныКвадрата создать8квадратов; //если мы находимся на глубине и длина стороны меньше минимальнаяДлинаСтороныКвадрата то квадраты не создаются и они равны NIL //иначе рисуем for i:=1 to 8 do begin if внутренниеКвадраты[i] <> NIL then внутренниеКвадраты[i].Нарисовать; end; end; var стартовыйКвадрат : квадрат; стартоваяДлина : integer; begin стартоваяДлина := 600; SetWindowSize(стартоваяДлина, стартоваяДлина); //задаем размер графического окна стартовыйКвадрат := new квадрат(0,0,стартоваяДлина);//координаты начального угла и длина стороны квадрата стартовыйКвадрат.Нарисовать; end.
Прикрепленный файл | Размер |
---|---|
Selim_examples_frac_1.zip | 1.26 кб |