Банк рефератов содержит более 364 тысяч рефератов, курсовых и дипломных работ, шпаргалок и докладов по различным дисциплинам: истории, психологии, экономике, менеджменту, философии, праву, экологии. А также изложения, сочинения по литературе, отчеты по практике, топики по английскому.
Полнотекстовый поиск
Всего работ:
364139
Теги названий
Разделы
Авиация и космонавтика (304)
Административное право (123)
Арбитражный процесс (23)
Архитектура (113)
Астрология (4)
Астрономия (4814)
Банковское дело (5227)
Безопасность жизнедеятельности (2616)
Биографии (3423)
Биология (4214)
Биология и химия (1518)
Биржевое дело (68)
Ботаника и сельское хоз-во (2836)
Бухгалтерский учет и аудит (8269)
Валютные отношения (50)
Ветеринария (50)
Военная кафедра (762)
ГДЗ (2)
География (5275)
Геодезия (30)
Геология (1222)
Геополитика (43)
Государство и право (20403)
Гражданское право и процесс (465)
Делопроизводство (19)
Деньги и кредит (108)
ЕГЭ (173)
Естествознание (96)
Журналистика (899)
ЗНО (54)
Зоология (34)
Издательское дело и полиграфия (476)
Инвестиции (106)
Иностранный язык (62791)
Информатика (3562)
Информатика, программирование (6444)
Исторические личности (2165)
История (21319)
История техники (766)
Кибернетика (64)
Коммуникации и связь (3145)
Компьютерные науки (60)
Косметология (17)
Краеведение и этнография (588)
Краткое содержание произведений (1000)
Криминалистика (106)
Криминология (48)
Криптология (3)
Кулинария (1167)
Культура и искусство (8485)
Культурология (537)
Литература : зарубежная (2044)
Литература и русский язык (11657)
Логика (532)
Логистика (21)
Маркетинг (7985)
Математика (3721)
Медицина, здоровье (10549)
Медицинские науки (88)
Международное публичное право (58)
Международное частное право (36)
Международные отношения (2257)
Менеджмент (12491)
Металлургия (91)
Москвоведение (797)
Музыка (1338)
Муниципальное право (24)
Налоги, налогообложение (214)
Наука и техника (1141)
Начертательная геометрия (3)
Оккультизм и уфология (8)
Остальные рефераты (21692)
Педагогика (7850)
Политология (3801)
Право (682)
Право, юриспруденция (2881)
Предпринимательство (475)
Прикладные науки (1)
Промышленность, производство (7100)
Психология (8692)
психология, педагогика (4121)
Радиоэлектроника (443)
Реклама (952)
Религия и мифология (2967)
Риторика (23)
Сексология (748)
Социология (4876)
Статистика (95)
Страхование (107)
Строительные науки (7)
Строительство (2004)
Схемотехника (15)
Таможенная система (663)
Теория государства и права (240)
Теория организации (39)
Теплотехника (25)
Технология (624)
Товароведение (16)
Транспорт (2652)
Трудовое право (136)
Туризм (90)
Уголовное право и процесс (406)
Управление (95)
Управленческие науки (24)
Физика (3462)
Физкультура и спорт (4482)
Философия (7216)
Финансовые науки (4592)
Финансы (5386)
Фотография (3)
Химия (2244)
Хозяйственное право (23)
Цифровые устройства (29)
Экологическое право (35)
Экология (4517)
Экономика (20644)
Экономико-математическое моделирование (666)
Экономическая география (119)
Экономическая теория (2573)
Этика (889)
Юриспруденция (288)
Языковедение (148)
Языкознание, филология (1140)

Реферат: Моделирование схемы Жизнь

Название: Моделирование схемы Жизнь
Раздел: Рефераты по информатике, программированию
Тип: реферат Добавлен 19:43:28 04 сентября 2005 Похожие работы
Просмотров: 16 Комментариев: 23 Оценило: 4 человек Средний балл: 5 Оценка: неизвестно     Скачать

КРАСНОЯРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Кафедра ВТ

Утенков Валентин

Владимирович

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

Шифр .448597

Курсовая работа за первый курс по предмету « Алгоритмические языки и программирование »

Тема: моделирование игры “Жизнь”

1999 г.

Содержание

1. Введение 3

2. Описание программы 5

3. Заключение 11

4. Приложение 12


1. Введение

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

Методы решения задач с помощью компьютеров можно разделить на две основные группы.

Во-первых, это аналитический метод, при котором все поведение исследуемой системы описывается как ряд четких зависимостей, из которых с учетом исходных данных вычисляется оптимальное соотношение условий для данной задачи.

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

В данной работе сделана попытка на простейшем примере, который (с известными допущениями) применим в биологии, продемонстрировать применение этого метода для исследования поведения колоний микроорганизмов.

Модель поведения системы предельно упрощена. Жизненное пространство представлено как поле, состоящее из квадратных ячеек размером 50 ´ 30 ячеек; у каждой ячейки, очевидно, есть 8 соседних. Каждая ячейка может быть пустой или содержать клетку. Существование клетки определяется количеством соседей. Если в соседних ячейках 2 или 3 клетки, то клетка живет, а если соседей больше трех или меньше двух то клетка погибает (от «перенаселенности» или то «одиночества»). Если же вокруг пустой ячейки находятся ровно 3 клетки, то в ней появляется новая клетка.

Таким образом, заданы условия трех основных процессов у живых существ: рождения, существования и отмирания.

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

2. Описание программы

2.1. Программа реализована на Borland Pascal 7.0.

2.2. Данные в программе хранятся в следующих глобальных переменных стандартных типов:

2.2.1 A и B основной и вспомогательный массивы элементов типа Boolean размером [0..51,0..31]. В основном массиве A хранится информация о содержании клеток в ячейках поля. Вспомогательный массив B введен для занесения текущих изменений содержимого ячеек без изменения основного массива. После заполнения массива B его содержимое копируется в массив A .

2.2.2. i и j переменные типа integer . В первоначальном варианте программы использовались как счетчики в циклах типа for. Впоследствии все эти циклы были перемещены из тела программы в процедуры, и эти переменные были использованы как параметры процедуры InitGraph для установки графического режима.

2.2.3. VP переменная типа integer. Содержит номер активной видеостраницы. Используется процедурой FlipVP ( см. далее).

2.2.4. step, live, dead и born – переменные типа integer. Содержат, соответственно, номер шага работы программы, текущее количество живых клеток на поле и количество погибших и появившихся за последний шаг клеток.

2.2.5. s и stri переменные типа string. Переменная s применяется как промежуточная при переводе чисел в строковое представление; с ее помощью формируется переменная stri, которая и выводится на экран процедурой OutTextXY .

2.3. Программа использует стандартные модули crt.tpu и graph.tpu а так же модуль mono3d.tpu , написанный для других целей, из которого используется только процедура FlipVP .

2.4. Основные блоки программы реализованы в двух функциях и пяти процедурах, выполняющих следующие действия:

2.4.1. Функция Nears. Возвращает значение типа integer . Применяется для подсчета клеток в соседних ячейках. Аргументами функции x и y являются номер столбца и строки, содержащих ячейку, для которой определяется количество соседей. При выполнении функции внутренние счетчики i и j пробегают значения от x -1 до x+1 и от y -1 до y+1 соответственно. При этом проверяется содержимое каждой ячейки A[i,j] и, если она не пустая, значение суммирующей переменной s увеличивается на 1 (перед выполнением функции переменная s обнуляется). Таким образом в переменную s заносится количество клеток в квадрате 3х3 ячейки с исследуемой ячейкой в центре. После этого, если исследуемая ячейка не пуста, переменная s уменьшается на 1 (поскольку нас интересует только содержимое окружающих ячеек). Далее функция возвращает значение переменной s.

2.4.2. Функция Change выполняет основные действия программы и возвращает значение типа boolean . Во время ее выполнения внутренние счетчики i и j пробегают диапазоны значений, охватывающие всю обрабатываемую площадь поля. Для каждой ячейки A[i,j] выполняется проверка наличия в ней клетки. Если в ячейке есть клетка, то с помощью функции Nears определяется количество ее соседей, если оно подходит под условия отмирания, то ячейка вспомогательного массива B[i,j] опустошается, а переменная dead увеличивается на 1. Если ячейка пуста, а функция Nears возвращает значение, подходящее под условие возникновения, то ячейка вспомогательного массива B[i,j] заполняется, а переменная born увеличивается на 1. В остальных случаях изменения данных не происходит.

В начале выполнения переменные born и dead обнуляются, а функции Change присваивается значение False . Если произошло хотя бы одно изменение данных, функции присваивается значение True. Поскольку эта функция является условием выполнения основного цикла программы, очевидно, что при отсутствии изменений произойдет выход из цикла.

2 .4.3. Процедура Setup случайным образом заполняет поле клетками. Плотность заполнения определяется аргументом стандартной функции Random.

2.4.4. Процедура Copy копирует содержимое вспомогательного массива B в основной массив A.

2.4.5. Процедура Count производит подсчет клеток, находящихся в данный момент на поле. В начале ее выполнения переменная live обнуляется. После этого проверяется содержимое каждой обрабатываемой ячейки основного массива A[i,j] и, если она не пуста, переменная live увеличивается на 1.

2.4.6. Процедура Draw выводит содержимое основного массива A в виде графического построения. Каждая ячейка массива A представлена на экране прямоугольником 10х8 pix. В зависимости от содержимого ячейки он может иметь ярко-зеленый цвет и сплошную заливку (клетка) или темно-синий цвет и штриховую заливку типа 9 (пустая ячейка). Поверх заполненных прямоугольников (оператор Bar) на том же самом месте рисуются контурные прямоугольники (оператор Rectangle) ярко-синего цвета из которых получается сетка.

2.4.7. Процедура Print осуществляет вывод на экран сопутствующей информации (переменные step, live, born и dead c комментариями). Переменные преобразуются в строковой вид с помощью процедуры Val и промежуточной переменной s , после чего с помощью стандартных арифметических действий, применимых к единицам данных типа string, формируется переменная stri , которая и выводится на экран оператором OutTextXY .

2.4.8. Описание процедуры FlipVP (модуль mono3d.tpu ) выглядит так:

Procedure FlipVP(var P:Integer);

Begin

{}

{} SetVisualPage(P);

{} P:=1-P;

{} SetActivePage(p);

{} ClearDevice;

{}

End;

Она предназначена для того, чтобы скрыть от пользователя процесс прорисовки экрана. Принцип действия ее очевиден: активная видеостраница всегда остается невидимой.

2.5. Работа программы.

2.5.1. Начало программы.

2.5.1.1. Процедура Setup заполняет основной массив A (п. 2.4.3.)

2.5.1.2. Переменным i и j присваиваются значения 9 и 1, что соответствует видеорежиму EGA 640х350 pix, 16 цветов.

2.5.1.3. Оператор InitGraph устанавливает этот видеорежим.

2 .5.2. Основной цикл программы.

2.5.2.1. Оператор While открывает цикл.

2.5.2.2. Функция Change используется как условие выполнения цикла, при этом выполняемые ею действия обрабатывают основной и вспомогательный массивы (п. 2.4.2.)

2.5.2.3. Счетчик шагов step увеличивается на 1.

2.5.2.4. Процедура FlipVP переключает активную и видимую видеостраницы (п. 2.4.8.).

2.5.2.5. Процедура Draw выводит на активную видеостраницу отображение поля (массива A п.2.4.6.).

2.5.2.6. Процедура Count подсчитывает текущее количество клеток на поле (п. 2.4.5.).

2.5.2.7. Процедура Print выводит на активную видеостраницу текущую информацию о состоянии системы (п.п. 2.4.7. и 2.2.4.).

2.5.2.8. Оператор Delay обеспечивает задержку выполнения цикла для удобства визуального наблюдения.

2.5.2.9. С помощью стандартных функций KeyPressed и ReadKey каскад условных переходов обеспечивает выход из цикла по нажатию клавиши (для этого в программе объявлена метка l) .

2.5.3. Окончание программы.

2.5.3.1. После выхода из цикла по нажатию клавиши (п. 2.5.2.9) или по условию выхода (п. 2.5.2.2.) функция ReadKey приостанавливает программу до нажатия клавиши без изменения содержимого экрана.

2.5.3.2. Оператор CloseGraph отключает графический режим.

2.5.3.3. Оператор ClrScr очищает экран, приводя его в исходное состояние.

2.6. Основные недостатки программы.

2.6.1. Для нормальной работы функции Change (а точнее Nears ) в поле имеются крайние ячейки A[0,0..31], A[51,0..31], A[0..51,0] и A[0..51,31], которые несмотря ни на какие условия всегда остаются пустыми, что снижает чистоту моделирования.

2.6.2. Некоторые параметры, такие как частота обновления, начальная плотность заполнения поля и др. изменяются только вмешательством непосредственно в текст программы.

2.6.3. Не предусмотрен выход из цикла при возникновении стабильных циклических процессов, которые воспринимаются функцией Change как изменения, хотя практически перестают являться таковыми.

3. Заключение.

3.1. В данной работе приведен простейший пример применения метода моделирования системы. Усложнение и модернизация алгоритма позволит с большей точностью отображать реальные процессы в модели.

3.2. В нынешней форме программа позволила выявить следующие нюансы:

3.2.1. Конечная картина представляется почти одинаковой при плотности заполнения поля от 1 /2 до 1/6. При плотности ниже 1/6 система обычно довольно быстро приходит к полному «вымиранию».

3.2.2. Обнаружено несколько видов стабильных фигур. Например:

Циклические фигуры. Например:

Движущиеся фигуры. Например:


3.3. В ходе выполнения работы были закреплены навыки программирования на языке Pascal: использование стандартных функций модуля crt.tpu , применение элементов графики из модуля graph.tpu, написание и подключение собственных модулей ( mono3d.tpu), работа с компилятором и пр.

4. Приложение

Текст программы «Жизнь» (файл life.pas)

uses

crt,graph,mono3d;

var

A,B:array[0..51,0..31]of boolean;

i,j,VP,step,live,dead,born:integer;

s,stri:string;

label l;

Function Nears(x,y:integer):integer;

{}

{} var

{} i,j,s:integer;

{}

Begin

{}

{} s:=0;

{} for i:=x-1 to x+1 do

{} for j:=y-1 to y+1 do

{} if a[i,j] then s:=s+1;

{} if a[x,y] then s:=s-1;

{} Nears:=s;

{}

End;

Function Change:Boolean;

Begin

{}

{} born:=0;

{} dead:=0;

{} Change:=False;

{}

{} for i:=1 to 50 do

{} for j:=1 to 30 do

{} begin

{} {}

{} {} if A[i,j] then

{} {} begin

{} {} {} if ((Nears(i,j)<2) or (Nears(i,j)>3)) then

{} {} {} begin

{} {} {} {} B[i,j]:=False;

{} {} {} {} dead:=dead+1;

{} {} {} {} Change:=True;

{} {} {} end;

{} {} end

{} {} else

{} {} begin

{} {} {} if Nears(i,j)=3 then

{} {} {} begin

{} {} {} {} B[i,j]:=True;

{} {} {} {} born:=born+1;

{} {} {} {} Change:=True;

{} {} {} end;

{} {} end;

{} {}

{} end;

{}

End;

Procedure Setup;

{}

{} var

{} i,j:integer;

{}

Begin

{}

{} Randomize;

{} for i:=1 to 50 do

{} for j:=1 to 30 do

{} if Random(2)=0 then A[i,j]:=True;

{}

End;

Procedure Draw;

{}

{} var

{} i,j:integer;

{}

Begin

{}

{} Rectangle(0,0,639,349);

{} for i:=0 to 51 do

{} for j:=0 to 31 do

{} begin

{} {}

{} {} if A[i,j] then SetFillStyle(1,10)

{} {} else SetFillStyle(9,1);

{} {} Bar(55+10*i,10+8*j,65+10*i,18+8*j);

{} {} Rectangle(55+10*i,10+8*j,65+10*i,18+8*j);

{} end;

{}

End;

Procedure Copy;

{}

{} var

{} i,j:integer;

{}

Begin

{}

{} for i:=1 to 50 do

{} for j:=1 to 30 do

{} A[i,j]:=B[i,j];

{}

End;

Procedure Print;

Begin

{}

{} Str(step:3,s);

{} stri:='Шаг # '+s;

{} Str(live:3,s);

{} stri:=stri+' Клеток '+s;

{} outtextxy(55,300,stri);

{} Str(born:3,s);

{} stri:='Появилось '+s;

{} Str(dead:3,s);

{} stri:=stri+' Погибло '+s;

{} outtextxy(55,315,stri);

{}

{}

End;

Procedure Count;

{}

{} var

{} i,j:integer;

{}

Begin

{}

{} live:=0;

{} for i:=1 to 50 do

{} for j:=1 to 30 do

{} if A[i,j] then live :=live+1;

{}

End;

BEGIN

Setup;

i:=9;

j:=1;

InitGraph(i,j,'c:\dos');

SetColor(9);

While Change do

begin

{} step:=step+1;

{} FlipVP(VP);

{} Draw;

{} Count;

{} Print;

{} Copy;

{} Delay(22);

{} if KeyPressed then

{} if ReadKey<>''then

{} goto l;

end;

l:

ReadKey;

CloseGraph;

ClrScr;

END.

Оценить/Добавить комментарий
Имя
Оценка
Комментарии:
Хватит париться. На сайте FAST-REFERAT.RU вам сделают любой реферат, курсовую или дипломную. Сам пользуюсь, и вам советую!
Никита02:04:20 02 ноября 2021
.
.02:04:18 02 ноября 2021
.
.02:04:18 02 ноября 2021
.
.02:04:17 02 ноября 2021
.
.02:04:17 02 ноября 2021

Смотреть все комментарии (23)
Работы, похожие на Реферат: Моделирование схемы Жизнь

Назад
Меню
Главная
Рефераты
Благодарности
Опрос
Станете ли вы заказывать работу за деньги, если не найдете ее в Интернете?

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



Результаты(294402)
Комментарии (4230)
Copyright © 2005 - 2024 BestReferat.ru / реклама на сайте