Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Unit1.cpp



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

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

#include "Unit2.h"

#include "Unit3.h"

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

#pragma package(smart_init)

#pragma link "CGAUGES"

#pragma resource "*.dfm"

TForm1 *Form1;

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

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

int TForm1:: GenTask (int a,int b) // генерация размера задачи

{

return(a + 10*random((b+10)/10));

}

int TForm1:: GenTime (int a,int b,int tsk) // генерация времени следующей задачи

{

return(tsk + a + random(b+1));

}

int TForm1:: IncTerminal (int a)

{

if(a<2) a++;

else {a = 0; cycle++;}

return a;

}

int TForm1:: GetTask (src *s,int i) // генерация задачи

{

if(s[i].ntime == t) {

s[i].task = GenTask(gen_task,lng_task);

s[i].ntime = GenTime(gen_time,lng_time,t);

return 1;

}

else return 0;

}

void TForm1:: BeginParam(src *source,str *store, proc *CPU)

{

for(int i=0;i<3;i++) {

source[i].ntime = 0;

source[i].task = 0;

store[i].task = 0;

}

store[3].task = 0;

CPU->terminal = 0;

CPU->end_proc = 0;

gen_time = StrToInt(edGen_time->Text);

lng_time = StrToInt(edLng_time->Text);

gen_task = StrToInt(edGen_task->Text);

lng_task = StrToInt(edLng_task->Text);

proc_speed = StrToInt(edProc_speed->Text);

proc_time = StrToInt(edProc_time->Text);

End_time = StrToInt(edTime->Text);

count_task_first = 0;

cycle = 0;

count_err = 0;

count_task = 0;

t = 0;

Series1->Clear();

Series2->Clear();

}

void TForm1:: OutParam(str *st)

{

float temp= count_err;

Edit3->Text = count_task;

Edit4->Text = count_task_first;

Edit5->Text = count_task - count_task_first;

Edit6->Text = count_err;

Edit8->Text = st[3].task;

Edit9->Text = cycle;

Edit1->Text = temp/(count_err+count_task);

}

int TForm1:: Processing(str *st, proc *CPU)

{

int i = CPU->terminal;

if(st[i].task>0) { // в накопителе терминала имеется заявка

if((st[i].task/proc_speed) <= proc_time) {

CPU->end_proc = t + st[i].task/proc_speed; // напрямую в ЭВМ

count_task_first++;

st[i].task = 0;

count_task++;

}

else {

st[3].task += st[i].task - proc_speed * proc_time;//в ЭВМ и часть в буфер

CPU->end_proc = t + proc_time;

st[i].task = 0;

count_task++;

}

}

else {

if(st[3].task>0) { // решается задача из буфера

if((st[3].task/proc_speed) <= proc_time) {

CPU->end_proc = t + st[3].task/proc_speed;

st[3].task = 0;

}

else {

st[3].task = st[3].task - proc_speed * proc_time;

CPU->end_proc = t + proc_time;

}

}

else return 0;

}

CPU->terminal = IncTerminal(CPU->terminal);

Series1->AddXY(t,st[3].task);

Series2->AddXY(t,st[0].task);

}

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

void __fastcall TForm1::Button1Click(TObject *Sender)

{

src *source = new src [3];

str *store = new str [4];

proc *CPU = new proc;

BeginParam(source,store,CPU);

for(t=0;t<End_time;t++)

{

CGauge1->Progress = t;

for(int i=0;i<3;i++) // заполнение терминалов задачами

if(GetTask(source,i)) {

if(store[i].task==0) {

store[i].task = source[i].task;

source[i].task = 0;

}

else count_err++;

}

if(CPU->end_proc<=t) Processing(store,CPU); // Обработка задач

}

OutParam(store);

}

void __fastcall TForm1::Q1Click(TObject *Sender)

{

Form2->ShowModal();

}

void __fastcall TForm1::N2Click(TObject *Sender)

{

Form3->ShowModal();

}





Дата публикования: 2015-10-09; Прочитано: 197 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...