Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
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. Если обе машины заняты, то возвращаемся на начало цикла и увеличиваем время моделирования системы на единицу. Цикл продолжается до тех пор, пока не истечен заданный период имитации.
|