Вычислительная система (ВС) состоит из сервера, обрабатывающего программы.
Программы поступают случайным образом, распределенные по линейному закону:
Тzmin = 1/2 сек, Тzmax = 5/6 сек.
Время обработки одной программы сервером - случайная величина, распределенная по линейному закону:
Тsmin = 1 сек, Тsmax = 5 сек.
Если сервер занят, обрабатывает программу, то поступающая следующая программа отправляется в буфер. Число программ в буфере - случайная величина и ограничено (не более 4-х). Если поступила следующая программа, а в буфере содержится уже 4 три программы, то программа покидает ВС не обработанной.
Разработать программу, моделирующую работу ВС и найти ее характеристики за время работы 1 час. Характеристики ВС:
• Р0 - вероятность того, что ВС не загружена,
• Р1 — вероятность того, что сервер обрабатывает одну программу и буфер пуст,
• Р2 - вероятность того, что в буфере находится 1 -на программа,
• Р3 - вероятность того, что в буфере находится 2-ве программы,
• Р4 - вероятность того, что в буфере находится 3-ри программы,
Р5 - вероятность того, что в буфере находится 3-ри программы,
• Q - относительная пропускная способность ВС - средняя доля программ, обработанных ВС,
• S - абсолютная пропускная способность - среднее число программ, обработанных в единицу времени,
• Ротк - вероятность отказа, т.е. того, что программа будет не обработанной,
• Nпрог - среднее число программ в ВС,
• Тпрог - среднее время нахождения программы в ВС,
• Nбуф - среднее число программ в буфере,
• Тбуф - среднее время нахождения программы в буфере.
Программа писалась в borland C++ builder
Есть программный код помогите разобраться с буфером
Код: Выделить всё
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include <math>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
double Ce,Tzmin, Tzmax, Tsmin, Tsmax, Pk, P0, P1, P2, P3, P4, P5, Q, S,
Potk, buf, Nprog, Tprog, Nbuf, Tbuf;
double L, Tobr, M, Sum, cur, n, Dprog, Rprog, p, N, H1 ;
{
//Линейный закон
if (RadioButton1->Checked)
{
Tzmin = StrToFloat(Edit2->Text);
Tzmax = StrToFloat(Edit3->Text);
Tsmin = StrToFloat(Edit4->Text);
Tsmax = StrToFloat(Edit5->Text);
// Количество программ на выполнение
Sum=0;
N=0;
while (Sum<=3600)
{
// Интервал новой пргограммы
Dprog=((double)rand())/(double)RAND_MAX;
Dprog=Dprog*(Tzmax-Tzmin)+Tzmin;
cur=Dprog;
Sum=Sum+cur;
N++;
}
Pk=N;
if (Ce<1) // Занят ли сервер
{
Rprog=((double)rand())/(double)RAND_MAX;
Rprog=Rprog*(Tsmax-Tsmin)+Tsmin;
Ce=Rprog;
H1++;
}
// Если занят то заявка попадает в буфер
/ Расчет
// Вывод значений
Edit1->Text = FloatToStr( P0 );
Edit8->Text = FloatToStr( P1 );
Edit9->Text = FloatToStr( P2 );
Edit10->Text = FloatToStr( P3 );
Edit11->Text = FloatToStr( P4 );
Edit12->Text = FloatToStr( P5 );
Edit13->Text = FloatToStr( Potk );
Edit14->Text = FloatToStr( Q );
Edit15->Text = FloatToStr( S );
Edit16->Text = FloatToStr( Nprog);
Edit17->Text = FloatToStr( Tprog);
Edit18->Text = FloatToStr(Tbuf);
Edit19->Text = FloatToStr(Nbuf);
}
//Экспоненциальный закон
if (RadioButton2->Checked)
{
L = StrToFloat(Edit6->Text);
Tobr = StrToFloat(Edit7->Text);
n = 5;
M = 1/Tobr;
p = L/M;
P0 = (1-p)/(1-pow(p,(n+1)));
P1 = p*P0;
P2 = pow(p,2)*P0;
P3 = pow(p,3)*P0;
P4 = pow(p,4)*P0;
P5 = pow(p,5)*P0;
Potk = P5;
Q = 1-Potk;
S = L*Q;
Nprog =(p*(1-(n+1)*pow(p,n)+n*pow(p,n+1)))/((1-p)*(1-pow(p,n+1)));
Tprog = Nprog/(L*(1-P5));
Tbuf = (Tprog-1)/M;
Nbuf = L*(1-P5)*Tbuf;
// Вывод значений
Edit1->Text = FloatToStr( P0 );
Edit8->Text = FloatToStr( P1 );
Edit9->Text = FloatToStr( P2 );
Edit10->Text = FloatToStr( P3 );
Edit11->Text = FloatToStr( P4 );
Edit12->Text = FloatToStr( P5 );
Edit13->Text = FloatToStr( Potk );
Edit14->Text = FloatToStr( Q );
Edit15->Text = FloatToStr( S );
Edit16->Text = FloatToStr( Nprog);
Edit17->Text = FloatToStr( Tprog);
Edit18->Text = FloatToStr(Tbuf);
Edit19->Text = FloatToStr(Nbuf);
}
}
}