С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 19.01.2013
Сообщений: 34
1

Создание имитационной модели бензоколонки

20.01.2015, 01:37. Показов 1467. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Общий вид стартовой формы показан на рис. 1. Видно, что она включает ряд объектов управления, среди которых имеются три командные кнопки «Расчет», «Очистка» и «Выход».
После нажатия кнопки «Расчет» производится вычисление показателя эффективности при заданных исходных данных. При нажатии кнопки «Очистка» производится очищение текстового поля для вывода результата моделирования. Затем может быть произведено изменение исходных данных и проведение новых расчетов с использованием кнопки «Расчет».
При нажатии кнопки «Выход» работа программы прекращается.

Модель СМО с 1, 2, 3


С кнопкой «Расчет» связана процедура, которая выполняет следующие действия
Оператор 1 осуществляет перевод исходных данных из символьной формы в числовую.
Оператор 2 обнуляет глобальную переменную SNo6c — суммарное число обслуженных заявок.
Оператор 3 начинает циклический перебор случайных реализаций.
Оператор 4 в начале каждой случайной реализации обнуляет локальные переменные, к которым относятся: число заявок, поступающих в одной реализации Nz, число обслуженных заявок в каждом из имеющихся каналов Nобс.j (j= 1,Nk), начальные значения времени освобождения каналов Токj (J = 1,Nk).
Оператор 5 обращается к автономной процедуре формирования потока заявок. В результате работы этой процедуры формируется массив значений времен:
[Tз(1), Tз(2), Tз(3)… Tз(N3i)]
где N3i — общее число поступивших заявок для i-й случайной реализации;
Оператор 6 является началом цикла обслуживания заявок.
Оператор 7 производит выбор номера канала, который характеризуется наименьшим значением времени освобождения от обслуживания заявки.
Оператор 8 обращается к автономной процедуре обслуживания очередной заявки. На выходе этой процедуры определяется число обслуженных заявок в выбранном канале No6c(Jmin).
Оператор 9 служит для расчета суммарного числа обслуженных заявок во всех каналах и всех случайных реализациях.
После окончания цикла случайных реализаций оператор 10 выводит на экран значение выходной переменной — средней относительной прибыли по формуле
Сотн.ср = Nобс -1 + 0,5Nк + 0,5Nк^2

Прошу помочь разобраться с данной программкой, за ранее большое спасибо всем откликнувшимся!! С делфи столкнулась в первый раз, поэтому наверное много ошибок

вот, что у меня получилось:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
 
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
 
 
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Edit10: TEdit;
 
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
 
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
 
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button2Click(Sender: TObject);
begin
 
Edit1.Text:='1';
Edit2.Text:='5';
Edit3.Text:='9';
Edit4.Text:='12';
Edit5.Text:='30';
Edit6.Text:='60';
Edit7.Text:='5000';
Edit8.Text:='0';
Edit9.Text:='0';
Edit10.Text:='0';
 
end;
 
procedure TForm1.Button3Click(Sender: TObject);
begin
Close;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
 
var Tzcped, Tobs,DT,TogMax,Tkon,T,z,Tk,SNobc,SNz,CotnCp:real;
N,j,i,Nr,p,Cont,f,w,Nz,e,u,l,min:integer;
 
Tz:array[1..1000]of real;
TOK:array[1..3] of real;
Nobc:array[1..3] of real;
 
       begin
         Randomize;
         Nz:=StrToInt(Edit1.Text);
         Tzcped:=StrToFloat(Edit2.Text);
         Tobs:=StrToFloat(Edit3.Text);
         DT:=StrToFloat(Edit4.Text);
         TogMax:=StrToFloat(Edit5.Text);
         Tkon:=StrToFloat(Edit6.Text);
         Nr:=StrToInt(Edit7.Text);
//находится время обслуживания заявки и заносится в массив
        For i:=1 to Nr do
          begin
          SNz:=0;
          SNobc:=0;
          T:=0;
      while T<Tkon do
            begin
            z:=1-random;
            DT:=-Tzcped*Ln(z);
            T:=T+DT;
        if T<Tkon then
                    begin
                    N:=N+1;
                    Tz[N]:=T
      end
      else
    break;
  end;
     Nz:=0;
     for p:=1 to Nz do Nobc[p]:=0;
     for l:=1 to Nz do  TOK[l]:=0;
 
             begin
             for f:=1 to Nz do
              begin
         // выбор канала
              min:=1;
              TOK[min]:= TOK[1];
              for u:=2 to Nz do
          if TOK[u]<TOK[min]  then
              TOK[min]:=TOK[u];
              min:=u;
              Tk:=0;
              end;
             SNobc:=SNobc+Nobc[1]+Nobc[2]+Nobc[3];
 //определение минимального времени ожидания на одном из каналов
                for j:=1 to N do
                  begin
                    if Tz[j]<TOK[min] then
                    if TOK[min]-Tz[j]>TogMax then continue else Tz[j]:=TOK[min];
                  z:=random;
                  Tk:=Tz[j]+ Tobs+DT*(z-0.5);
                  if Tk>Tkon then
                        begin
                        TOK[min]:=Tkon; break;
                  end;
 
               Nobc[j]:=Nobc[j]+1;
               TOK[min]:=Tk;
            end;
         end;
       SNz:=SNz+N;
    //SNobc:=SNobc+Nobc;
    Edit8.Text:=IntToStr(N);
    //Edit9.Text:=IntToStr(Nobc[j]);
   // write(Nobc[j],'');
    //readln;
 CotnCp:=(SNobc/Nr)-1+0.5*SNz+0.5*SNz*SNz;
  Edit10.Text:=FloatToStr(CotnCp);
 end;
end;
 
end.
Добавлено через 20 минут
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Edit10: TEdit;
    Label18: TLabel;
    Label19: TLabel;
    Label20: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Label21: TLabel;
    Label22: TLabel;
    Edit11: TEdit;
    Edit12: TEdit;
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button2Click(Sender: TObject);
begin
Edit1.Text:='1';
Edit2.Text:='5';
Edit3.Text:='9';
Edit4.Text:='12';
Edit5.Text:='30';
Edit6.Text:='60';
Edit7.Text:='5000';
Edit8.Text:='0';
Edit9.Text:='0';
Edit10.Text:='0';
end;
 
procedure TForm1.Button3Click(Sender: TObject);
begin
Close;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var Tzcped, Tobs,DT,TogMax,Tkon,T,z,Tk,SNobc,SNz,CotnCp:real;
N,j,i,Nobc,Nr,q,f,w,Nz,e,u,l,min:integer;
Tz:array[1..1000]of real;
TOK:array[1..5] of real;
begin
Randomize;
Nz:=StrToInt(Edit1.Text);
Tzcped:=StrToFloat(Edit2.Text);
Tobs:=StrToFloat(Edit3.Text);
DT:=StrToFloat(Edit4.Text);
TogMax:=StrToFloat(Edit5.Text);
Tkon:=StrToFloat(Edit6.Text);
Nr:=StrToInt(Edit7.Text);
For i:=1 to Nr do
begin
SNz:=0;
SNobc:=0;
T:=0;
N:=0;
while T<Tkon do
  begin
  z:=1-random;
  DT:=-Tzcped*Ln(z);
  T:=T+DT;
  if T<Tkon then
    begin
    N:=N+1;
    Tz[N]:=T
    end
    else
    break;
  end;
 Nobc:=0;
 for l:=1 to Nz do  TOK[l]:=0;
 for e:=1 to N do
  begin
for f:=1 to Nz do
begin
  min:=1;
  for u:=2 to Nz do
  if TOK[u]<TOK[min]  then
  min:=u;
  Tk:=0;
for j:=1 to N do
  begin
  if Tz[j]<TOK[min] then
        if TOK[min]-Tz[j]>TogMax then continue else Tz[j]:=TOK[min];
  z:=random;
   Tk:=Tz[j]+ Tobs+DT*(z-0.5);
       if Tk>Tkon then
       begin
       TOK[min]:=Tkon; break;
       end;
 
    Nobc:=Nobc+1;
    TOK[min]:=Tk;
    end;
    q:=q+N;
    w:=w+Nobc;
 
end;
    SNz:=q/Nr;
    SNobc:=w/Nr;
    Edit8.Text:=IntToStr(N);
    Edit9.Text:=IntToStr(Nobc);
 CotnCp:=SNobc-1+0.5*SNz+0.5*SNz*SNz;
  Edit10.Text:=FloatToStr(CotnCp);
  Edit11.Text:= FloatToStr(SNobc);
  Edit12.Text:= FloatToStr(SNz);
 end;
end;
end;
end.
Для одного канала все работает нормально, вот этот код. Код, который выше пыталась сделать для нескольких каналов
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.01.2015, 01:37
Ответы с готовыми решениями:

Создание простой модели атома
Помогите, пожалуйста, написать програмку - создание простой модели атома в Delphi. Очень-очень...

Создание управляемой анимационной модели
Здравствуйте. Нужно создать управляемую анимационную модель. Подскажите, что можно сделать...

Создание модели игры в поддавки
Создание модели игры в поддавки (поле 4х6, по 4 фишки). Участвуют 4 белых, 4 черных шашек. В начале...

Создание модели остывания металлической пластины
Создание модели остывания металлической пластины в определенный момент времени. Первоначальная...

0
20.01.2015, 01:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.01.2015, 01:37
Помогаю со студенческими работами здесь

Модификация имитационной модели технологического процесса
В общем проблема вот в чем. В Симулинке была сделана имитационная модель технологического процесса,...

Составить блок-схему имитационной модели
Прошу помочь. Нужно срочно для сдачи, а как решить не пойму В банк приходят клиенты с...

Решение двухфакторной имитационной модели на языке Pascal
http://s004.***********/i205/1010/dc/1b0df2be42c7.jpg как это будет выглядеть на паскале? ...

Построение имитационной модели системы массового обслуживания
Здравствуйте, подскажите пожалуйста в верном ли направлении я двигаюсь, у меня такая вот задача: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru