Элективные курсы по информатике на старшей ступени общего образования
Основы программирования графики на языке Паскаль. Способы решения графических программ и рекомендации к их решениям. Связь между декартовой и полярной системами координат. Алгоритм переноса объекта. Построение фракталов, классической пыли Кантора.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 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