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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
JerryJackson
50 / 6 / 1
Регистрация: 15.07.2010
Сообщений: 112
#1

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

27.11.2012, 19:57. Просмотров 496. Ответов 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++
Функция func1 вызывает функцию func2. Функция func2 вызывает функцию func3. А в функции func3 происходит сбой и функция показывает...

Собщения вызовов деструктора - C++
А подскажите,можно ли решить как-нибудь такую проблему...По книге Дейтела дошел до деструкторов. В книге был пример по вызову конструкторов...

Организация вызовов функций - C++
Добрый день! У меня следующий вопрос. Есть функция foo(x, y, z, type1, type2), которая в свою очередь последовательно вызывает другие...

Посчитать количество рекурсивных вызовов - C++
В коде программы определена следующая функция: int foo(int n) { if (n &lt;= 0) return 1; return foo((n * 2) / 3) +...

Функция, которая возвращает количество её вызовов - C++
Напишите функцию, которая возвращает количество её вызовов (вызвали в первый раз - возвращает 1, второй раз - 2 и т.д.).

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Thanat
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 6
14.12.2014, 17:56 #2
Есть доделанная программа?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2014, 17:56
Привет! Вот еще темы с ответами:

Прата С. С++. Посчитать количество вызовов функции - C++
Всем привет! Закончил раздел про встроенные функции, шаблоны, полиморфизм и ссылочные переменные. Там в конце такое задание: Напиши...

Большое количество вызовов констр-ра и дестр-ра - C++
Добрый день! Есть класс для подсчёта указателей на объект и класс, который сопровождает или поддерживает работу предыдущего, храня на...

Написать функцию, возвращающую количество своих вызовов - C++
Всем привет))) Помогите написать программу, функция которой возвращает количество её вызовов)

Имитация виртуальных вызовов с применением оператора dynamic_cast - C++
Представьте, что виртуальных функций не существует, и измените пример так, чтобы виртуальные вызовы имитировались с применением оператора...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru