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

ЛИЧНЫЙ КАБИНЕТ 

 

Здравствуйте гость!

 

Логин:

Пароль:

 

Запомнить

 

 

Забыли пароль? Регистрация

Повышение уникальности

Предлагаем нашим посетителям воспользоваться бесплатным программным обеспечением «StudentHelp», которое позволит вам всего за несколько минут, выполнить повышение уникальности любого файла в формате MS Word. После такого повышения уникальности, ваша работа легко пройдете проверку в системах антиплагиат вуз, antiplagiat.ru, etxt.ru или advego.ru. Программа «StudentHelp» работает по уникальной технологии и при повышении уникальности не вставляет в текст скрытых символов, и даже если препод скопирует текст в блокнот – не увидит ни каких отличий от текста в Word файле.

Результат поиска


Наименование:


Курсовик Имитационное моделирование динамических систем и процессов с использованием объектно-ориентированного подхода. Моделирование работы карьера на C++

Информация:

Тип работы: Курсовик. Предмет: Программирование. Добавлен: 02.10.2012. Сдан: 2008. Страниц: 28. Уникальность по antiplagiat.ru: < 30%

Описание (план):


Оглавление

СОДЕРЖАНИЕ

Введение 5
1 Постановка задачи 6
2 Результаты анализа 7
2.1 Представление модели в виде конечного автомата.....................................7
3 Результаты проектирования 9
3.1 Состав результатов проектирования 9
3.2 Диаграммы вариантов использования 9
3.3 Диаграмма статического представления 9
3.4 Диаграмма взаимодействия 11
3.5 Диаграмма деятельности 13
3.6 Диаграмма компонентов 14
Выводы 15
Список использованной литературы 16
Приложение А. Техническое задание 17
Приложение Б. Руководство пользователя 20
Приложение В. Интерфейсы классов. Реализация классов. 21


Введение
ВВЕДЕНИЕ

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


1 ПОСТАНОВКА ЗАДАЧИ


Моделирование работы карьера

В карьере самосвалы доставляют руду от трех экскаваторов, причем после выгрузки руды у измельчителя самосвалы всегда возвращаются к одним итем же экскаваторам. Используются самосвалы грузоподъемностью 20 и 50 тонн. От грузоподъемности самосвала зависят времена его погрузки, поездки до измельчителя, разгрузки и обратной поездки к своему экскаватору. Для 20-т самосвалов задаются следующие параметры время погрузки распределено экспоненциально с математическим ожиданием 5, время поездки постоянно и равно 2.5, время разгрузки распределено экспоненциально с математическим ожиданием 2, время обратной поездки постоянно и равно 1.5. Для 50-т самосвалов соответственно имеет: время погрузки распределено экспоненциально с математическим ожиданием 10, время поездки постоянно и равно 3, время разгрузки распределено экспоненциально с математическим ожиданием 4, время обратной поездки постоянно и равно 2. К каждому экскаватору приписаны два 20-т и один 50-т самосвал. Очереди к каждому экскаватору организованы по правилу «первым пришел – первым обслужен». В очереди к измельчителю приоритет имеют большегрузные самосвалы. Требуется проанализировать функционирование всей системы в течение 480 единиц времени для определения:
1. загрузка экскаваторов и измельчителя;
2. длины очередей к экскаваторам и измельчителю.


2 РЕЗУЛЬТАТЫ АНАЛИЗА

Объектно-ориентированный анализ предметной области. Составим словарь предметной области:
Таблица 2.1
Класс Свойства Поведение Число объектов
Экскаватор Текущее состояние
Время выхода из состояния
Очередь на погрузку
Количество загруженных самосвалов
Список длин очередей Ожидание самосвала
Загрузка самосвала 3
Измельчитель Текущее состояние
Время выхода из состояния
Очередь с приоритетом на разгрузку
Количество разгруженных самосвалов
Список длин очередей Ожидание самосвала
Разгрузка самосвала 1
Самосвал Текущее состояние
Время выхода из состояния
Связь с экскаватором
Грузоподъемность Едет загружаться
Загружается
Едет разгружаться
Разгружается 9


2.1 Представление модели в виде конечного автомата.



Рисунок 2.1.1 – Диаграмма переходов для экскаватора




Рисунок 2.1.2 – диаграмма переходов для измельчителя




Рисунок 2.1.3 – диаграмма переходов для самосвала


3 РЕЗУЛЬТАТЫ ПРОЕКТИРОВАНИЯ

3.1 Состав результатов проектирования

Следующим этапом разработки объектно-ориентированного программного продукта является разработка набора моделей (диаграмм, UML-схем), достаточного для полного описания реализации продукта. В данном случае достаточно разработать:
а) варианты использования;
б) статическое представление;
в) диаграмма взаимодействия;
г) диаграмма деятельности;
д) диаграмма компонентов.


3.2 Диаграмма использования.

Диаграмма использования представлена на рисунке 3.2.1


Рисунок 3.2.1 – Диаграмма использования


3.3 Диаграмма статического представления.

Диаграмма статического представления показана на рисунке 3.3.1

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



Рисунок 3.3.1 – статическое представление модели


3.4 Диаграмма взаимодействия.

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

Рисунок 3.4.1 – диаграмма основного шага симуляции




Рисунок 3.4.2 – диаграмма добавления самосвала в очередь на погрузку




Рисунок 3.4.3 – диаграмма добавления самосвала в очередь на разгрузку



Рисунок 3.4.4 – диаграмма отправки самосвала на разгрузку





Рисунок 3.4.5 – диаграмма отправки самосвала на погрузку




Рисунок 3.4.6 – диаграмма вывода статистики


3.5 Представление деятельности.

Обобщенная диаграмма деятельности измельчителя и экскаватора представлена на рисунке 3.5.1


Рисунок 3.5.1 – диаграмма деятельности измельчителя и экскаватора


3.6 Диаграмма компонентов.

Диаграмма компонентов представлена на рисунке 3.6.1



Рисунок 3.6.1 – диаграмма компонентов


ВЫВОДЫ

При выполнении курсового проекта для достижения поставленной цели был проведен объектно-ориентированный анализ, в результате которого выделены активные объекты, пассивные субъекты, варианты использования, а также следующие классы предметной области: World (обстрактный класс), WorldObject (объект), Truck (самосвал), Excavator (экскаватор), Reducer (измельчитель). Для указанных классов определены атрибуты и операции.
По результатам анализа было проведено объектно-ориентированное проектирование, результатом которого стали следующие диаграммы:
а) варианты использования;
б) статическое представление;
в) диаграмма взаимодействия;
г) диаграмма деятельности;
д) диаграмма компонентов.
Результатом реализации диаграмм стал программный продукт, моделирующий работу цеха.
Таким образом, в ходе работы к предметной области «Модель планирования работ в цехе» были применены навыки имитационного моделирования с использованием ООП, результатом чего стал программный продукт, имитирующий работу цеха, в котором станки выполняют операции над работами.



Приложение А

ТЕХНИЧЕСКОЕ ЗАДАНИЕ

А.1 Общие сведения

Тема курсового проекта: «Имитационное моделирование динамических систем и процессов с использованием объектно-ориентированного подхода. Модель планирования работ в цехе».
Система проектируется студентом 1-го курса Государственного института информатики и искусственного интеллекта (ГУИ и ИИ), факультета СКИТ, группы ***********************
Основанием для разработки ПП является задание, выданное кафедрой ПОИС Плановый срок начала работы по созданию информационной системы: 7.03.2009 г., срок окончания: 19.05.2009 г. Курсовая работа должна выполняться согласно графику, приведенному в таблице А.1.

Таблица А.1
Стадии и этапы разработки программного продукта

№ Этап работы Результат работы Срок выполнения
Модуль 1
1 Получение задание на КП Задание на разработку (1 стр.) 1 неделя
2 Выявление требований к разрабатываемому программному продукту Техническое задание
(3-5 стр.) 2-3 неделя
3 Проведение ОО анализа предметной области. Словарь предметной области. Сценарии использования системы. ОО словарь предметной области. 4-5 неделя
4 Проведение ОО проектирования Диаграммы классов, объектов, состояний и переходов, взаимодействия 6-8 неделя
Модуль 2
5 Проведение ОО проектирования Диаграммы модулей, процессов 9 неделя
6 Проектирование протоколов классов Протоколы классов 10 неделя
7 Реализация классов Описание реализации классов 11 неделя
8 Реализация и отладка программы. Проведение тестирования программного продукта. Текст программы. Описание программы и тестов.

12 неделя
9 Проведение имитационного моделирования, получение статистики работы. Экранные формы (1-2 стр.). Руководство пользователя (1 стр.) 13 неделя
10 Оформление пояснительной записки и сопроводительных материалов. Прошитая ПЗ с CD-ROM (30-50 стр.), сдается преподавателю лично не позже чем за 3 дня до защиты КП 14 неделя
11 Защита курсового проекта. 15 неделя


А.2 Назначение и цели создания программы

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


А.3 Характеристика объекта автоматизации

В карьере самосвалы доставляют руду от трех экскаваторов, причем после выгрузки руды у измельчителя самосвалы всегда возвращаются к одним и тем же экскаваторам. Используются самосвалы грузоподъемностью 20 и 50 тонн. От грузоподъемности самосвала зависят времена его погрузки, поездки до измельчителя, разгрузки и обратной поездки к своему экскаватору. Для 20-т самосвалов задаются следующие параметры время погрузки распределено экспоненциально с математическим ожиданием 5, время поездки постоянно и равно 2.5, время разгрузки распределено экспоненциально с математическим ожиданием 2, время обратной поездки постоянно и равно 1.5. Для 50-т самосвалов соответственно имеем: время погрузки распределено экспоненциально с математическим ожиданием 10, время поездки постоянно и равно 3, время разгрузки распределено экспоненциально с математическим ожиданием 4, время обратной поездки постоянно и равно 2. К каждому экскаватору приписаны два 20-т и один 50-т самосвал. Очереди к каждому экскаватору организованы по правилу "первым пришел - первым обслужен". В очереди к измельчителю приоритет имеют большегрузные самосвалы. Требуется проанализировать функционирование всей системы в течение 480 единиц времени для определения:

1)загрузка экскаваторов и измельчителя;
2)длины очередей к экскаваторам и измельчителю.

Если порядок поступления работ карьера, условия выполнения работ и обрабатывающие устройства зафиксированы, единственным управляющим параметром с точки зрения планировщика является порядок, в котором выполняются работы. Правило, применяемое в данном случае, является SIx - правилом и заключается в том, что первоначально выполняются приоритетные работы в порядке возрастания оценки времени их выполнения. Приоритетными являются работы с отрицательным уровнем. Уровень работы определяется как время готовности минус текущее время, минус оценка времени выполнения оставшихся операций, минус время, учитывающее фактор безопасности. Таким образом, SIx - правило перед каждым самосвалом делит работы на два класса, причем работы в классе упорядочены в порядке возрастания оценки времени их выполнения. Цель моделирования - оценить правило, в соответствии с которым определяется порядок выполнения работ карьера.

А.4 Требования к программному продукту

А.4.1 Требования к системе в целом

В целом к системе предъявляются следующие требования:
а) имитация работы карьеры;
б) вывод статистики: загрузка экскаваторов и измельчителя .

А.4.2 Требования к задачам и функциям, выполняемым продуктом

В процессе работы необходимо обеспечить выполнение следующих функций:
а) вывод результатов моделирования на экран

А.4.3 Требования к техническому обеспечению

а) Использовать IBM-совместимые ЭВМ с учетом необходимых ресурсов машины, необходимых для функционирования проектируемого программного продукта.
б) Обеспечить достаточный объем внешней памяти для возможности работы с необходимым объемом информации.

А.4.4 Требования к программному обеспечению

Программный продукт должен функционировать в условиях ОС MS-DOS
К программному обеспечению предъявляются следующие требования:
а) использование удобного и понятного пользовательского интерфейса.


А.4.5 Требованию к организационному обеспечению

В программную документацию должны входить:
1) пояснительная записка;
2) приложения:
а) техническое задание;
б) руководство пользователя;
в) листинг программы.



Приложение Б

РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

После запуска программы вы увидите приглашение ввести время моделирования в минутах. Рекомендуемое время – 480 минут. После этого вы должны ответить на вопрос, стоит ли выводить на экран промежуточные данные. Если вы ответите утвердительно, то моделирование будет проводиться поминутно с выведением на экран текущего положения объектов в системе. Если станок выполняет на данный момент какую-либо работу, то будет рядом написан ее номер и в скобках оставшееся время ее выполнения. В противном случае – слово “None”. В следующей строке будет распечатана приоритетная очередь – номера работ и рядом с ними в фигурных скобках уровень каждой работы. Следующая строка – неприоритетная очередь по тому же принципу. Если вы желаете посмотреть следующую ситуацию на следующей минуте выполнения, то нажмите любую клавишу.
По окончании моделирования будет выведена статистика – средние длины каждой из очередей каждого из экскаватора, и среднее время выполнения работ. Нажмите любую клавишу и программа закроется.



Приложение В


Листинг программы
В.1 Интерфейсы классов.

#ifndef __WORLD_H__
#define __WORLD_H__

#include
#include
#include

typedef int Time;

//время поездки от экскаватора к измельчителю для 20т самосвала
const Time T20_DRIVE_WITH_ORE_TIME = 2.5;
//время поездки от экскаватора к измельчителю для 50т самосвала
const Time T50_DRIVE_WITH_ORE_TIME = 3;
//время обратной поездки для 20т самосвала
const Time T20_DRIVE_WITHOUT_ORE_TIME = 1.5;
//время обратной поездки для 50т самосвала
const Time T50_DRIVE_WITHOUT_ORE_TIME = 2;
const int EXCAVATORS_COUNT = 3;

class World;

/*
===============================================================================
Абстрактный класс, представляющий любой объект в мире.
===============================================================================
*/

class WorldObject
{
public:
WorldObject (World&);
virtual ~WorldObject ();

virtual void process () = 0;

protected:
World& world;
};

/*
===============================================================================
Самосвал
===============================================================================
*/

class Truck: public WorldObject
{
public:
Truck (World&, int id, int work_number, int cargo_wieght);

void process ();

// Сообщение начала перевозки
void ToReducer ();
void ToExcavator ();

// Номер экскаватора
int number () const { return work_number; }

// Информационный номер
int ID () const { return id; }

// Грузоподъёмность
int weight () const { return cargo_weight; }

private:
enum State;

State state;
Time state_finish_time;
int id;
int work_number;
int cargo_weight;
};

//Сравнение двух самосвалов по весу груза
struct TruckGreater
{
bool operator () (const Truck* left, const Truck* right) const
{
return left->weight () < right->weight ();
}
};

/*
===============================================================================
Экскаватор
===============================================================================
*/

class Excavator: public WorldObject
{
public:
Excavator (World& world, int info_number);

void process ();

// Проверка наличия самосвалов в очереди
bool empty () const { return truck_queue.empty (); }

// Добавление самосвала в очередь на погрузку
void push (Truck*);

// Время на погрузку
int GetLoadingTime () const;

// Номер экскаватора
int ID () const { return id; }

// Печать статистики
void stat ();

private:
enum State;
typedef std::queue TruckQueue;
typedef std::list LengthList;

State state;
Time state_finish_time;
int id;
Truck* truck;
TruckQueue truck_queue;
LengthList queue_len;
int truck_cnt;
};


/*
===============================================================================
Измельчитель
===============================================================================
*/
class Reducer: public WorldObject
{
public:
Reducer (World& world);

void process ();

// Проверка наличия самосвалов в очереди
bool empty () const { return truck_queue.empty (); }

// Добавление самосвала в очередь на погрузку
void push (Truck*);

// Время на разгрузку
int GetUnloadingTime () const;

// Печать статистики
void stat ();

private:
enum State;
typedef std::priority_queue, TruckGreater> TruckQueue;
typedef std::list LengthList;

State state;
Time state_finish_time;
Truck* truck;
int truck_cnt;
TruckQueue truck_queue;
LengthList queue_len;
};
/*
===============================================================================
Моделируемая среда
===============================================================================
*/
class World
{
friend class WorldObject;
public:
World ();
~World ();

// Шаг симуляции
void process ();

// Печать статистики
void stat ();

// Функция времени
Time time () const { return current_time; }

//Доступ к агрегируемым объектам
Reducer& GetReducer () { return *reducer; }
Excavator& GetExcavator (int n) { return *excavator [n-1]; }

private:
typedef std::list WorldObjectList;

Time current_time;
WorldObjectList objects;
Reducer* reducer;
Excavator* excavator [EXCAVATORS_COUNT];
};

#endif

В.2 Реализация классов.

#include "world.h"
#include
#include
#include
#include

/*
================
Утилиты
================
*/
float rand (float min,float max)
{
return min + (max-min) * float (rand ()) / RAND_MAX;
}

float randExp (float m)
{
return -m*log (rand (0,1));
}

/*
================
WorldObject
================
*/

WorldObject::WorldObject (World& _world)
: world (_world)
{
world.objects.push_back (this);
}

WorldObject::~WorldObject ()
{
world.objects.remove (this);
}

/*
================
Экскаватор
================
*/

enum Excavator::State {
WAIT,
WORK
};

Excavator::Excavator (World& world,int _id)
: WorldObject (world), id (_id)
{
state = WAIT;
truck = NULL;
truck_cnt = 0;
state_finish_time = world.time ();
}

void Excavator::push (Truck* truck)
{
truck_queue.push (truck);
}

int Excavator::GetLoadingTime () const
{
if (!truck)
return -1;

switch (truck->weight ())
{
case 20: return randExp (5);
case 50: return randExp (10);
default: return 0;
}
}
void Excavator::stat ()
{
printf ("Загрузка: %.3f сaм./час.\n", float (truck_cnt) / world.time () * 60);
printf ("Средняя длина очереди: %d сам.\n",
std::accumulate (queue_len.begin (), queue_len.end (),0) / queue_len.size ());
}

void Excavator::process ()
{
if (world.time () < state_finish_time)
return;

switch (state)
{
case WAIT:
{
if (empty ())
return;

truck = truck_queue.front ();
truck_queue.pop ();

state = WORK;

Time duration = GetLoadingTime ();

printf ("[%4u] Экскаватор #%d: Начата погрузка самосвала #%d (время погрузки %d)\n",
world.time (),id,truck->ID (),duration);

state_finish_time = world.time () + duration;

break;
}
case WORK:
state = WAIT;

truck_cnt++;
queue_len.push_back (truck_queue.size () + 1);

printf ("[%4u] Экскаватор #%d: Окончена погрузка самосвала #%d\n",world.time (),id,truck->ID ());

truck->ToReducer ();
truck = NULL;

break;
}
}

/*
================
Измельчитель
================
*/

enum Reducer::State {
WAIT,
WORK
};

Reducer::Reducer (World& world)
: WorldObject (world)
{
state = WAIT;
truck = NULL;
truck_cnt = 0;
state_finish_time = world.time ();
}

void Reducer::push (Truck* truck)
{
truck_queue.push (truck);
}
int Reducer::GetUnloadingTime () const
{
if (!truck)
return -1;

switch (truck->weight ())
{
case 20: return randExp (2);
case 50: return randExp (4);
default: return 0;
}
}

void Reducer::stat ()
{
printf ("Загрузка: %.3f сaм./час\n", float (truck_cnt) / world.time () * 60);
printf ("Средняя длина очереди: %d сам.\n",
std::accumulate (queue_len.begin (),queue_len.end (),0) / queue_len.size ());
}

void Reducer::process ()
{
if (world.time () < state_finish_time)
return;

switch (state)
{
case WAIT:
{
if (empty ())
return;

truck = truck_queue.top ();
truck_queue.pop ();

state = WORK;

Time duration = GetUnloadingTime ();

printf ("[%4u] Измельчитель: Начата разгрузка самосвала #%d (время разгрузки %d)\n",
world.time (),truck->ID (),duration);

state_finish_time = world.time () + duration;

break;
}
case WORK:
state = WAIT;

truck_cnt++;
queue_len.push_back (truck_queue.size () + 1);

printf ("[%4u] Измельчитель: Окончена разгрузка самосвала #%d\n",world.time (),truck->ID ( ));

truck->ToExcavator ();
truck = NULL;

break;
}
}

/*
================
Самосвал
================
*/

enum Truck::State {
LOADING,
DRIVE_WITH_ORE,
UNLOADING,
DRIVE_WITHOUT_ORE
};

Truck::Truck (World& world, int _id, int _work_number, int _cargo_wieght)
: WorldObject (world), id (_id), work_number (_work_number), cargo_weight (_cargo_wieght)
{
state = LOADING;
state_finish_time = world.time ();

world.GetExcavator (work_number).push (this);
}

void Truck::process ()
{
if (world.time () < state_finish_time)
return;

switch (state)
{
case LOADING: break;
case DRIVE_WITH_ORE:
{
world.GetReducer ().push (this);
state = UNLOADING;
break;
}
case UNLOADING: break;
case DRIVE_WITHOUT_ORE:
{
printf ("[%4u] Самовал #%d: Вернулся на базу\n",world.time (),id);
state = LOADING;

world.GetExcavator (work_number).push (this);
break;
}
}
}

void Truck::ToReducer ()
{
if (state != LOADING)
return;

Time duration = cargo_weight==20 ? T20_DRIVE_WITH_ORE_TIME : T50_DRIVE_WITH_ORE_TIME;

printf ("[%4u] Самовал #%d: Начало перевозки (время перевозки %d)\n",world.time (),id,duration);

state = DRIVE_WITH_ORE;
state_finish_time = world.time () + duration;
}

void Truck::ToExcavator ()
{
if (state != UNLOADING)
return;

Time duration = cargo_weight==20 ? T20_DRIVE_WITHOUT_ORE_TIME : T50_DRIVE_WITHOUT_ORE_TIME;

printf ("[%4u] Самовал #%d: Начало обратной поездки (время поездки %d)\n",world.time (),id,duration);

state = DRIVE_WITHOUT_ORE;
state_finish_time = world.time () + duration;}

/*
================
Моделируемая среда
================
*/

World::World ()
{
// current_time = clock ();
current_time = 0;

int i;

reducer = new Reducer (*this);

for (i=0; i excavator [i] = new Excavator (*this,i+1);


for (i=0; i new Truck (*this,EXCAVATORS_COUNT*i+1,i+1,20);
new Truck (*this,EXCAVATORS_COUNT*i+2,i+1,20);
new Truck (*this,EXCAVATORS_COUNT*i+3,i+1,50);
}
}

World::~World ()
{
while (!objects.empty ()) delete objects.front ();
}

void World::process ()
{
// current_time = clock ();
current_time++;

for (WorldObjectList::iterator i=objects.begin ();i!=objects.end ();i++)
(*i)->process ();
}

void World::stat ()
{
printf ("\nСтатистика:\n");

printf ("\nИзмельчитель:\n");
reducer->stat ();

for (int i=0; i {
printf ("\nЭкскаватор #%d:\n", excavator [i]->ID ());
excavator [i]->stat ();
}
}


В.3 Реализация модуля симуляции (терминал).

#include
#include "world.h"

const Time SIMULATION_TIME = 8*60;

int main ()
{
World world;

while (!_kbhit () && world.time () < SIMULATION_TIME)
world.process ();

world.stat ();

return 0;
}

В.4 Результат работы программы симуляции.

Статистика:

Измельчитель:
Загрузка: 14.625 сaм./час
Средняя длина очереди: 4 сам.

Экскаватор #1:
Загрузка: 4.500 сaм./час.
Средняя длина очереди: 1 сам.

Экскаватор #2:
Загрузка: 5.750 сaм./час.
Средняя длина очереди: 1 сам.

Экскаватор #3:
Загрузка: 5.125 сaм./час.
Средняя длина очереди: 1 сам.


.............

Список использованной литературы


1. Г. Шилдт. Самоучитель C++. 3-е издание. – Санкт-Петербург: 2005г., 680с.
2. Бьярн Страуструп, «Язык программирования C++, специальное издание»
3. Хант, Эндрю, Томас, Дэвид. Программист-прагматик. Путь от подмастерья к мастеру. М.: Издательство "Лори", 2004. - 270 с.
4. Г.Саттер, А. Александреску. Стандарты программирования на C++.: Пер. с англ. – М.: Издательский дом «Вильямс», 2005. – 224с.
5. Г. Буч, Д. Рамбо, А. Джекобсон, Программирование: Язык UML. Руководство пользователя.



Перейти к полному тексту работы


Скачать работу с онлайн повышением уникальности до 90% по antiplagiat.ru, etxt.ru или advego.ru


Смотреть похожие работы


* Примечание. Уникальность работы указана на дату публикации, текущее значение может отличаться от указанного.