Курсовая: Разработка программы на языке LISP для построения кривых Серпинского i-го порядка - текст курсовой. Скачать бесплатно.
Банк рефератов, курсовых и дипломных работ. Много и бесплатно. # | Правила оформления работ | Добавить в избранное
 
 
   
Меню Меню Меню Меню Меню
   
Napishem.com Napishem.com Napishem.com

Курсовая

Разработка программы на языке LISP для построения кривых Серпинского i-го порядка

Банк рефератов / Программирование

Рубрики  Рубрики реферат банка

закрыть
Категория: Курсовая работа
Язык курсовой: Русский
Дата добавления:   
 
Скачать
Microsoft Word, 3721 kb, скачать бесплатно
Обойти Антиплагиат
Повысьте уникальность файла до 80-100% здесь.
Промокод referatbank - cкидка 20%!

Узнайте стоимость написания уникальной работы




МИНИСТЕРСТВО ВЫСШЕГО И СРЕДНЕГО СПЕЦИАЛЬНОГО ОБРАЗОВАНИЯ РФ

МОСКОВСКИЙ ИНСТИТУТ РАДИОТЕХНИКИ, ЭЛЕКТРОНИКИ И АВТОМАТИКИ

















Курсовой проект



Тема:

«Разработка программы на языке LISP

для построения кривых Серпинского i-го порядка»








Факультет:

ВАВТ

Дисциплина:

ФПО

Студент:


Группа:


Специальность:

2202

Преподаватель:

Яшин Л.З.





МОСКВА

January 2017


Оглавление


Задание 3

Формализация задачи 4

Схема алгоритма 6

Текст программы 8

Руководство пользователя 11

Тест программы 12

Литература 14



Задание

Оригинальный узор на рисунке 1 состоит из суперпозиции четырех кривых. Эти кривые соответствуют некоторому регулярному образу. Алгоритм для построения этих кривых на экране монитора или на графопостроителе под управлением вычислительной машины описан в [1].

Задача проекта – реализовать этот алгоритм в виде программы на функциональном языке программирования Lisp.


Рисунок 1


Формализация задачи

Анализируя рисунок 1, можно обнаружить, что он получен путем наложения друг на друга нескольких кривых. Первые две из них показаны на рисунке 2. Кривая Si называется кривой Серпинского i-го порядка. Необходимо выяснить, какова рекурсивная схема этих кривых.


Рисунок 2

Главная особенность кривой Серпинского состоит в том, что она замкнута и в ней нет пересечений. Это означает, что основная рекурсивная схема должна давать разомкнутую кривую линию, четыре части которой соединяются линиями, не принадлежащими самому рекурсивному образу. И действительно, эти замыкающие линии представляют собой отрезки прямых в четырех внешних углах, на рисунке 2 они выделены жирными линиями. Можно считать, что они принадлежат к непустой начальной кривой S – квадрату, «стоящему» на одном углу. Теперь достаточно легко составить рекурсивную схему.

Четыре составляющих образа, для наглядности, обозначим через A, B, C, D, а процедуры, рисующие соединительные прямые, будем обозначать стрелками, указывающими соответствующем направлении. Надо отметить, что четыре рекурсивных образа по существу идентичны, но лишь повертываются на 90.


Основной образ кривых Серпинского задается схемой:


S: A  B  C  D 


а рекурсивные составляющие (горизонтальные и вертикальные отрезки – двойной длины):

A: A  B  D  A

B: B  C  A  B

C: C  D  B  C

D: D  A  C  D


Предположим, что для построения части прямой в нашем распоряжении есть процедура Line, передвигающая перо в заданном направлении на заданное расстояние, причем направление задается целочисленным параметром i, как градусов. Если единичную прямую обозначить через h, то с помощью рекурсивных обращений к аналогично составленным процедурам для B и D и к самой A довольно просто написать процедуру, соответствующую схеме А.


( defun A ( k )

( cond ( ( > k 0 )

( A ( - k 1 ) ) ( Line 1 h )

( B ( - k 1 ) ) ( Line 0 ( * 2 h ) )

( D ( - k 1 ) ) ( Line 7 h )

( A ( - k 1 ) ))))


Эта процедура инициируется главной программой по одному разу для каждой кривой Серпинского, образующих приведенный рисунок. Употребление явного параметра для уровня гарантирует окончание работы, так как глубина рекурсии не может быть больше k. Главная программа строится по образцу S. Ее задача - установить начальную точку кривой, т.е. исходные координаты пера (Px и Py) и единичную длину приращения h. Квадрат, где рисуется кривая, помещается в середине экрана, заданной ширины и высоты.

Графическое изображение полученного алгоритма представлено в следующем разделе (Рисунок 3).

По сравнению с таким рекурсивным построением эквивалентные программы, где избегали употребления рекурсии, выглядят крайне сложными и запутанными.


Схема алгоритма

Рисунок 3 Схема алгоритма главной процедуры

Рисунок 4 Схема алгоритма процедуры A1

Текст программы


;; SIERPINS.LSP для XLISP версии 2.1

;; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

;; Программа построения кривых Серпинского i-го порядка.

;;

;; ЗАПУСК: > (SierpinskiCurve 4)

;;

;; Замечание: Переменная *VMode* управляет установкой видео режима,

;; и по умолчанию установлена в значение 18.

;; Эта установка соответствует режиму 640x480 Color,

;; и работает на большинстве систем. В случае проблемы

;; с установкой этого режима необходимо выбрать

;; значение этой переменной в соответствии с документацией

;; на оборудование.

;;


( defvar *VMode* 18 ) ;Видео режим по умолчанию

( defvar *MaxX* 640 ) ;Максимальная ширина экрана по умолчанию

( defvar *MaxY* 480 ) ;Максимальная высота экрана по умолчанию

( defvar *SquareSize* 256 ) ;Размер области для построения


;;

;; Функция инициализирует графический режим, устанавливает переменные

;; *MaxX* *MaxY* *SquareSize* в соответствии с выбранным режимом

;;

(

defun InitGraph()

(

case *VMode*

( 4 ;320x200 Color

( mode 4 )

( setq *MaxX* 320 *MaxY* 200 *SquareSize* 128 ) )

( 16 ;640x350 Color

( mode 16 )

( setq *MaxX* 640 *MaxY* 350 *SquareSize* 128 ) )

( 18 ;640x480 Color

( mode 18 ) )

( 106 ;800x600 Color

( mode 106 106 800 600 )

( setq *MaxX* 800 *MaxY* 600 *SquareSize* 512 ) )

( t ( error Unsupported graphics mode: *VMode* ) )

)

)


;;

;; Функция реализует задержку на заданное время

;;

(

defun pause ( time )

( let ( ( fintime ( + ( * time internal-time-units-per-second )

( get-internal-run-time ) ) ) )

( loop ( when ( > ( get-internal-run-time) fintime )

( return-from pause ) ) ) )

)


;;

;; Функция целочисленного деления

;;

(

defun div ( a b ) ( round ( / a b ) )

)


;;

;; Функция рисования прямой:

;; Параметры: - направление рисования (0-7)

;; - длинна прямой

;;

(

defun Line( Direction Size )

( setq x Px y Py )

(

case Direction

( 0 ( setq x ( + x Size) ) )

( 1 ( setq x ( + x Size ) y ( - y Size ) ) )

( 2 ( setq y ( - y Size) ) )

( 3 ( setq x ( - x Size ) y ( - y Size ) ) )

( 4 ( setq x ( - x Size) ) )

( 5 ( setq x ( - x Size ) y ( + y Size ) ) )

( 6 ( setq y ( + y Size) ) )

( 7 ( setq x ( + x Size ) y ( + y Size ) ) )

)

( move Px Py x y )

( setq Px x Py y )

)


;;

;; Функции A, B, C, D - рекурсивные функции рисования

;;

(

defun A ( k )

( cond ( ( > k 0 )

( A ( - k 1 ) ) ( Line 1 h )

( B ( - k 1 ) ) ( Line 0 ( * 2 h ) )

( D ( - k 1 ) ) ( Line 7 h )

( A ( - k 1 ) )

) )

)


(

defun B ( k )

( cond ( ( > k 0 )

( B ( - k 1 ) ) ( Line 3 h )

( C ( - k 1 ) ) ( Line 2 ( * 2 h ) )

( A ( - k 1 ) ) ( Line 1 h )

( B ( - k 1 ) )

) )

)


(

defun C ( k )

( cond ( ( > k 0 )

( C ( - k 1 ) ) ( Line 5 h )

( D ( - k 1 ) ) ( Line 4 ( * 2 h ) )

( B ( - k 1 ) ) ( Line 3 h )

( C ( - k 1 ) )

) )

)


(

defun D ( k )

( cond ( ( > k 0 )

( D ( - k 1 ) ) ( Line 7 h )

( A ( - k 1 ) ) ( Line 6 ( * 2 h ) )

( C ( - k 1 ) ) ( Line 5 h )

( D ( - k 1 ) )

) )

)


;;

;; Главная процедура

;; Параметры: - количество итераций

;;

(

defun SierpinskiCurve ( Count )


( InitGraph ) ;Установка графического режима


( setq h ( div *SquareSize* 4 ) ) ;Вычисление длины линии

( setq x0 ( div *MaxX* 2 ) ) ;Вычисление начальной точки

( setq y0 ( + ( div *MaxY* 2 ) h ) ) ;для рисования


( ;Основной цикл

do (( i 1 )) ;Инициализация счетчика


(( eql i ( + Count 1 ) ) 'Done ) ;Условие завершения


( setq x0 ( - x0 h ) ) ;Вычисление координат начальной

( setq h ( div h 2 ) ) ;точки для рисования и

( setq y0 ( + y0 h ) ) ;единичной длины линии


( setq Px x0 Py y0 ) ;Установка пера


( color i ) ;Установка цвета для рисования


( A i ) ( Line 1 h ) ;Рисование

( B i ) ( Line 3 h )

( C i ) ( Line 5 h )

( D i ) ( Line 7 h )


( pause 1.0 ) ;Задержка

( setq i ( + i 1 )) ;Инкримент счетчика


) ;Конец основного цикла

)


( print Try (SierpinskiCurve 4) ) ;Подсказка



Руководство пользователя

Требования к системе:

  • x86 персональный компьютер (386 минимум; 486, Pentium, или Pentium Pro рекомендуется)

  • Microsoft DOS 3.30 или выше

  • Microsoft Windows 3.1, Microsoft Windows for Workgroups, Microsoft Windows 95, Microsoft Windows NT 3.51 или 4.0

  • 512 Kb RAM

  • 5 Kb свободного пространства на жестком диске

  • Установленный интерпретатор XLisp версии 2.1 или выше


Для запуска программы необходимо:

  • Включить компьютер

  • Загрузить интерпретатор XLisp c параметром «Sierpins.lsp»: C:\XLISP\XLISP.EXE SIERPINS.LSP2

  • В ответ на приглашение XLisp ввести: (SierpinskiCurve 4)


Тест программы

Тест проводился на рабочей станции со следующей конфигурацией:


  • Pentium 166

  • 32 Mb RAM

  • SyncMaster 17Glsi

  • S3 Trio64V+

  • Windows 95



Интерпретатор XLisp был запущен в окне MS-DOS.


Программа тестировалась при значениях параметра Count от 1 до 4. В результате тестов были получены следующие изображения на экране монитора3:


Рисунок 5

Рисунок 6

Рисунок 7

Рисунок 8



Литература


  • “Алгоритм + структура данных = программа”, H.Вирт

  • “XLisp-Plus 2.1 Programmers Manual”, David Michael Betz

1 Схемы алгоритмов процедур B, C и D аналогичны A, и поэтому, в их изображении нет необходимости.

2 Данный пример предполагает, что XLisp установлен в каталоге C:\XLISP и его запуск производится в режиме MS-DOS.

3 В программе был установлен графический видео режим с разрешением 640x480 256 Color

1Авиация и космонавтика
2Архитектура и строительство
3Астрономия
 
4Безопасность жизнедеятельности
5Биология
 
6Военная кафедра, гражданская оборона
 
7География, экономическая география
8Геология и геодезия
9Государственное регулирование и налоги
 
10Естествознание
 
11Журналистика
 
12Законодательство и право
13Адвокатура
14Административное право
15Арбитражное процессуальное право
16Банковское право
17Государство и право
18Гражданское право и процесс
19Жилищное право
20Законодательство зарубежных стран
21Земельное право
22Конституционное право
23Конституционное право зарубежных стран
24Международное право
25Муниципальное право
26Налоговое право
27Римское право
28Семейное право
29Таможенное право
30Трудовое право
31Уголовное право и процесс
32Финансовое право
33Хозяйственное право
34Экологическое право
35Юриспруденция
36Иностранные языки
37Информатика, информационные технологии
38Базы данных
39Компьютерные сети
40Программирование
41Искусство и культура
42Краеведение
43Культурология
44Музыка
45История
46Биографии
47Историческая личность
 
48Литература
 
49Маркетинг и реклама
50Математика
51Медицина и здоровье
52Менеджмент
53Антикризисное управление
54Делопроизводство и документооборот
55Логистика
 
56Педагогика
57Политология
58Правоохранительные органы
59Криминалистика и криминология
60Прочее
61Психология
62Юридическая психология
 
63Радиоэлектроника
64Религия
 
65Сельское хозяйство и землепользование
66Социология
67Страхование
 
68Технологии
69Материаловедение
70Машиностроение
71Металлургия
72Транспорт
73Туризм
 
74Физика
75Физкультура и спорт
76Философия
 
77Химия
 
78Экология, охрана природы
79Экономика и финансы
80Анализ хозяйственной деятельности
81Банковское дело и кредитование
82Биржевое дело
83Бухгалтерский учет и аудит
84История экономических учений
85Международные отношения
86Предпринимательство, бизнес, микроэкономика
87Финансы
88Ценные бумаги и фондовый рынок
89Экономика предприятия
90Экономико-математическое моделирование
91Экономическая теория

 Анекдоты - это почти как рефераты, только короткие и смешные Следующий
Кто не работает, тот удачно вышла замуж!
Anekdot.ru

Узнайте стоимость курсовой, диплома, реферата на заказ.

Обратите внимание, курсовая по программированию "Разработка программы на языке LISP для построения кривых Серпинского i-го порядка", также как и все другие рефераты, курсовые, дипломные и другие работы вы можете скачать бесплатно.

Смотрите также:


Банк рефератов - РефератБанк.ру
© РефератБанк, 2002 - 2017
Рейтинг@Mail.ru