Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
КУРСОВАЯ РАБОТА
по дисциплине «Программирование»
«Моделирующая программа. Симулятор парикмахерской»
СОДЕРЖАНИЕ
[0.0.1] ВВЕДЕНИЕ
[0.0.2] [0.0.3] 1.1 Назначение разработки [0.0.4] 1.2 Основание для разработки [0.0.5] 1.3 Требования к программе [0.0.6] 1.3.1 Входные данные [0.0.7] 1.3.2 Выходные данные [0.0.8] 1.3.3 Процессы обработки [0.0.9] 1.3.4 Требования пользователя [0.0.10] 1.3.5 Функциональные требования [0.0.11] 1.3.6 Требования к условиям эксплуатации [0.0.12] 1.3.7 Требования к численности и квалификации персонала [0.0.13] 1.3.8 Требования по стандартизации и унификации [0.0.14] 1.3.9 Требования к программной совместимости [0.0.15] 1.3.10 Результирующие компоненты изделия [0.0.16] 1.3.11 Этапы разработки программы: [0.0.17] 1.3.13 Требования к документации
[0.0.18] [0.0.19] 3 КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ [0.0.20] 4.1 Сценарий диалога с пользователем [0.0.21] 5 РАБОЧИЙ ПРОЕКТ [0.0.22] 5.1 Основные переменные, константы и типы модуля [0.0.23] 5.2 Отладка и тестирование программного продукта [0.0.24] 5.3 Руководство пользователю |
Заключение
Библиографический список…............................................................................................
Приложение
Предметом теории массового обслуживания является установление зависимости между факторами, определяющими функциональные возможности системы массового обслуживания, и эффективностью ее функционирования. В большинстве случаев все параметры, описывающие системы массового обслуживания, являются случайными величинами или функциями, поэтому эти системы относятся к стохастическим системам.
Случайный характер потока заявок (требований), а также, в общем случае, и длительности обслуживания приводит к тому, что в системе массового обслуживания происходит случайный процесс. По характеру случайного процесса, происходящего в системе массового обслуживания (СМО), различают системы марковские и немарковские. В марковских системах входящий поток требований и выходящий поток обслуженных требований (заявок) являются пуассоновскими. Пуассоновские потоки позволяют легко описать и построить математическую модель системы массового обслуживания. Данные модели имеют достаточно простые решения, поэтому большинство известных приложений теории массового обслуживания используют марковскую схему. В случае немарковских процессов задачи исследования систем массового обслуживания значительно усложняются и требуют применения статистического моделирования, численных методов с использованием ЭВМ.
Независимо от характера процесса, протекающего в системе массового обслуживания, различают два основных вида СМО:
В системах с ограниченным ожиданием может ограничиваться:
- длина очереди;
- время пребывания в очереди.
В системах с неограниченным ожиданием заявка, стоящая в очереди, ждет обслуживание неограниченно долго, т.е. пока не подойдет очередь.
Все системы массового обслуживания различают по числу каналов обслуживания:
- одноканальные системы;
- многоканальные системы.
Приведенная классификация СМО является условной. На практике чаще всего системы массового обслуживания выступают в качестве смешанных систем. Например, заявки ожидают начала обслуживания до определенного момента, после чего система начинает работать как система с отказами.
В данной курсовой работе решается задача одноканальной СМО с ожиданием. Программа реализуется на языке С++ в среде программирования Borland Builder 6.0.
Разрабатываемая программа предназначена для моделирования работы парикмахерского салона в течение рабочего дня, нахождения вероятности отсутствия клиентов в парикмахерской, вероятность того, что клиент покинет парикмахерскую необслуженным, вероятность занятости всех мастеров, среднее число клиентов в очереди и в парикмахерской вообще.
Данный программный продукт разрабатывается как курсовая работа.
Входными данными программы являются плотность потока прихода клиентов, среднее время обслуживания одного клиента, общее время работы и количество парикмахеров.
К выходным данным относятся подсчет общего количества людей, зашедших в парикмахерскую, количества обслуженных и упущенных клиентов, вычисление вероятности отсутствия клиентов в парикмахерской, вычисление вероятности того, что все мастера будут заняты работой; что клиент не будет обслужен, среднее количество людей в очереди и в парикмахерской вообще.
Моделирование работы парикмахерского салона и вывод различных вероятностей, описанных выше.
Разрабатываемая программа, с точки зрения пользователя, должна обладать следующими свойствами:
Программа должна удовлетворять следующим функциональным требованиям:
Для работы с программой требуется один человек, квалифицированный в области СМО и алгоритмизации, обладающий средней квалификацией в программировании на языке С++.
Нотация идентификаторов и терминология комментариев во всех компонентах среды должны соответствовать терминологии, используемой в вычислительной технике. Сценарий диалога с пользователем должен отвечать стандартам приложений ОС семейства Windows.
Код программы должен быть написан на стандартном языке С++ с использованием стандартных компонент библиотеки Borland Builder 6.0.
Результирующий программный продукт необходимо представить в виде исполнимого модуля, совокупности исходных программных модулей, снимков с экрана (скриншотов), набора тестовых примеров и эксплуатационной документации (в электронной форме и на бумажном носителе).
Перечень представляемых документов:
Все документы оформляются на листах формата A4, на одной стороне листа, и представляются в виде пояснительной записки.
Документы по содержанию должны соответствовать ГОСТ 34.201-89, 34.602-89, 19.701-90.
Парикмахерская имеет трех мастеров, каждый из которых на обслуживание одного клиента тратит в среднем 10 минут. Клиенты образуют простейший поток со средним числом поступлений 12 человек в час. Клиенты становятся в очередь, если к моменту их прихода в очереди менее трех человек, в противном случае они покидают парикмахерскую. Промоделировать работу парикмахерской в течение рабочего дня. Определить вероятность отсутствия клиентов в парикмахерской, вероятность того, что клиент покинет парикмахерскую необслуженным, вероятность того, что все мастера будут заняты работой, среднее число клиентов в очереди, среднее число клиентов в парикмахерской вообще.
Система массового обслуживания имеет один канал. Входящий поток заявок на обслуживание потока имеет интенсивность λ. Интенсивность потока обслуживания равна μ (т. е. в среднем непрерывно занятый канал будет выдавать μ обслуженных заявок). Длительность обслуживания случайная величина, подчиненная показательному закону распределения. Заявка, поступившая в момент, когда канал занят, становится в очередь и ожидает обслуживания.
Рассмотрим систему с ограниченной очередью. Предположим, что независимо оттого, сколько требований поступает на вход обслуживающей системы, данная система (очередь + обслуживаемые клиенты) не может вместить более N-требований (заявок), из которых одна обслуживается, а (N-1) ожидают. Клиенты, не попавшие в ожидание, вынуждены обслуживаться в другом месте, и такие заявки теряются. Наконец, источник, порождающий заявки на обслуживание, имеет неограниченную (бесконечно большую) емкость.
Обозначим T количество тактов, которые пройдут до прихода клиента. Эта величина вычисляется по формуле:
Где R случайная величина, лежащая в границе [0.01…0.99].
Рассчитаем статистику для одноканальной СМО с ожиданием и ограниченной длиной очереди, равной (N-1).
Тогда вероятность того, что канал обслуживания свободен и в системе нет ни одного клиента, равна:
p0=clientNo/taktAll, где
clientNo число тактов, когда в парикмахерской нет ни одного клиента,
taktAll число тактов за рабочий день.
вероятность отказа в обслуживании заявки:
Pотк = clientMiss/clientAll, где
clientMiss число упущенных клиентов,
clientAll число всех клиентов.
Средняя длина очереди:
Pоч = statOcher/taktAll, где
statOcher сумма всех клиентов в очереди.
Вероятность того, что все мастера заняты:
Pbusy = masterYes/taktAll, где
masterYes количество тактов, когда все мастера заняты работой.
Среднее число клиентов в парикмахерской:
Pin = statClin/taktAll, где
statClin сумма числа всех клиентов в парикмахерской.
4 ТЕХНИЧЕСКИЙ ПРОЕКТ
Работу пользователя с разрабатываемой программой представим в виде сценария, заданного ориентированным графом переходов. Вершины графа поставим в соответствие основным окнам и диалогам программы, а дугами будем отображать все возможные переходы между ними. На каждой дуге запишем пункт меню или идентификатор кнопки, при выборе которых происходит соответствующий переход. Граф представлен на рис. 1. По графу легко проследить возможные переходы пользователя по диалогам. Например, при запуске программы открывается главное меню. В нем нажав клавишу «Сгенерировать» запускается моделирование работы парикмахерской с выводом статистики.
запуск
СМО
Парикмахерская
сгенерировать вывод статистики
рис.1
Определим внешний вид окон, присутствующих в графе на рис. 1. Вид главного окна дан на рис. 2:
Рис. 2
Окно включает следующие основные элементы управления: переход к генератору осуществляется с помощью кнопки Button1. За выход отвечает кнопка Button2. Также на форме располагается элемент Label, который демонстрирует название программы.
Сам генератор представлен на рисунке 3:
Рис. 3
За непосредственную генерацию отвечает кнопка Button3, а за выход в меню кнопка Button4. Вывод статистических показателей производится в форму Edit(1-8).
Окно генератора после выполнения программы представлено на рисунке 4:
Рис. 4
После выполнения генерации всплывающее окно сообщает пользователю об этом. Внешний вид окна представлен на рисунке 5:
Рис. 5
4.2 Детализация алгоритма СМО
Разработаем q-схему и граф-схему алгоритма моделирования работы парикмахерской и нахождения различных вероятностей, данный в условии задания. Они показаны на рисунках 6 и 7 соответствено.
Q-схема:
Q1
D1
K2 S2
G1
K1 D2
full
D3
S1 SC1
Рис.6
S1 собирает необслуженные заявки, а S2 обслуженные.
да
да
нет
нет
нет
да
нет да
нет
нет да да
нет
да
Рис. 7
double potokCl плотность прихода клиентов.
double timeOne среднее время работы над одним клиетом.
int timeAll количество тактов в 8-часовом рабочем дне.
int p1,p2,p3 используются для выражения занятости мастеров.
int timeWork1,2,3 используются для выражения времени работы над конкретным клиентом у мастера 1, 2 и 3 соответственно.
В ходе отладки и тестирования программы осуществлялась последовательная генерация и вывод статистических показателей на экран, после чего они сравнивались с реальными.
Ниже представлены снимки экрана программы на различных этапах ее работы с разными исходными данными.
Рис. 8
Исходное состояние окна программы
Рис. 9
Результат работы программы со 112 клиентами
Рис. 10
Результат работы программы со 113 клиентами
Разрабатываемая программа предназначена для моделированя работы парикмахерской в течении рабочего дня и нахождения различных вероятностей.
Входными данными программы являются среднее время обслуживания клиента, среднее время прихода следующего клиента и время работы парикмахерской..
К выходным данным относятся вычисление различных вероятностей и их вывод в текстовом варианте.
После получения всех значений можно провести моделирования, нажав клавишу «Генерировать». Сообщение о завершении процесса моделирования отображается всплывающим окном. После чего результаты выводятся на соответствующие элементы.
ЗАКЛЮЧЕНИЕ
Системы массового обслуживания - это такие системы, в которые в случайные моменты времени поступают заявки на обслуживание, при этом поступившие заявки обслуживаются с помощью имеющихся в распоряжении системы каналов обслуживания.
С позиции моделирования процесса массового обслуживания ситуации, когда образуются очереди заявок (требований) на обслуживание, возникают следующим образом. Поступив в обслуживающую систему, требование присоединяется к очереди других (ранее поступивших) требований. Канал обслуживания выбирает требование из находящихся в очереди и приступает к его обслуживанию. После завершения процедуры обслуживания очередного требования канал обслуживания приступает к обслуживанию следующего требования, если таковое имеется в блоке ожидания.
Цикл функционирования системы массового обслуживания подобного рода повторяется многократно в течение всего периода работы обслуживающей системы. При этом предполагается, что переход системы на обслуживание очередного требования после завершения обслуживания предыдущего требования происходит мгновенно, в случайные моменты времени.
Примерами систем массового обслуживания могут служить:
1. посты технического обслуживания автомобилей;
2. посты ремонта автомобилей;
3. персональные компьютеры, обслуживающие поступающие заявки или требования на решение тех или иных задач;
4. станции технического обслуживания автомобилей;
5. аудиторские фирмы;
6. отделы налоговых инспекций, занимающиеся приемкой и проверкой текущей отчетности предприятий;
7. телефонные станции и т. д.
Основными компонентами системы массового обслуживания любого вида являются:
Входной поток требований. Для описания входного потока требуется задать вероятностный закон, определяющий последовательность моментов поступления требований на обслуживание и указать количество таких требований в каждом очередном поступлении. При этом, как правило, оперируют понятием «вероятностное распределение моментов поступления требований». Здесь могут поступать как единичные, так и групповые требования (требования поступают группами в систему). В последнем случае обычно речь идет о системе обслуживания с параллельно-групповым обслуживанием.
Дисциплина очереди - это важный компонент системы массового обслуживания, он определяет принцип, в соответствии с которым поступающие на вход обслуживающей стемы требования подключаются из очереди к процедуре обслуживания. Чаще всего используются дисциплины очереди, определяемые следующими правилами:
Механизм обслуживания определяется характеристиками самой процедуры обслуживания и структурой обслуживающей системы. К характеристикам процедуры обслуживания относятся: продолжительность процедуры обслуживания и количество требований, удовлетворяемых в результате выполнения каждой такой процедуры. Для аналитического описания характеристик процедуры обслуживания оперируют понятием «вероятностное распределение времени обслуживания требований».
Следует отметить, что время обслуживания заявки зависит от характера самой заявки или требований клиента и от состояния и возможностей обслуживающей системы. В ряде случаев приходится также учитывать вероятность выхода обслуживающего прибора по истечении некоторого ограниченного интервала времени.
Структура обслуживающей системы определяется количеством и взаимным расположением каналов обслуживания (механизмов, приборов и т. п.). Прежде всего следует подчеркнуть, что система обслуживания может иметь не один канал обслуживания, а несколько; система такого рода способна обслуживать одновременно несколько требований. В этом случае все каналы обслуживания предлагают одни и те же услуги, и, следовательно, можно утверждать, что имеет место параллельное обслуживание.
Система обслуживания может состоять из нескольких разнотипных каналов обслуживания, через которые должно пройти каждое обслуживаемое требование, т. е. в обслуживающей системе процедуры обслуживания требований реализуются последовательно. Механизм обслуживания определяет характеристики выходящего (обслуженного) потока требований.
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
ПРИЛОЖЕНИЕ
ПРИЛОЖЕНИЕ: Листинг программы
//---------------------------------------------------------------------------
#include <vcl.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#pragma hdrstop
#include "Unit2.h"
#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
Edit1->Text="0";
Edit2->Text="0";
Edit3->Text="0";
Edit4->Text="0";
Edit5->Text="0";
Edit6->Text="0";
Edit7->Text="0";
Edit8->Text="0";
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button2Click(TObject *Sender)
{
Edit1->Text="0";
Edit2->Text="0";
Edit3->Text="0";
Edit4->Text="0";
Edit5->Text="0";
Edit6->Text="0";
Edit7->Text="0";
Edit8->Text="0";
Form2->Visible = false;
Form1->Visible = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
srand ( time(NULL) );
double potokCl = 0.1, randNext = 0, timeOne = 0.05;
int timeAll=( (8*60*60)/30 ), timeNext = 0, timeLast = 0, clientFirst = 1, clientIn=0, newClient=0;
int timeWork1=0, timeWork2=0, timeWork3=0, p1=0, p2=0, p3=0, clientMiss=0, clientApply=0, ochered=0;
double neObsluzhen=0, clientAll=0, netClient1=0, netClient2=0, netClient3=0, masterYes2=0, statOcher2=0, statOcher3=0;;
double statClin=0, statClin2=0;
int clientNo=0, taktAll=(8*60*60)/30, masterYes1=0, statOcher=0;
//-=====- главный цикл
for( ; timeAll > 0; timeAll-- )
{
if( clientFirst == 1 )
{
randNext = 1 + rand()%99;
randNext = randNext/100;
timeNext = (-1/potokCl)*log(randNext);
timeLast = timeNext;
clientFirst--;
}
if ( timeLast == 0 )
{
clientIn++;
newClient = 1;
randNext = 1 + rand()%99;
randNext = randNext/100;
timeNext = (-1/potokCl)*log(randNext);
timeLast = timeNext;
}
if( newClient==1 )
{
if( (clientIn+1)<7 )
{
ochered++;
if( p1==0 )
{
randNext = 1 + rand()%99;
randNext = randNext/100;
timeWork1 = (-1/timeOne)*log(randNext);
p1++;
ochered--;
}
else
{
if( p2==0 )
{
randNext = 1 + rand()%99;
randNext = randNext/100;
timeWork2 = (-1/timeOne)*log(randNext);
p2++;
ochered--;
}
else
{
if( p3==0 )
{
randNext = 1 + rand()%99;
randNext = randNext/100;
timeWork3 = (-1/timeOne)*log(randNext);
p3++;
ochered--;
}
}
}
}
else
{
clientMiss++;
clientIn--;
}
}
if( p1==1 ) timeWork1--;
if( p1==1&&timeWork1==0 )
{
p1--;
clientApply++;
clientIn--;
}
if( p2==1 ) timeWork2--;
if( p2==1&&timeWork2==0 )
{
p2--;
clientApply++;
clientIn--;
}
if( p3==1 ) timeWork3--;
if( p3==1&&timeWork3==0 )
{
p3--;
clientApply++;
clientIn--;
}
if( timeLast !=0 ) timeLast--;
if (clientIn==0)
{
clientNo++;
}
if(p1==1&&p2==1&&p3==1)
{
masterYes1++;
}
newClient=0;
statOcher=statOcher+ochered;
statClin=statClin+clientIn;
}
if ( ochered>0 )
{
clientMiss = clientMiss + ochered;
}
if( (clientIn-ochered)>0 )
{
clientApply = clientApply + (clientIn-ochered);
}
clientAll = ( clientMiss+clientApply );
neObsluzhen = clientMiss/clientAll;
netClient1 = clientNo;
netClient2 = taktAll;
netClient3 = netClient1/netClient2;
masterYes2 = masterYes1/netClient2;
statOcher2=statOcher;
statOcher3=statOcher2/taktAll;
statClin2=statClin/taktAll;
String count;
String count2;
String count3;
String count4;
String count5;
String count6;
String count7;
String count8;
count=FloatToStr(neObsluzhen); //не обслужен
count2=FloatToStr(netClient3); //отсутствие в парикмахерской
count3=FloatToStr(masterYes2); //все мастера заняты
count4=FloatToStr(clientAll);
count5=IntToStr(clientMiss);
count6=IntToStr(clientApply);
count7=FloatToStr(statOcher3); //среднее число очереди
count8=FloatToStr(statClin2); // среднее число клиентов
ShowMessage("Моделирование завершено!");
Edit1->Text=count4;
Edit2->Text=count;
Edit3->Text=count2;
Edit4->Text=count3;
Edit5->Text=count5;
Edit6->Text=count6;
Edit7->Text=count7;
Edit8->Text=count8;
}
//---------------------------------------------------------------------------