Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 15.06.2011, 13:48   #1 (permalink)
K.Igor
Новичок
 
Регистрация: 15.06.2011
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Программа имитационного моделирования

Помогите разобраться с кодом.Программа имитационного моделирования.

Код:
Program masterskayaSMO;
uses crt,graph;

Const m=4; { конечная длина очереди}
n=3; {количество каналов}
T=8; {время работы СМО}
Lam=5; {интенсивность потока заявок}
tobsl_a=1; {время обслуживания}
   
eps=0.15; {погрешность}
alfa=0.01; {уровень значимости}

Var kol: integer; {количество заявок поступивших в систему}
kobr: integer; {количество обработанных заявок}
kotk: integer; {количество заявок, получивших отказ}
tpost: real; {момент поступления заявки}
tau: real; {промежуток между поступлдениями заявок}
pmin: integer; {номер прибора (канала) освободившегося раньше всех}
Tob: real; {время поступления заявки, которую мы взяли на обслуживание}
tauob: real; {длительности обслуживания приборами}
tosv: array [1..n] of real; {моменты освобождения приборов}
indoch: integer; {индикатор очереди (количесвто заявок в очереди)}
ocht: array [1..m] of real; {моменты поступления заявок в очереди}
potk: array [1..100] of real; {вероятность отказа в обслуживании}
otnpropsp: array [1..100] of real;
abspropsp: array [1..100] of real;
stog: array [1..100] of real; {среднее время ожидания заявки в очереди}
Srtog: real;
tog: real;{общее время ожидания в офереди заявок}
stpreb: array [1..100] of real; {ср. время пребывания заявки в очереди}
tpreb: real; {общее время пребывания заявки в системе}
ploA: real; {площадь А, где А - величина для определения средней длины очереди }
sdloch: array [1..100] of real; {средняя длина очереди}
Ni: integer; {число проведенных испытаний}
Nz: integer; {число испытаний всего (заданное)}


{вспомогательные элементы}
i: integer;
R: real;
temp: real;

{задание начальных данных для одной реализации}

Procedure BeginData;
Begin
      kol:=0; {количество заявок поступивших в систему}
      kobr:=0; {количество обработанных заявок}
      kotk:=0; {количество заявок получивших отказ}
      tpost:=0; {момент поступления заявки}
      pmin:=0; {номер прибора (канала)освободившегося раньше всех}
      Tob:=0; {время поступления заявки, которую мы взяли на обслуживание}
      tauob:=0; {длительности обслуживания приборами}
      for i:=1 to n do
       begin
       tosv[i]:=0; {моменты освобождения приборов}
       end;
       indoch:=0; {индикатор очереди (количество заявок в очереди)}
       for i:=1 to m do
       begin
       ocht[i]:=0; {моменты поступления заявок}
       end;


       tog:=0; {общее время ожидания в очереди заявок}
       tpreb:=0; {общее время пребывания заявок в системе}
       ploA:=0; {площадь А, где А - величина для определения средней длины очереди}
End;


Procedure GenerateNewZayavka;
 var R:real; {случайное число от 0 до 1}
 tau: real; {промежуток между поступлениея заявки}
  Begin
  R:=0; while R=0 do R:=random;
  tau:=(-1/Lam)*ln(R); {}
  Tpost:=Tpost+tau; {}
  PloA:=PloA+tau*IndOch;
   End;


   Procedure WriteZayavkaToOchered;
    Begin
    OchT[IndOch+1]:=Tpost;
    IndOch:=IndOch+1;
    End;


    Procedure ReadFromandModifyOchered;
    var I: integer; { вспомогательная переменная}
    Begin
    Tob:=OchT[1];
    I:=1;
    while (I+1<IndOch) do


    begin
    OchT[I]:=OchT[I+1];
    I:=I+1;
     end;
     OchT[IndOch]:=0;
     IndOch:=IndOch-1;
     Kobr:=Kobr+1;
     End;


     Procedure Obslugivanie;
     Var R:real; {случайное число от 0 до 1}
     Begin
     tog:=tog+TOsv[Pmin]-Tob;
      R:=0; While R=0 do R:=random;
       if R>0.4 then tauob:=tobsl_a
      else tauob:=tobsl_b;
       Tosv[Pmin]:=Tosv[Pmin]+tauob;
       tpreb:=tpreb+TOsv[Pmin]-Tob+tauob;
       End;


       Procedure FormTosv;
       Var R: real; {случайное число от 0 до 1}
       Begin
       R:=0; While R=0 do R:=random;
        if R>0.4 then tauob:=0.4
        else tauob:=0.8;
        Tosv[Pmin]:=Tpost+tauob;
        Kobr:=Kobr+1;
        End;


        Procedure BMSp1;
        Begin
        ReadFromandModifyOchered;
        Obslugivanie;
         End;


         Procedure BMSp2;
          Begin
          FormTosv;
          GenerateNewZayavka;
          Kol:=Kol+1;
          End;



          Procedure BMSz1;
          Begin
          WriteZayavkaToOchered;
          GenerateNewZayavka;
           Kol:=Kol+1;
           End;


           Procedure BMSz2;
           Begin
           Kotk:=Kotk+1;
           GenerateNewZayavka;
            Kol:=Kol+1;
            End;


            Procedure BASp;
            Begin
            if indoch=0 then BMSp2
            else BMSp1;
            End;


            Procedure BASz;
            Begin
            if IndOch=m then BMSz2
            else BMSz1;
            End;

            Procedure BOOS;
            var i:integer; {вспомогательная переменная}

            Begin
             Pmin:=1;
              for i:=2 to n do
               begin
               if Tosv[i]<Tosv[Pmin] then Pmin:=i;
                end;
                if Tosv[Pmin]<Tpost then BASp else BASz;
                End;

                BEGIN

                randomize;
                Nz:=1000;
                Ni:=1;
                for i:=1 to Nz do
                begin
                potk[i]:=0;
                stog[i]:=0;
                 stpreb[i]:=0;
                  sdloch[i]:=0;
                  otnpropsp[i]:=0;
                  abspropsp[i]:=0;
                  end;


                  While Ni<=Nz do
                   Begin


                   {WriteLn('Новая реализация!');}

                   BeginData;
                   R:=0; while R=0 do R:=random;
                   tau:=(-1/Lam)*ln(R);
                   Tpost:=Tpost+tau;

                   While Tpost<T do
                    begin
                   { writeln('---пришла заявка---');
                   writeln('Bpeмя поступления =', Tpost:5:3);
                   writeln('Cocтoяниe приборов до обработки заявки'); }


                   BOOS;

                   { writeln('---Результаты ее обработки---');
                   writeln ('Количество=',коl, 'бработанных=',kobr,' Отказано=', kotk);
                   writeln('HoMep "наиболее свободного" прибора=',pmin);
                   writeln('Bpeмя поступления заявки, которую взяли  обслужить=',Tob:5:3);
                   writeln ('Длительность обслуживания=', tauob:5:3);
                    writeln ('Время освобождения приборов');
                    for i:=1 to n do
                    begin write(' ',i,'=',tosv[i]:5:3); end;
                    writeln;
                    writeln ('Количество занятых мест в буфере=', indoch);
                    for i:=1 to m do

                    begin
                    writeln ('Время поступления заявки, которая находится на',i,'месте в буфере=', ocht[i]:5:3);
                    end;
                    writeln();

                    if readkey=#27 then halt;
                    }


                    end;


                    kotk:=kotk+indoch;
                    if (kol<>0) and (kobr<>0) then
                    begin
                    writeln();
                    write('Realizaciya #_',Ni) ;
                    Writeln('_Kolichestvo=_', kol,'_Obrabotannih=_',kobr,'_Otkazano=_',kotk);
                    Potk[Ni]:=kotk/kol; write('_Potk=_',Potk[Ni]:5:3);
                    Otnpropsp[Ni]:=kobr/kol; write('_q=_', Otnpropsp[Ni]:5:3);
                    Abspropsp[Ni]:=kobr/T; write('_Q=_', Abspropsp[Ni]:5:3);
                     Stog[Ni]:=tog/kobr; write('_Stog=_', Stog[Ni]:5:3);
                     Stpreb[Ni]:=tpreb/kobr; write('_Stpreb=_',Stpreb[Ni]:5:3);
                     SdlOch[Ni]:=PloA/T; writeln('_L=_', round(SdlOch[Ni]));
                     writeln();

                     if readkey=#27 then halt;

                     Ni:=Ni+1;
                     end;


                     temp:=0;
                     for i:=1 to Nz do
                     begin
                     temp:=temp+Potk[i];
                      end;
                       end;
                       writeln('Potk=_',temp/Nz:5:3);

                       temp:=0; for i:=1 to Nz do temp:=temp+Sdloch[i];
                       writeln('L =_', round(temp/Nz));

                       temp:=0; for i:=1 to Nz do temp:=temp+Stog[i];
                       writeln('Stog=_',(temp/Nz):5:3);

                       temp:=0; for i:=1 to Nz do temp:=temp+Stpreb[i];
                       writeln('STpreb=_', (temp/Nz):5:3);

                       temp:=0; for i:=1 to Nz do temp:=temp+Otnpropsp[i];
                       writeln('q=_', (temp/Nz):5:3);

                       writeln('Q=_',Lam*(temp/Nz):5:3);

                       readln;

                       END.
K.Igor вне форума   Ответить с цитированием

Старый 15.06.2011, 13:48
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Посоветую вам прочитать эти темы, они схожи с вашей

Помогите найти программу для 3D моделирования
Программа для трёхмерного моделирования
Программа

Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 10:31.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.