max_klientow = input('podaj liczbe klientow: '); %1000;

a = 1.;
b = .8;

% pcmk - przedzialy czasu miedzy nadejsciem 
% kolejnych klientow
pcmk = -log(rand(max_klientow,1)) * a; 
hist(pcmk,0.5:1:10.5,1);
pause;

%co - czas trwania obslugi klienta
co = -log(rand(max_klientow,1))* b; 
hist(co,0.5:1:10.5,1);
pause;

% cnk - czas nadejscia klienta
cnk = cumsum(pcmk); 

po = zeros(max_klientow,1); % po - poczatek obslugi klienta
ko = zeros(max_klientow,1); % ko - koniec   obslugi klienta
csk = zeros(max_klientow,1); % csk - czas stania w kolejce


po(1) = cnk(1);
ko(1) = cnk(1)+co(1);
csk(1) = 0.;

for n=2:max_klientow
  if (cnk(n) > ko(n-1))
    po(n) = cnk(n);
  else
    po(n) = ko(n-1);
  endif
  ko(n) = po(n) + co(n);
  csk(n) = po(n) - cnk(n);
endfor

hist(csk,0.5:1:10.5,1);
pause

nast_wejscie = 1;
nast_wyjscie = 1;
liczba_klientow = 0;
stary_czas = 0.;
czasy = zeros(max_klientow,1);

while (nast_wejscie<=max_klientow) 
  if (cnk(nast_wejscie) < ko(nast_wyjscie))
    nowy_czas = cnk(nast_wejscie);
    przedzial = nowy_czas-stary_czas;
    czasy(liczba_klientow+1) += przedzial;
    liczba_klientow++;
    nast_wejscie++;
  else
    nowy_czas = ko(nast_wyjscie);
    przedzial = nowy_czas-stary_czas;
    czasy(liczba_klientow+1) += przedzial;
    liczba_klientow--;
    nast_wyjscie++;
  endif
  stary_czas = nowy_czas;
endwhile

while (nast_wyjscie<=max_klientow)
  nowy_czas = ko(nast_wyjscie);
  przedzial = nowy_czas-stary_czas;
  czasy(liczba_klientow+1) += przedzial;
  liczba_klientow--;
  nast_wyjscie++;
  stary_czas = nowy_czas;
endwhile

najdluzsza_kolejka = max(find(czasy>0))-1
gset xtics 0,1,najdluzsza_kolejka+1
bar(czasy(1:najdluzsza_kolejka+1)/sum(czasy))
replot
czasy(1)/sum(czasy)
