function SMO1

% 1.Время обработки P(сумма(меньшее из времени постуления и обработки-t ))
% 2.Количество(время) задержки Q(сумма(P*очередь))
% 3.Системное время t(как условие,между tS и tA)
% 4.Очередь(число,определяется крайним индексом)
% 5.Определение работающих устройств
% 6.tS для каждого устройства(for,if,tS)
% 7.Вычисляем tA    

m=2147483647;
a=630360016;
e(1)=1584371;
for i=1:1000
e(i+1)=mod(a*e(i),m);
e(i)=ceil(e(i)/100000);
end;
% %======1=======
% dev=3;
% o1=21.1668;%A  min 19.2475 max 21.1668
% o2=31.7502;%S  min 28.8373 max 31.7502

%======2=======
% dev=2;
% o1=19.2475;%A  min 19.2475 max 21.1668
% o2=31.7502;%S  min 28.8373 max 31.7502
% % 
% %======3=======
% dev=3;
% o1=19.2475;%A  min 19.2475 max 21.1668
% o2=28.8373;%S  min 28.8373 max 31.7502

% %======4=======
dev=2;
o1=19.2475;%A  min 19.2475 max 21.1668
o2=31.7502;%S  min 28.8373 max 31.7502

c=1000;
t=0;
xz=0;
o1=20;
o2=30;
dev=3;
% for i=1:20
% E1=e(1+i);
% E2=e(333+i);
% E3=e(666+i);
% mE1(i)=E1;
% mE2(i)=E2;
% mE3(i)=E3;

E1=113;
E2=155;
E3=37;


%кол-во устройств
tA=gen2(E1,o1);
%первоначальное системное время
B=0;  %очередь
Q=0;  %задержка
r=1;  %кол-во заявок в очереди
delay=0; %сумма xS
for i=1:c
    tB(i)=0;  %время в очереди
    nA(i)=0;  %номер заявки поступившей в очередь 
    tAB(i)=0; %время поступление заявки в очередь
    xS(i)=0;
    pri(i)=0;
end
for i=1:dev
    s(i)=0;  %устройства
    P(i)=0;  %время обработки
    tS(i)=0;  %время окончания обработки
    bwt(i)=0;  %время начала работы устройства
    dwt(i)=0;  %время работы устр. 
    ewd(i)=0; %общее время работы
end
m=1; %индекс для s
j=1;  %индекс для xS
k=1;  %индекс для xA


%-------------------------------------------------------------------
while k~=c
    
%----определение минимального времени окончания обработки (minS)------
minS=0;
cond=0;%условие
for i=1:dev
    if tS(i)~=0
        cond=1;
        minS=tS(i);
        break;
    end;
end;
if (cond==1)
    for i=dev
        if (tS(i)~=0)&(minS~=0)&(tS(i)<minS)
            minS=tS(i);
        end;
    end;
end;
%minS=minS
AS=0;%случай когда tA=tS
if (minS==tA)
    AS=1;
end;

%-----вычисляем время обработки P(п.1)------------

if ((minS>tA)&(minS~=0))|(AS==1)
    for i=1:dev
        if (tS(i)~=0)
            P(i)=(tA-t)+P(i);
        else 
            P(i)=P(i);
        end;
    end;
else
    if (minS<tA)&(minS~=0)
    for i=1:dev
        if (tS(i)~=0)
            P(i)=(minS-t)+P(i);
        else 
            P(i)=P(i);
        end;
    end;
end;
end;

%------вычисление времени задержки Q(п.2)--------

if ((tA<minS)&(minS~=0))|(AS==1)
    Q=(tA-t)*B+Q;
else
    if (tA>minS)&(minS~=0)
        Q=(minS-t)*B+Q;
    end;
end;


%-----вычисляем системное время t(п.3)-----------
if (minS==0)
    t=tA;
else
    if ((tA<minS)&(minS~=0))|(AS==1)
        t=tA;
    else
        if (tA>minS)&(minS~=0)
            t=minS;
        end;
    end;
end;

%--------Формирование очереди B (п.4)--------------
cond=0;
for i=1:dev
    if (s(i)==1)
        cond=cond+1;
    end;
end;
 K=k;
 if ((tA<minS)&(cond==dev))|((AS==1)&(cond==dev))
     B=B+1;
     nA(B)=k;%номер заявки поступившей в очередь
     tAB(B)=t;%время поступления заявки
     E3=gen1(E3);
     pri(k)=gen4(E3);%приоритет
     E2=gen1(E2);
     xS(k)=gen3(E2,o2);
     delay=delay+xS(k);
 else
     if (B~=0) %не пустая очередь
         B=B;
         nA(B)=nA(B);
         tAB(B)=tAB(B);
         r=r; %кол-во заявок в очереди
     end;
 end;
 
%-------определение работающих устройств S (п.5)---------------
  for i=1:dev
      in(i)=0;%для определения работы устройства
  end;
  
  bn=0;
  if (minS==0)
      s(1)=1;
      bwt(1)=t;%время начала работы устройства
      in(1)=1;
  else
      if ((tA<minS)&(minS~=0))|(AS==1)
          for i=1:dev
              if (s(i)==0)&(bn~=1)
                  s(i)=1;
                  bwt(i)=t;
                  in(i)=1;
                  bn=1;
              end;
          end;
      end;
      for i=1:dev
          if (tS(i)==t)
              s(i)=0;
              bwt(i)=bwt(i);
              dwt(i)=t-bwt(i);%device work time(время работы устройства)
              ewd(i)=ewd(i)+dwt(i);%общее время работы устройства
              dwt(i)=0;
              bwt(i)=0;
              tS(i)=0;
          else
              s(i)=s(i);
          end;
      end;
  end;
  
%------вычисляем tS(п.6)-----------------------
if (B==0)
    for i=1:dev
        if (in(i)==1)
            E2=gen1(E2);
            xS=gen3(E2,o2);
            delay=delay+xS;
            tS(i)=t+xS;
        end;
    end;
else
    for j=1:dev
    mp=1;
    if (B>1)
        m=1;
        num=pri(nA(1));
        for i=2:B
            if pri(nA(i))>num;
                num=pri(nA(i));
                m=i;
            end;
        end;
        mp=m;
    end;
    if (B~=0)&(s(j)==0)
        tS(j)=t+xS(nA(mp));
        tB(r)=t-tAB(mp);%время в очереди
        r=r+1;
        if (mp~=B)
            for i=mp:(B-1)
                nA(i)=nA(i+1);
                tAB(i)=tAB(i+1);
            end;
        end;
        tAB(B)=0;
        nA(B)=0;
        B=B-1;
        s(j)=1;
        bwt(j)=t;
    end;
end;
end;

%--------------Вычисляем tA(п.7)--------------------
if (minS==0)
    E1=gen1(E1);
    xA=gen2(E1,o1);
    tA=tA+xA;
    k=k+1;
else
    if ((tA<minS)&(minS~=0))|(AS==1)
        E1=gen1(E1);
        xA=gen2(E1,o1);
        tA=tA+xA;
        k=k+1;
    else
        tA=tA;
    end;
end;
% z(k)=t; %массив времени
% M(k)=Q/t;
% och(k)=B;
% 
% 
% sto=delay;%среднее время ожидания
% for i=1:r
%     sto=sto+tB(i);
% end;
% sto=sto/c;
% L=(sto/o1)/t;
% xz(i)=L;
% 
% cus=0;
% for i=1:dev
%     cus=cus+ewd(i);
% end;
% cus=cus/(dev*t);
% yz(k)=cus;



end; % для while  

M=Q/t;
sto=delay;%среднее время ожидания
for i=1:r
    sto=sto+tB(i);
end;
sto=sto/c;
L=(sto/o1)/t;

cus=0;
for i=1:dev
    cus=cus+ewd(i);
end;
cus=cus/(dev*t);

tib=0; %время в очереди
u=0;
for i=1:r-1
    tib=tib+tB(i);
    u=u+1;
end;

szvo=0; %средняя задержка в очереди
if (r~=1)
    szvo=tib/(r-1);
end;

% L
% end;%для for
 %===========================================================================
% M=0;
% M=Q/t %среднее число требований в очереди
% cus=0; %коэффициент использования системы
cus
sto
szvo
M
L

% 
% h1=figure('Name','График по времени числа требований в системе.');
% hold on;
% for i=1:r-1
% % plot(z(i),xz(i),'b:.')
% line([z(i) z(i+1)],[xz(i),xz(i+1)],'LineWidth',2)
% end;
% 
% 
% % end; %для первого for              
% h2=figure('Name','График по времени числа требований в очереди');
% hold on;
% for i=1:c-1
% % plot(z(i),och(i),'b-.')
% line([z(i) z(i+1)],[och(i),och(i+1)],'LineWidth',2)
% end;
% 
% h3=figure('Name','График по времени коэффициент использования системы');
% hold on;
% for i=1:c-1
% line([z(i) z(i+1)],[yz(i),yz(i+1)],'LineWidth',1)
%     % plot(z(i),yz(i),'b:')
% end;

% line([int(i) int(i+1)],[p(i),p(i)],'LineWidth',2)


           
            
            
            
            

    