Форум программистов, компьютерный форум CyberForum.ru

Смоделировать обслуживание 200 вызовов - C++

Восстановить пароль Регистрация
 
JerryJackson
50 / 6 / 1
Регистрация: 15.07.2010
Сообщений: 112
27.11.2012, 19:57     Смоделировать обслуживание 200 вызовов #1
Здравствуйте! Помогите пожалуйста с программой необходимо:

Пять операторов работают в справочной телефонной сети города, сообщая номера телефонов по запросам абонентов, которые обращаются по одному номеру 09. Автоматический коммутатор переключает абонента на того оператора, в очереди которого ожидает наименьшее количество абонентов, причем наибольшая допустимая длина очереди перед оператором - два абонента. Если все очереди имеют максимальную длину, вновь поступивший вызов получает отказ. Обслуживание абонентов операторами длится 30 ± 20 с. Вызовы поступают в справочную через каждые 5 + 3 с.
Смоделировать обслуживание 200 вызовов. Подсчитать количество отказов. Определить коэффициенты загрузки операторов справочной.

Вот мой вариант программы, но неправильно считает отклоненные заявки и неправильно выводит информацию.
И не могу реализовать программу для 5 операторов

C++
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
#include <iostream>
 
using namespace std;
 
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <time.h>
#include <math.h>
 
using namespace std;
 
 
int main()
{
  srand ( time(NULL) );
  setlocale(LC_ALL, "Russian");
  ofstream file1("data.txt");
  //ifstream file2("data.txt");
  int t_oz; // время, необходимое для выполнения заявки 
  int t_pz; //интервал времени поступления заявок в накопитель 
  int gen_z = 5;
 
 
  int Twork1 = 0, Twork2 = 0; //операторы 1 и 2
  int L = 0;
  int zaniat1 = 0, zaniat2 = 0; // состояние  операторов
  int Time = 600; // время моделирования
//  int i = 0; //счетчик количества обслуживаемых заявок 
  int n = 0;
  int j1 = 0, j2 = 0; // флаги, управляющие окончанием процессов в К1 и К2
  //int j3 = 0, j4 = 0;
  int No = 0; // // число обработанных заявок  
  int Nn = 0; // число не обработанных заявок  
  int T = 0;
  float K1, K2; // коэффициенты загрузки 1 и 2 оператора
 
 
 
 
step_1:
 
 
  if(T >= Time && L == 0)
  {
 
    cout << "Число обработанных заявок = " <<  No << endl;
    cout << "Число не обработанных заявок = " <<  Nn << endl;
    cout << "Коэфициент загрузки оператора 1 = " << K1 << endl;
    cout << "Коэфициент загрузки оператора 2 = " <<  K2 << endl;
    exit(0);
  }
 
  if(zaniat1 == 1)
  {
 
      if(j1 == 0)
      {
          t_oz = 4 + rand() % 21;
          j1 = T + t_oz;
          Twork1 += t_oz;
          
 
      }
  if(T == j1)
  {
      No++;
      zaniat1 = 0;
      j1 = 0;
      L = 0;
  }
    
   if(gen_z <= 0)
    zaniat2 = 1;
   else
    zaniat1 = 1;
 
  }
 
   if(zaniat2 == 1)
  {
      if(j2 == 0)
      {
          t_oz = 4 + rand() % 21;
          j2 = T + t_oz;
          Twork2 += t_oz;
          
 
      }
  if(T == j2)
  {
      No++; zaniat2 = 0; j2 = 0;
  }
   if(gen_z <= 5)
    zaniat2 = 1;
   else
    zaniat1 = 1;
  }
 
 
  if((zaniat1 == 0 || zaniat2 == 0 ) && L > 0)
 {
 
 
    if(gen_z <= 5)
    if(zaniat1 == 1){ zaniat2 = 1; L--; }
    else { zaniat1 = 1; L--; }
 else { zaniat2 = 1; L--; }
 
 
 }
 
 
 
   if(T >= Time) { T++; goto step_1; }
 
  t_pz = 1 + rand() % 10;
   if(T <= t_pz){ T++;   goto step_1; }
   else
   {
   if(L < 5) L++;
   else Nn++;
   T++; n++;
   }
 
    file1 << "Tsys = " << T ;
    file1  << "  L = " << L ;
    file1  << "  z1 = " << zaniat1 ;
    file1  << "  z2 = " << zaniat2 ;
    file1  << "  T1 = " << Twork1;
    file1  << "  T2 = " << Twork2;
    file1  << "  No = " << No ;
    file1  << "  Nn = " << Nn << endl;
 
  K1 = int(10000 * Twork1 / T) / 100.0;
  K2 = int(10000 * Twork2 / T) / 100.0;
 
 
goto step_1;
 
 
return 0;
}
Добавлено через 1 час 50 минут
C++
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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <time.h>
#include <math.h>
 
using namespace std;
 
 
int main()
{
  srand ( time(NULL) );
  setlocale(LC_ALL, "Russian");
  ofstream file1("list.txt");
  int timeproc; // время, необходимое для выполнения заявки
  int intertime; //интервал времени поступления заявок в накопитель
  int gen_z = 5;
 
 
  int op1 = 0; //operator 1
  int op2 = 0; //operator 2
  int op3 = 0;
  int op4 = 0;
  int op5 = 0;
  float K1;
  float K2; // коэффициенты загрузки
  float K3;
  float K4;
  float K5;
  int L = 0;
  int busy1 = 0;
  int busy2 = 0; // состояние  операторов
  int busy3 = 0;
  int busy4 = 0;
  int busy5 = 0;
  int Time = 600; // время моделирования 10 часов
  int n = 0;
  int j1 = 0;
  int j2 = 0; // флаги, управляющие окончанием процессов в К1 и К2
  int j3 = 0;
  int j4 = 0;
  int j5 = 0;
  int No = 0; // // число обработанных заявок
  int Nn = 0; // число не обработанных заявок
  int T = 0;
 
 
 
step_1:
 
 
  if(T >= Time && L == 0)
  {
 
    cout << "Количество обработанных заявок = " <<  No << endl;
    cout << "Количество не обработанных заявок = " <<  Nn << endl;
    cout << "Коэфициент загрузки оператора 1 = " << K1 << endl;
    cout << "Коэфициент загрузки оператора 2 = " <<  K2 << endl;
    cout << "Коэфициент загрузки оператора 3 = " <<  K3 << endl;
    cout << "Коэфициент загрузки оператора 4 = " <<  K4 << endl;
    cout << "Коэфициент загрузки оператора 5 = " <<  K5 << endl;
    exit(0);
  }
 
  if(busy1 == 1)
  {
 
      if(j1 == 0)
      {
          timeproc = 4 + rand() % 21;
          j1 = T + timeproc;
          op1 += timeproc;
 
 
      }
  if(T == j1)
  {
      No++;
      busy1 = 0;
      j1 = 0;
      L = 0;
  }
 
   if(gen_z <= 0)
    busy2 = 1;
   else
    busy1 = 1;
 
  }
 
   if(busy2 == 1)
  {
      if(j2 == 0)
      {
          timeproc = 4 + rand() % 21;
          j2 = T + timeproc;
          op2 += timeproc;
 
 
      }
  if(T == j2)
  {
      No++; busy2 = 0; j2 = 0;
  }
   if(gen_z <= 5)
    busy2 = 1;
   else
    busy1 = 1;
  }
//-----------------------------------------------------------
 
 if(busy3 == 1)
  {
      if(j3 == 0)
      {
          timeproc = 4 + rand() % 21;
          j3 = T + timeproc;
          op3 += timeproc;
 
 
      }
  if(T == j3)
  {
      No++; busy2 = 0; j3 = 0;
  }
   if(gen_z <= 5)
    busy3 = 1;
   else
    busy2 = 1;
  }
 
//------------------------------------------------
 if(busy4 == 1)
  {
      if(j2 == 0)
      {
          timeproc = 4 + rand() % 21;
          j4 = T + timeproc;
          op4 += timeproc;
 
 
      }
  if(T == j4)
  {
      No++; busy4 = 0; j4 = 0;
  }
   if(gen_z <= 5)
    busy4 = 1;
   else
    busy3 = 1;
  }
 
  //-------------------------------------------
   if(busy5 == 1)
  {
      if(j5 == 0)
      {
          timeproc = 4 + rand() % 21;
          j5 = T + timeproc;
          op5 += timeproc;
 
 
      }
  if(T == j5)
  {
      No++; busy5 = 0; j5 = 0;
  }
   if(gen_z <= 5)
    busy5 = 1;
   else
    busy4 = 1;
  }
 
  if((busy1 == 0 || busy2 == 0 || busy3 == 0 || busy4 == 0 || busy5 == 0 ) && L > 0)
 {
 
 
    if(gen_z <= 5)
    if(busy1 == 1){ busy2 = 1; L--; }
    else { busy1 = 1; L--; }
 else { busy2 = 1; L--; }
 
 
 
 }
 
 
 
   if(T >= Time) { T++; goto step_1; }
 
  intertime = 1 + rand() % 10;
   if(T <= intertime){ T++;   goto step_1; }
   else
   {
   if(L < 5) L++;
   else Nn++;
   T++; n++;
   }
 
    file1 << "Tsys = " << T ;
    file1  << "  L = " << L ;
    file1  << "  z1 = " << busy1 ;
    file1  << "  z2 = " << busy2 ;
    file1  << "  T1 = " << op1;
    file1  << "  T2 = " << op2;
    file1  << "  No = " << No ;
    file1  << "  Nn = " << Nn << endl;
 
  K1 = int(10000 * op1 / T) / 100.0;
  K2 = int(10000 * op2 / T) / 100.0;
 
 
goto step_1;
 
 
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2012, 19:57     Смоделировать обслуживание 200 вызовов
Посмотрите здесь:

Большое количество вызовов констр-ра и дестр-ра C++
Прата С. С++. Посчитать количество вызовов функции C++
C++ Имитация виртуальных вызовов с применением оператора dynamic_cast
Что это за код вызывается из стека вызовов? C++
C++ Перенаправление файловых потоков, перехват системных вызовов
Организация вызовов функций C++
C++ Собщения вызовов деструктора
Сколько адресов теоритически может содержать стек вызовов? C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Thanat
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 6
14.12.2014, 17:56     Смоделировать обслуживание 200 вызовов #2
Есть доделанная программа?
Yandex
Объявления
14.12.2014, 17:56     Смоделировать обслуживание 200 вызовов
Ответ Создать тему
Опции темы

Текущее время: 02:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru