Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Model.cpp






//-----------------------------------------------

#include < vcl.h>

#pragma hdrstop

#include " model.h"

#include < stdlib.h>

//-----------------------------------------------

#pragma package(smart_init)

#pragma resource " *.dfm"

TForm1 *Form1;

//-----------------------------------------------

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(2*tgen2+1);

tk=tk+ak; //вычисляем время генерации следующей заявки

}

if (tm==tk)//если модельное время равно времени генерации заявки, то

{

queue1++; //увеличиваем очередь на 1

}

if (c1.free& & queue1> 0)//если ЭВМ1 свободна и очередь не пуста,

{

//то определяем время занятости ЭВМ1

c1.time=(t1evm1-t2evm1)+random(2*t2evm1+1);

//и занимаем ее

c1.free=False;

queue1--; //удаляем заявку из очереди

}

else //иначе, если свободна ЭВМ2 и очередь не пуста,

if (c2.free& & queue1> 0)//то обрабатываем заявку на этом устройстве

{

c2.time=(t1evm2-t2evm2)+random(2*t2evm2+1);

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. Если обе машины заняты, то возвращаемся на начало цикла и увеличиваем время моделирования системы на единицу. Цикл продолжается до тех пор, пока не истечен заданный период имитации.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.