Программа
program Kachok;
uses crt;
const nmax=100;
{Функция FAKT вычисляет N!}
function FAKT(n:integer):real;
var i:integer;
fc:real;
begin
if n<=1 then FAKT:=1 else
begin
fc:=1;
{Цикл определения N!}
for i:=2 to n do fc:=fc*i;
FAKT:=fc; end; end;
{Функция POK a в степени x – показательная a>0 a^x=exp(x*ln(a))}
function POK(a,x:real):real;
begin
POK:=exp(x*ln(a)); end;
var key:char;
alfa,betta,VRsr,q1,q2,q3,P0,Pn,Pk,zk,Pz,SUM,PkPLUS1,PnPLUSs,VRog,VRblZ,SRdln,SR4treb,N0,N3,POKUP,Kpr,Kz,Gek:real;
k,n,S,So:integer;
FC:text;
begin
assign(fc,'rezultat.txt');
rewrite(fc);
clrscr;
write('Ввести количество обслуживающих касс ');readln(n);
write('Ввести среднее количество покупателей, поступающих в час ');readln(alfa);
write('Ввести среднее время обслуживания одного покупателя (в минутах) ');readln(VRsr);
betta:=1/(VRsr/60); {переходим в часы}
write('Ввести стоимость потерь, связанных с простаиванием покупателя в очереди q1 ');readln(q1);
write('Ввести стоимость потерь за простой кассы q2 ');readln(q2);
write('Ввести стоимость эксплуатации кассы при обслуживании требований в единицу времени q3 ');readln(q3);
{Вероятность того, что система свободна}
P0:=0;
{Счет суммы}
for k:=0 to n-1 do P0:=P0+POK((alfa/betta),k)/FAKT(k);
{результат Р0}
P0:=1/(P0+POK((alfa/betta),n)/FAKT(n)/(1-alfa/(n*betta)));
writeln(fc,'Вероятность того, что система свободна ',P0:6:5);
{Вероятность того, что k касс занято}
zk:=0;
for k:=1 to n do
begin
Pk:=POK((alfa/betta),k)/FAKT(k)*P0;
writeln(fc,'Вероятность того, что занята ' ,k:3,'касс ',Pk:6:5);
zk:=zk+Pk; end;
{Вероятность того, что все приборы заняты}
Pz:=1-zk;
writeln(fc,'Вероятность того, что все приборы заняты ',Pz:6:5);
{Поиск числа требований в системе из уравнения по заданию, задаем условие для k}
Pk:=P0;
k:=0;
SUM:=0;
repeat
k:=k+1;
if k<n then PkPLUS1:=alfa/((k+1)*betta)*Pk else PkPLUS1:=alfa/(n*betta)*Pk;
SUM:=SUM+PkPLUS1;
Pk:=PkPLUS1;
until(SUM>0.999) or (PkPLUS1<0.00001);
So:=k-n;
{Вероятность того, что в очереди S требований}
Pn:=POK((alfa/betta),n)/FAKT(n)*P0;
for S:=0 to So do
begin
PnPLUSs:=Pn*POK((alfa/(n*betta)),S);
writeln(fc,'P(',S:3,')=',PnPLUSs:6:5); end;
{Среднее время, в течение которого клиент ждет обслуживания}
VRog:=Pz/(n*betta-alfa);
writeln(fc,'Среднее время, в течение которого клиент ждет обслуживания ',VRog:6:2);
{Вероятность того, что время ожидания в очереди больше заданного}
VRblZ:=Pz*exp(-(n*betta-alfa)*VRog);
writeln(fc,'Вероятность того, что время ожидания в очереди больше заданного ',VRblZ:8:7);
{Средняя длина очереди}
SRdln:=Pn*alfa/(n*betta)/sqr(1-(alfa/(n*betta)));
writeln(fc,'Средняя длина очереди ',SRdln:6:5);
{Среднее число требований в системе}
SR4treb:=0;
for k:=1 to n-1 do SR4treb:= SR4treb+POK((alfa/betta),k)/FAKT(k-1);
SR4treb:=SRdln+Pn*n/(1-alfa/(n*betta))+P0*SR4treb;
writeln(fc,'Среднее число покупателей в системе ',SR4treb:6:5);
{Среднее число свободных приборов}
N0:=0;
for k:=0 to n-1 do N0:=N0+(n-k)/FAKT(k)*POK((alfa/betta),k)*P0;
writeln(fc,'Среднее число свободных приборов ',N0:8:5);
{Среднее число приборов, занятых обслуживанием}
N3:=n-N0;
writeln(fc,'Среднее число приборов, занятых обслуживанием ',N3:8:3);
POKUP:=N3;
writeln(fc, 'Среднее число обслуживаемых клиентов ',POKUP:8:3);
{Коэффициент простоя приборов}
Kpr:=N0/n;
writeln(fc,'Коэффициент простоя приборов ',Kpr:3:5);
{Коэффицент загрузки приборов}
Kz:=N3/n;
writeln(fc,'Коэффициент загрузки приборов ',Kz:8:3);
{Суммарные потери за месяц}
Gek:=12*30*(SRdln*q1+N0*q2+N3*q3);
writeln(fc,'Суммарные потери за месяц ',Gek:6:2);
close(FC);
end.