|
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "model.h"
#include <stdlib.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int tm=0;//модельное время
int tk=0,ak=0;//время генерации заявки и ее интервал
Device c1,c2;//ЭВМ1 и ЭВМ2
int queue1=0;//очередь
int tgen1,tgen2;//время генерация заявок
int tend;//время окончания моделирования
int t1evm1,t2evm1,t1evm2,t2evm2;//время обработки на ЭВМ1 и ЭВМ2;
//инициализация данных
tgen1=StrToInt(Edit1->Text);
tgen2=StrToInt(Edit2->Text);
tend=StrToInt(Edit3->Text);
t1evm1=StrToInt(Edit4->Text);
t2evm1=StrToInt(Edit5->Text);
t1evm2=StrToInt(Edit6->Text);
t2evm2=StrToInt(Edit7->Text);
c1.free=True;//ЭВМ1 свободна
c1.count=0;//текущее количество обработанных заявок равно 0
c1.time=0;
c2.free=True;//ЭВМ2 свободна
c2.count=0;
c2.time=0;
Randomize();
//открываем цикл по времени
while (tm<tend)
{
tm++;//увеличиваем модельное время
if (ak==0)//если можно создать заявку,
{
//то генерируем интервал ее поступления
ak=(tgen1-tgen2)+random(tgen2*tgen2);
tk=tk+ak;//вычисляем время генерации следующей заявки
}
if (tm==tk)//если модельное время равно времени генерации заявки, то
{
queue1++;//увеличиваем очередь на 1
}
if (c1.free&&queue1>0)//если ЭВМ1 свободна и очередь не пуста,
{
//то определяем время занятости ЭВМ1
c1.time=(t1evm1-t2evm1)+random(t2evm1*t2evm1);
//и занимаем ее
c1.free=False;
queue1--;//удаляем заявку из очереди
}
else //иначе, если свободна ЭВМ2 и очередь не пуста,
if (c2.free&&queue1>0)//то обрабатываем заявку на этом устройстве
{
c2.time=(t1evm2-t2evm2)+random(t2evm2*t2evm2);
c2.free=False;
queue1--;
}
if (c1.time>0) c1.time--;//уменьшаем время обработки на ЭВМ1
else
if (c1.time==0&&!(c1.free))//если время обслуживания завершено
//и ЭВМ1 не свободна,
{
c1.free=True;//то освобождаем ЭВМ1
c1.count++;//увеличиваем число обслуженных заявок
}
if (c2.time>0) c2.time--;//уменьшаем время обработки на ЭВМ2
else
if (c2.time==0&&!(c2.free))//если время обслуживания завершено,
{
c2.free=True;//то освобождаем ЭВМ2
c2.count++;//увеличиваем число обслуженных заявок
}
if (ak>0) ak--;//приближаемся к генерации следующей заявки
}
//вывод результатов моделирования
Edit8->Text=IntToStr(queue1);
Edit9->Text=IntToStr(c1.count+c2.count);
}
//---------------------------------------------------------------------------
В заголовочном файле model.h описывается структура Device, которая применяется в основном модуле программы model.cpp. Программа сначала считывает исходные данные для моделирования и инициализирует состояние системы. Затем в цикле происходит генерация новой заявки, помещение ее в очередь и занятие одним из устройств либо ЭВМ1, либо ЭВМ2. Если обе машины заняты, то возвращаемся на начало цикла и увеличиваем время моделирования системы на единицу. Цикл продолжается до тех пор, пока не истечен заданный период имитации.
Задание:
Разработать программу моделирования системы на языке С++.
Варианты
Вариант 1
Банк обслуживает клиентов трех типов: производящих коммунальные платежи, делающих операции по вкладам первого типа и производящих операции по вкладам второго типа. Клиенты этих типов поступают с периодом 7±3, 7±5, 20±10 минуты. На обслуживание клиентов каждого типа отводится соответственно 5±2, 11±2, 6±2 минуты. Составить схему и промоделировать работу сотрудников банка в течении 8 часов.
Вариант 2
Пакеты достигают компьютерного узла сети связи со средним временем между двумя входами равным 5 мс и передаются адресату узла. Длина сообщения - 256 байтов. Из узла может быть передано одновременно только одно сообщение. Скорость передачи по линии - 56 килобайтов в секунду (кбит/с). Если узел занят, то нельзя передавать сообщение и узел не может принимать сообщение, пока он не завершит передачу. Составить схему и промоделировать работу узла сети в течении дня.
Вариант 3
Зрители подходят к турникету на футбольном стадионе каждые7+-7 секунд и становятся в очередь, чтобы пройти на стадион. Время прохода одного зрителя распределено равномерно в диапазоне 5+-3 сек. Требуется построить схему и модель для определения времени, которое нужно для того, чтобы пройти через турникет 1000 зрителей.
Вариант 4
Участок цеха состоит из трех станков, которые обрабатывают два потока деталей различного типа. Детали первого типа обрабатываются станками E1, E2 и E3. Детали второго типа – станками E2, E1 и E3. Детали поступают с интервалами 6+-2 и 10+-4 минуты соответственно. Станок E1 обрабатывает деталь 3+-1 минуту, E2- 5+-3 минуты, E3- 4+-2 минуты. Разработать схему и модель работы цеха в течении недели.
Вариант 5
Локальная сеть состоит из трех компьютеров и сервера. К серверу подключен принтер. Компьютеры посылают на печать страницы каждые 20+-5, 40+-5ж, 30+-10 минут. Компьютеры отправляет в среднем от 5 до 10 страниц. Одну страницу принтер печатает 60+-30секунд. Разработать схему и смоделировать процесс работы сетевого принтера в течении дня.
Вариант 6
На автозаправку каждые 5+-1 минуту приезжают автомобили. Время на заправку составляет 2+-1 минуту, а время на оплату – 60+-20 секунд. Составить схему и модель работы автозаправки машин в течении смены (6 часов).
Дата добавления: 2014-12-19; просмотров: 116 | Поможем написать вашу работу | Нарушение авторских прав |
|