Элективные курсы по информатике на старшей ступени общего образования

Основы программирования графики на языке Паскаль. Способы решения графических программ и рекомендации к их решениям. Связь между декартовой и полярной системами координат. Алгоритм переноса объекта. Построение фракталов, классической пыли Кантора.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 24.04.2013
Размер файла 3,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Прежде чем приступить к доказательству основной теоремы о мощности множества Кантора, вспомним, как представить точку х отрезка [0,1] в системе счисления с основанием N, N ? 2. Разобьем отрезок [0,1] на N равных интервалов, каждый длины 1/N. Пронумеруем эти интервалы следующим образом: 0,1,2,..., N -- 1. Если оказалось, что точка х принадлежит интервалу с номером 5, то положим х1 = 5. Затем разобьем этот интервал на N новых интервалов, каждый длины 1/N2. Пронумеруем эти интервалы, как и раньше: 0, 1, 2, ...,N-1. Если точка х принадлежит новому интервалу с номером 3, то положим х2 = 3. Продолжая таким образом, получим бесконечную последовательность , причем каждое значение хп определяет интервал, содержащий х на n-ом шаге процесса разбиения. В результате, число х может быть представлено бесконечной последовательностью:

и каждое такое представление соответствует некоторой точке отрезка. Кратко его записывают следующим образом:

х = 0, х1 x2x3... (по основанию N)

и называют представлением х в системе счисления с основанием N или в N-ичной системе. Очевидно, запись числа в десятичной системе счисления, которой мы привыкли пользоваться, является частным случаем данного определения.

Теорема: Мощность множества Кантора С равна мощности континуума.

Доказательство. Нам необходимо установить взаимно однозначное соответствие между точками из С и точками отрезка [0,1]. Для этого нам потребуется рассмотреть двоичное (по основанию 2), а также троичное (по основанию 3) представления точек отрезка [0,1].

Для того чтобы избежать двусмысленности в случае, когда точка имеет два двоичных или троичных представления, мы будем всегда выбирать то представление, которое заканчивается всеми единицами в двоичном случае и всеми двойками в троичном.

Замечаем, что точка попадает в множество Кантора С тогда и только тогда, когда в ее троичном представлении отсутствуют единицы, то есть когда в нем присутствуют только нули и двойки. Тогда искомое соответствие точек из С с точками отрезка [0,1] осуществляется заменой всех двоек в троичном представлении х на единицы. Полученное таким образом двоичное представление определяет некоторое вещественное число у. Например, если х С есть:

х = 0,202202002... (в троичной системе),

то полагаем

у = 0,101101001... (в двоичной системе).

Описанная процедура определяет взаимно однозначное соответствие между

хС и у [0,1].

Классическая канторова пыль представляет собой пример компактного, совершенного и вполне разрывного множества. Более того, можно утверждать, что топологически классическое множество Кантора определяется как компактное, совершенное и вполне разрывное множество. Это означает, что любое компактное, совершенное и вполне разрывное множество можно непрерывно преобразовать в пыль Кантора, причем существует обратное преобразование, с помощью которого можно восстановить исходное множество. Любое такое множество принято называть множеством Кантора. Не следует думать, однако, что все множества Кантора самоподобны. Более того, даже фрактальная размерность различных самоподобных множеств Кантора не обязательно совпадает.

5.4 Построение фракталов

5.4.1 Кривая Коха

Рисунок 33 - Кривая Коха.

Процесс построения кривой Коха выглядит следующим образом: берём единичный отрезок, разделяем на три равные части и заменяем средний интервал равносторонним треугольником без этого сегмента. В результате образуется ломанная, состоящая из четырёх звеньев длины. На следующем шаге повторяем операцию для каждого из четырёх получившихся звеньев. Предельная кривая и есть кривой Коха.

Следующая программа на Turbo Pascal реализует данный метод.

5.4.2 Папоротник

Данная программа написана также на Turbo Pascal

Рисунок 34 - Папоротник

Заключение

В результате проделанной мной работы по теме проектирование элективных курсов по информатике на примере элективного курса «Компьютерная графика и геометрическое моделирование» с использованием большого количества учебной и методической литературы, удалось составить программу элективного курса для школьников старших классов. В данной работе описаны основы программирования графики на языке паскаль. После исследования литературы и обучающих программ по теме, получилось подобрать материал, который в последствии может помочь школьникам естественно-математического профиля и абитуриентам поступающим на технические специальности. В курсовой работе были описаны способы решения графических программ и рекомендации к их решениям, составлен элективный курс.

Список литературы

1. Алексеев Е.Р. «Free Pascal и Lazarus. Учебник по программированию». - Москва 2010. - 442 с.

2. Ерок.А.Н. «Введение в теорию фракталов» - Краснодар, 2009. - 51 с.

3. Андрафанова Н.В. Программирование графики на паскале/Информатика и образование - 2011. - №4. - С. 28-34

4. Сайт по turbo pascal - URL:http://pascal.hop.ru/ [25.05.2012]

5. Сайт кафедры «Информатика и ИТ». - URL:http://kafiitbgau.narod.ru/ [24.05.2012]

6. Первое сентября. - URL:http://festival.1september.ru/ [17.05.2012]

7. Википедия. - URL:http://wikipedia.org/ [28.05.2012]

8. Зелинский В. В. «Учебник по TURBO PASCAL 7» - Москва, 2000. - 321

9. Семакин М. Т. «Задачник - практикум по программированию». - М.: Просвещение, 2001. - 254 с.

10. Павлов А. А. «Программируем на Паскале». - М.: Просвещение, 2001. - 182 с.

11. Магдюков И. Г. «Сборник задач по информатике». - М.: Якутск, 2000. - 345 с.

Приложение А

Создание движущихся объектов на Паскале

Цели урока:

* знакомство с методом программирования движения объектов; создание программы вращения;

* развитие математического и алгоритмического мышления;

* формирование и развитие воли, усидчивости.

Тип урока: комбинированный урок -- закрепление пройденного и объяснение нового материала.

Ход урока

1. Актуализация знаний, умений и навыков

Диктант -- проверка знания графических процедур и функций:

* Процедура, которая устанавливает текущий цвет выводимых линий.

(Setcolor(color).)

* Процедура рисования линии. (line(x1, y1, х2, у2).)

* Процедура очищает графический экран цветом фона. (cleardevice.)

* Процедура рисования окружности. (circle(x, у, г).)

* Процедура рисования прямоугольника. (rectangle(x1, y1. х2. у2).)

* Процедура установки стиля линий. (SetLineStyle(t, p, s).)

* Процедура заливки. (FloodFill(x, у, color).)

* Процедура установки стиля заливки. (SetFillStyle(t, color).)

2. Объяснение нового материала

Создание движущихся объектов происходит следующим образом:

* прорисовать объект;

* прорисовать его цветом фона (изображение исчезнет);

* сместив координаты по экрану, прорисовать объект заново;

* перерисовать цветом фона;

* повторить действия.

Очевидно, что при составлении программ на движение необходимо использовать циклы.

Для того чтобы изображение исчезло, мы будем использовать процедуру Cleardevice. А чтобы движение объекта мы смогли наблюдать, будем использовать задержку на экране delay(1OOO). Значение процедуры подберем в зависимости от быстродействия компьютера в процессе решения задачи.

Задание 1.

Составим программу движения окружности.

Разбор задачи с учащимися.

Окружность будет двигаться слева направо в центре экрана с радиусом 50. Изменять необходимо координату х, например, с шагом 10 пикселей. Будем использовать цикл с постусловием: цикл закончится при нажатии клавиши Enter или если координата x + r > 640 -- наша окружность достигнет конца экрана.

Примерный вид программы:

uses crt, graph;

var

gd, gm, x: integer;

const r=50;

begin

gd:=detect;

initgraph(gd, gm, '');

x:=0;

repeat

setcolor(2);

circle(x, 240, r);

delay(1000);

cleardevice;

x:=x+10;

until keypressed or (x+r>640);

closegraph;

end.

Усложним задачу -- добавим эффект вращения.

Задача 2.

Составим программу движения вращающегося круга. Для наглядности разобьем наш круг на равное количество секторов, каждый сектор зальем своим цветом.

Разбор задачи с учащимися.

Эффект вращения будет достигаться за счет изменения цвета секторов, например, по часовой стрелке.

Сначала рассмотрим, как разбить круг на секторы:

cos а = x/r, х = r*cos а,

sin а = x/r, х = r*sin а.

Тогда для прорисовки линий сектора необходимо воспользоваться процедурой:

line(х, у, x+round(r*cos(a)),

y-round(r*sin(a)));

Здесь х, у -- координаты центра окружности.

Определим точку, чтобы залить сектор. Для того чтобы точка была внутри сектора, возьмем радиус меньше на 2 пикселя, угол -- меньше на 2 градуса. Так как при вычислении синуса/косинуса аргументы должны быть в радианах, то получаем:

x:=(r-2)*cos(a-2*pi/180);

y:=(r-2)*sin(a-2*pi/180);

При переходе к экранным координатам имеем:

floodfill(x+round((r-2)*cos(a-2*pi/180)),y-round((r-2)*sin(a-2*pi/180)),15);

15 -- константа для белого цвета, которым мы рисуем окружность и линии сектора; х, у -- координаты центра окружности.

Составим процедуру рисования данного круга. Входными параметрами данной процедуры являются координаты х, у центра круга, количество секторов n, r -- радиус окружности, а -- угол сектора.

procedure krug(x, у, n, г: integer; a: real);

var i, b: integer;

begin

setcolor(15);

circle(x, у, r); {рисуем окружность и первую пинию}

line(х, у, х+r, у);

Ь:=0; {переменная изменяет значения константы цвета}

for i:=1 to n do

begin

a:=a+2*pi/n;

b:=b+1; {будем заливать первыми n цветами из значения констант}

line(x, у, x+round(r*соs(а)), y-round(r*sin(a)));

setfillstyle(1, b);

floodfill(x+round((r-2)*cos(a-2*pi/180)), y-round((r-2)*sin(a-2*pi/

180)), 15);

end;

end;

Для создания эффекта вращения необходимо, чтобы каждый раз при обращении к процедуре менялось значение угла на 2*pi/n: второй сектор будет закрашен первым цветом, третий сектор -- вторым и т. д.

Создадим движение нашего круга справа налево, используя способ, рассмотренный при решении первой задачи:

program animation;

uses graph, crt;

const n=8; r=50;

procedure krug(x, y, n, r: integer; a: real);

var i, b: integer;

begin

setcolor(15);

circle(x, y, r);

line(x, у, x+r, y);

b:=0;

for i:=1 to n do

begin

a:=a+2*pi/n;

b:=b+1;

line(x, y, x+round(r*cos(a)), y-round(r*sin(a)));

setfillstyle(1, b);

floodfill (x+round((r-2) *cos(a-2*pi/180)), y-round((r-2)*sin(a-2*pi/

180)),15);

end;

end;

var

a: real;

gd, gm, k, i, b: integer;

begin

gd:=detect;

initgraph(gd, gm, " );

k:=640;

a:=0;

krug(k, 240, n, r, a);

repeat

cleardevice;

k:=k-10;

a:=a+2*pi/n;

setcolor(15);

krug(k, 240, n, r, a);

delay(2000);

until (k-r<=0) or (keypressed);

closegraph;

end.

3. Закрепление пройденного материала

Задание. Написать программу движения окружности так, чтобы внутри ее вращался радиус.

4. Домашнее задание

Учащимся предлагается задание: придумать сюжет с анимацией и реализовать его на Паскале.

Приложение Б

{вращение фигуры}

Uses Graph, Crt;

Const N = 24;

Type Coord = record

X,Y : Real;

End;

Var

grDriver : Integer;

grMode : Integer;

A : Array [1..N] of Coord;

L : Coord; { Перемещение }

C : Coord; { Растяжение }

U : Real; { Угол поворота }

D : Real; { Приращение размера }

I : Byte;

Procedure Tr(P,T:Coord; Var R:Coord); { P какую точку перемещать

T на какое расстояние

R что будем возвращать }

Type Matrix = Array [1..3,1..3] Of Real;

Var I,J : Byte;

O : Matrix;

Begin

For I := 1 To 3 Do For J := 1 To 3 Do If I = J Then O[I,J] := 1

Else O[I,J] := 0;

O[1,3] := T.X;

O[2,3] := T.Y;

R.X := O[1,1] * P.X + O[1,2] * P.Y + O[1,3];

R.Y := O[2,1] * P.X + O[2,2] * P.Y + O[2,3];

End;

Procedure Sr(P,S:Coord; Var R:Coord); { P какую точку перемещать

S масштаб

R что будем возвращать }

Type Matrix = Array [1..3,1..3] Of Real;

Var I,J : Byte;

O : Matrix;

Begin

For I := 1 To 3 Do For J := 1 To 3 Do If I = J Then O[I,J] := 1

Else O[I,J] := 0;

O[1,1] := S.X;

O[2,2] := S.Y;

R.X := O[1,1] * P.X + O[1,2] * P.Y + O[1,3];

R.Y := O[2,1] * P.X + O[2,2] * P.Y + O[2,3];

End;

Procedure Ur(P:Coord; Teta:Real; Var R:Coord); { P какую точку перемещать

Teta на какое расстояние

R что будем возвращать }

Type Matrix = Array [1..3,1..3] Of Real;

Var I,J : Byte;

O : Matrix;

Begin

For I := 1 To 3 Do For J := 1 To 3 Do If I = J Then O[I,J] := 1

Else O[I,J] := 0;

O[1,1] := COS(Teta);

O[1,2] := SIN(Teta);

O[2,1] := -SIN(Teta);

O[2,2] := COS(Teta);

R.X := O[1,1] * P.X + O[1,2] * P.Y + O[1,3];

R.Y := O[2,1] * P.X + O[2,2] * P.Y + O[2,3];

End;

Procedure DrawTriangle;

Begin

SetColor(LightGray);

For I := 1 To N-1 Do Line(Trunc(A[I].X), Trunc(A[I].Y), Trunc(A[I+1].X), Trunc(A[I+1].Y));

Line(Trunc(A[N].X), Trunc(A[N].Y), Trunc(A[1].X), Trunc(A[1].Y));

End;

Procedure HideTriangle;

Var I : Byte;

Begin

SetColor(Black);

For I := 1 To N-1 Do Line(Trunc(A[I].X), Trunc(A[I].Y), Trunc(A[I+1].X), Trunc(A[I+1].Y));

Line(Trunc(A[N].X), Trunc(A[N].Y), Trunc(A[1].X), Trunc(A[1].Y));

End;

Procedure Fig;

Begin

A[ 1].X := -40; A[ 1].Y := -25;

A[ 2].X := -40; A[ 2].Y := 25;

A[ 3].X := -30; A[ 3].Y := 25;

A[ 4].X := -30; A[ 4].Y := 0;

A[ 5].X := -15; A[ 5].Y := 25;

A[ 6].X := 0; A[ 6].Y := 0;

A[ 7].X := 0; A[ 7].Y := 25;

A[ 8].X := 10; A[ 8].Y := 25;

A[ 9].X := 10; A[ 9].Y := -25;

A[10].X := 20; A[10].Y := 0;

A[11].X := 10; A[11].Y := 25;

A[12].X := 20; A[12].Y := 25;

A[13].X := 25; A[13].Y := 10;

A[14].X := 30; A[14].Y := 25;

A[15].X := 40; A[15].Y := 25;

A[16].X := 30; A[16].Y := 0;

A[17].X := 40; A[17].Y := -25;

A[18].X := 30; A[18].Y := -25;

A[19].X := 25; A[19].Y := -10;

A[20].X := 20; A[20].Y := -25;

A[21].X := 0; A[21].Y := -25;

A[22].X := -15; A[22].Y := 0;

A[23].X := -30; A[23].Y := -25;

A[24].X := -40; A[24].Y := -25;

End;

Begin

Randomize;

grDriver := Detect;

InitGraph(grDriver,grMode,'c:\tp\bgi\');

{

For I := 1 To N Do Begin

A[I].X := Random(10)*10+100;

A[I].Y := Random(20)*10+100;

End;

}

Fig;

C.X := 1.5; C.Y := 1.5;

U := Pi/24;

D := 0.05;

For I := 1 To N Do Begin

Sr(A[I],C,A[I]);

End;

While NOT(Keypressed) Do Begin

L.X := Trunc(GetMaxX/2); L.Y := Trunc(GetMaxY/2);

For I := 1 To N Do Begin

Ur(A[I],U,A[I]);

Tr(A[I],L,A[I]);

End;

DrawTriangle; Delay(400); HideTriangle;

L.X := -L.X; L.Y := -L.Y;

For I := 1 To N Do Begin

Tr(A[I],L,A[I]);

End;

End;

CloseGraph;

End.

Приложение В

Uses Graph, Crt;

Const N=8;

M=12;

Type Coord = record

X,Y,Z : Real;

End;

Rebro = record

B,E,C : Word;

End;

Var

grDriver : Integer;

grMode : Integer;

A : Array [1..N] of Coord;

B : Array [1..M] of Rebro;

Key : Char;

I : Byte;

L,C : Coord;

Ux, Uy, Uz : Real;

Procedure Tr3d(P,T:Coord; Var R:Coord);

Type Matrix = Array [1..4,1..4] Of Real;

Var I,J : Byte;

O : Matrix;

Begin

For I := 1 To 4 Do For J := 1 To 4 Do If I = J Then O[I,J] := 1

Else O[I,J] := 0;

O[1,4] := T.X;

O[2,4] := T.Y;

O[3,4] := T.Z;

R.X := O[1,1] * P.X + O[1,2] * P.Y + O[1,3] * P.Z + O[1,4];

R.Y := O[2,1] * P.X + O[2,2] * P.Y + O[2,3] * P.Z + O[2,4];

R.Z := O[3,1] * P.X + O[3,2] * P.Y + O[3,3] * P.Z + O[3,4];

End;

Procedure Sr3d(P,S:Coord; Var R:Coord);

Type Matrix = Array [1..4,1..4] Of Real;

Var I,J : Byte;

O : Matrix;

Begin

For I := 1 To 4 Do For J := 1 To 4 Do If I = J Then O[I,J] := 1

Else O[I,J] := 0;

O[1,1] := S.X;

O[2,2] := S.Y;

O[3,3] := S.Z;

R.X := O[1,1] * P.X + O[1,2] * P.Y + O[1,3] * P.Z + O[1,4];

R.Y := O[2,1] * P.X + O[2,2] * P.Y + O[2,3] * P.Z + O[2,4];

R.Z := O[3,1] * P.X + O[3,2] * P.Y + O[3,3] * P.Z + O[3,4];

End;

Procedure UX3d(P:Coord; Teta:Real; Var R:Coord);

Type Matrix = Array [1..4,1..4] Of Real;

Var I,J : Byte;

O : Matrix;

Begin

For I := 1 To 4 Do For J := 1 To 4 Do If I = J Then O[I,J] := 1

Else O[I,J] := 0;

O[2,2] := COS(Teta);

O[2,3] := -SIN(Teta);

O[3,2] := SIN(Teta);

O[3,3] := COS(Teta);

R.X := O[1,1] * P.X + O[1,2] * P.Y + O[1,3] * P.Z + O[1,4];

R.Y := O[2,1] * P.X + O[2,2] * P.Y + O[2,3] * P.Z + O[2,4];

R.Z := O[3,1] * P.X + O[3,2] * P.Y + O[3,3] * P.Z + O[3,4];

End;

Procedure UY3d(P:Coord; Teta:Real; Var R:Coord);

Type Matrix = Array [1..4,1..4] Of Real;

Var I,J : Byte;

O : Matrix;

Begin

For I := 1 To 4 Do For J := 1 To 4 Do If I = J Then O[I,J] := 1

Else O[I,J] := 0;

O[1,1] := COS(Teta);

O[1,3] := -SIN(Teta);

O[3,1] := SIN(Teta);

O[3,3] := COS(Teta);

R.X := O[1,1] * P.X + O[1,2] * P.Y + O[1,3] * P.Z + O[1,4];

R.Y := O[2,1] * P.X + O[2,2] * P.Y + O[2,3] * P.Z + O[2,4];

R.Z := O[3,1] * P.X + O[3,2] * P.Y + O[3,3] * P.Z + O[3,4];

End;

Procedure UZ3d(P:Coord; Teta:Real; Var R:Coord);

Type Matrix = Array [1..4,1..4] Of Real;

Var I,J : Byte;

O : Matrix;

Begin

For I := 1 To 4 Do For J := 1 To 4 Do If I = J Then O[I,J] := 1

Else O[I,J] := 0;

O[1,1] := COS(Teta);

O[1,2] := -SIN(Teta);

O[2,1] := SIN(Teta);

O[2,2] := COS(Teta);

R.X := O[1,1] * P.X + O[1,2] * P.Y + O[1,3] * P.Z + O[1,4];

R.Y := O[2,1] * P.X + O[2,2] * P.Y + O[2,3] * P.Z + O[2,4];

R.Z := O[3,1] * P.X + O[3,2] * P.Y + O[3,3] * P.Z + O[3,4];

End;

Procedure Fig;

Begin

A[ 1].X := 10; A[ 1].Y := 10; A[ 1].Z := 10;

A[ 2].X := 10; A[ 2].Y := 10; A[ 2].Z := -10;

A[ 3].X := 10; A[ 3].Y := -10; A[ 3].Z := -10;

A[ 4].X := 10; A[ 4].Y := -10; A[ 4].Z := 10;

A[ 5].X := -10; A[ 5].Y := 10; A[ 5].Z := 10;

A[ 6].X := -10; A[ 6].Y := 10; A[ 6].Z := -10;

A[ 7].X := -10; A[ 7].Y := -10; A[ 7].Z := -10;

A[ 8].X := -10; A[ 8].Y := -10; A[ 8].Z := 10;

B[ 1].B := 1; B[ 1].E := 2; B[ 1].C := 10;

B[ 2].B := 2; B[ 2].E := 3; B[ 2].C := 10;

B[ 3].B := 3; B[ 3].E := 4; B[ 3].C := 10;

B[ 4].B := 4; B[ 4].E := 1; B[ 4].C := 10;

B[ 5].B := 5; B[ 5].E := 6; B[ 5].C := 13;

B[ 6].B := 6; B[ 6].E := 7; B[ 6].C := 13;

B[ 7].B := 7; B[ 7].E := 8; B[ 7].C := 13;

B[ 8].B := 8; B[ 8].E := 5; B[ 8].C := 13;

B[ 9].B := 1; B[ 9].E := 5; B[ 9].C := 7;

B[10].B := 2; B[10].E := 6; B[10].C := 7;

B[11].B := 3; B[11].E := 7; B[11].C := 7;

B[12].B := 4; B[12].E := 8; B[12].C := 7;

End;

Procedure Draw3D;

Var I : Byte;

XB, YB, XE, YE : Real;

Begin

For I := 1 To M Do Begin

SetColor(B[I].C);

XB := A[B[I].B].X;

YB := A[B[I].B].Y;

XE := A[B[I].E].X;

YE := A[B[I].E].Y;

Line( Trunc(XB), Trunc(YB), Trunc(XE), Trunc(YE) );

End;

End;

Procedure Hide3D;

Var I : Byte;

XB, YB, XE, YE : Real;

Begin

SetColor(Black);

For I := 1 To M Do Begin

XB := A[B[I].B].X;

YB := A[B[I].B].Y;

XE := A[B[I].E].X;

YE := A[B[I].E].Y;

Line( Trunc(XB), Trunc(YB), Trunc(XE), Trunc(YE) );

End;

End;

Begin

ClrScr;

WriteLn('1-2 ‚а 饭ЁҐ Ї® ®бЁ OZ');

WriteLn('3-4 ‚а 饭ЁҐ Ї® ®бЁ OY');

WriteLn('5-6 ‚а 饭ЁҐ Ї® ®бЁ OX');

WriteLn('7-8 ЏаЁЎ«Ё§Ёвм | Ћв¤ «Ёвм ®ЎкҐЄв');

ReadLn;

Fig;

C.X := 5; C.Y := 5; C.Z := 5;

For I := 1 To N Do Sr3d(A[I], C, A[I]);

L.X := 200; L.Y := 200; L.Z := 200;

For I := 1 To N Do Tr3d(A[I], L, A[I]);

grDriver := Detect;

InitGraph(grDriver,grMode,'c:\tp\bgi\');

Draw3D;

Key := ' ';

While Key <> #27 Do Begin

Key := ReadKey;

If Key = '1' Then Begin

Hide3D;

L.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;

For I := 1 To N Do Tr3d(A[I], L, A[I]);

Uz := Pi/120; For I := 1 To N Do Uz3d(A[i],Uz,A[i]);

L.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;

For I := 1 To N Do Tr3d(A[I], L, A[I]);

Draw3D;

End;

If Key = '2' Then Begin

Hide3D;

L.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;

For I := 1 To N Do Tr3d(A[I], L, A[I]);

Uz := -Pi/120; For I := 1 To N Do Uz3d(A[i],Uz,A[i]);

L.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;

For I := 1 To N Do Tr3d(A[I], L, A[I]);

Draw3D;

End;

If Key = '3' Then Begin

Hide3D;

L.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;

For I := 1 To N Do Tr3d(A[I], L, A[I]);

Uy := Pi/120; For I := 1 To N Do Uy3d(A[i],Uy,A[i]);

L.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;

For I := 1 To N Do Tr3d(A[I], L, A[I]);

Draw3D;

End;

If Key = '4' Then Begin

Hide3D;

L.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;

For I := 1 To N Do Tr3d(A[I], L, A[I]);

Uy := -Pi/120; For I := 1 To N Do Uy3d(A[i],Uy,A[i]);

L.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;

For I := 1 To N Do Tr3d(A[I], L, A[I]);

Draw3D;

End;

If Key = '5' Then Begin

Hide3D;

L.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;

For I := 1 To N Do Tr3d(A[I], L, A[I]);

Ux := Pi/120; For I := 1 To N Do Ux3d(A[i],Ux,A[i]);

L.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;

For I := 1 To N Do Tr3d(A[I], L, A[I]);

Draw3D;

End;

If Key = '6' Then Begin

Hide3D;

L.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;

For I := 1 To N Do Tr3d(A[I], L, A[I]);

Ux := -Pi/120; For I := 1 To N Do Ux3d(A[i],Ux,A[i]);

L.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;

For I := 1 To N Do Tr3d(A[I], L, A[I]);

Draw3D;

End;

If Key = '7' Then Begin

Hide3D;

L.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;

For I := 1 To N Do Tr3d(A[I], L, A[I]);

C.X := 1.1; C.Y := 1.1; C.Z := 1.1;

For I := 1 To N Do Sr3d(A[I], C, A[I]);

L.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;

For I := 1 To N Do Tr3d(A[I], L, A[I]);

Draw3D;

End;

If Key = '8' Then Begin

Hide3D;

L.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;

For I := 1 To N Do Tr3d(A[I], L, A[I]);

C.X := 0.9; C.Y := 0.9; C.Z := 0.9;

For I := 1 To N Do Sr3d(A[I], C, A[I]);

L.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;

For I := 1 To N Do Tr3d(A[I], L, A[I]);

Draw3D;

End;

End;

Hide3D;

CloseGraph;

End.

Приложение Г

Program Koh;

uses CRT, Graph;

var

gd,gm : Integer;

const

iter = 50000;

procedure Draw;

var

t, x, y, p : Real;

k : LongInt;

mx, my, rad : Integer;

begin

mx := 10;

my := 250;

rad :=600;

Randomize;

x := 0.0;

y := 0.0;

for k := 1 To iter do

begin

p := Random;

t := x;

if p <= 1/2 then

begin

x := 1/2 * x + 1/(2*sqrt(3)) * y;

y := 1/(2*sqrt(3)) * t - 1/2 * y;

end

else

begin

x := 1/2 * x - 1/(2*sqrt(3)) * y +1/2;

y := -1/(2*sqrt(3)) * t - 1/2 * y + 1/(2*sqrt(3));

end;

PutPixel(mx + Round(rad * x), my - Round(rad * y), 2);

end;

end;

begin

gd := Detect;

InitGraph(gd,gm,'');

Draw;

ReadKey;

CloseGraph;

end.

Приложение Д

program fern;

uses crt, graph;

var

gd, gm: integer;

procedure draw;

const

iterations = 50000;

var

t, x, y, p: real;

k: longint;

mid_x, mid_y, radius: integer;

begin

mid_x := getmaxX div 2;

mid_y := getmaxY;

radius := trunc(0.1 * mid_y);

randomize;

x := 1.0;

y := 0.0;

for k := 1 to iterations do

begin

p := random;

t := x;

if p <= 0.85 then

begin

x := 0.85 * x + 0.04 * y;

y := -0.04 * t + 0.85 * y + 1.6

end

else

if p <= 0.92 then

begin

x := 0.2 * x - 0.26 * y;

y := 0.23 * t + 0.22 * y + 1.6

end

else if p <= 0.99 then

begin

x := -0.15 * x + 0.28 * y;

y := 0.26 * t + 0.24 * y + 0.44

end

else

begin

x := 0.0;

y := 0.16 * y

end;

putpixel(mid_x+round(radius*x), mid_y-round(radius*y),

lightgreen)

end

end;

begin

gd := detect;

initgraph(gd, gm, 'c:\bp\bgi');

draw;

readkey;

closegraph

end.

Размещено на Allbest.ru


Подобные документы

  • Основные понятия и структура обработчика на языке Pascal. Элективные курсы по информатике в системе профильного обучения. Элективный курс "Программирование в среде Delphi". Методические материалы по изучению программирования на языке Object Pascal.

    методичка [55,4 K], добавлен 08.12.2010

  • Схема разбора арифметического и логического выражения. Внешняя спецификация конвертора и алгоритм перевода программ на языке Паскаль в текст на языке Си. Назначение подпрограмм, особенности констант и переменных. Код программы и ее тестирование.

    курсовая работа [567,5 K], добавлен 03.07.2011

  • История появления и распространения Turbo Pascal - среды разработки для языка программирования Паскаль. Общий вид объявления файлового типа. Входная, выходная и промежуточная информация. Алгоритм решения задачи: словесный алгоритм, блок-схема, программа.

    курсовая работа [359,4 K], добавлен 05.01.2010

  • Основы создания фрактальных композиций при помощи среды программирования Паскаль. Сущность и основа фрактальной графики. Графические возможности и операторы для рисования геометрических фигур в среде Паскаль. Примеры обозначения цветов на языке Паскаль.

    лабораторная работа [15,7 K], добавлен 12.06.2010

  • Язык программирования Турбо Паскаль. Запись алгоритма на языке программирования и отладка программы. Правила записи арифметических выражений. Стандартное расширение имени файла, созданного системным редактором. Составной оператор и вложенные условия.

    курсовая работа [75,0 K], добавлен 21.03.2013

  • Паскаль как язык профессионального программирования, который назван в честь французского математика и философа Блеза Паскаля, история его разработки и функциональные особенности. Задача с использованием двумерного массива, составление блок-схемы решения.

    контрольная работа [819,0 K], добавлен 12.03.2014

  • Понятие программы и ее основные составляющие. Операторы ввода и вывода. Разветвляющиеся алгоритмы. Цикл как многократное выполнение одинаковых действий. Особенности использования оператора выбора. Графики функций и системы координат. Рекурсия и анимация.

    презентация [663,7 K], добавлен 24.12.2010

  • Методы численного интегрирования. Характеристика основных составляющих структурного программирования. Решение задания на языке высокого уровня Паскаль. Построение графического решения задачи в пакете Matlab. Решение задания на языке высокого уровня C.

    курсовая работа [381,7 K], добавлен 10.05.2018

  • Особенности программирования на языке Паскаль в среде Турбо Паскаль. Линейные алгоритмы, процедуры и функции. Структура данных: массивы, строки, записи. Модульное программирование, прямая и косвенная рекурсия. Бинарный поиск, организация списков.

    отчет по практике [913,8 K], добавлен 21.07.2012

  • Приобретение теоретических и практических навыков программирования на языке Паскаль. Математическая формулировка задачи и выбор метода обработки информации. Разработка алгоритма и его описание. Описание программы. Форма представления исходных данных.

    курсовая работа [224,3 K], добавлен 11.02.2016

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.