Advertisement
AIwinter

моделирование системы массового обслуживания

Sep 20th, 2024
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.68 KB | None | 0 0
  1. код на языке C для внешних определений
  2.  
  3. "/* внешние определения для системы массового обслуживания с 1 устройством обслуживания*/
  4.  
  5. #include <studio.h>
  6. #include <math.h>
  7. #include "1cgrand.h" /* заголовочный файл для генератора случайного числа */
  8.  
  9. #define Q_LIMIT 100 /* ограничение длины очереди */
  10. #define BUSY 1 /* устройство в состоянии занятости */
  11. #define IDLE 0 /* устройство в состоянии незанятости */
  12.  
  13. int next_event_type, num_custs_delayed, num_delays_required, num_events, num_in_q, server_status;
  14.  
  15. float area_num_in_q, area_server_status, mean_interarrival, mean_service, sim_time, time_ariival[Q_LIMIT+1], time_last_event, time_next_event[3], total_of_delays;
  16. FILE *infile, *outfile;
  17.  
  18. void initialize(void);
  19. void timing(void);
  20. void arrive(void);
  21. void depart(void);
  22. void report(void);
  23. void update_time_avg_status(void);
  24. float expon(float mean);"
  25.  
  26. код для основной функции
  27.  
  28. "main()
  29. {
  30.     /* открываем входной и выходной файлы из файла mml.in, в котором содержится одна строка с числами 1,0; 0,5 и 1000, разделенные пробелами */
  31.     infile = fopen("mml.in", "r");
  32.     outfile = fopen("mml.in", "w");
  33.  
  34.     /* указываем число событий для синхронизирующей функции */
  35.     num events = 2;
  36.  
  37.     /* считываем входные параметры */
  38.     fscanf(infile, "%f %f %d", &mean_interarrival, &mean_service, &num_delays_required);
  39.  
  40.     /* указываем заголовок отчета и входные параметры */
  41.     fprintf(outfile, "среднее время между поступлениями %11.3f мин\n\n", mean_interrarival);
  42.     fprintf(outfile, "среднее число обслуживания%16.3f мин\n\n", mean_service);
  43.     fprintf(outfile, "число требований%14d\n\n", num_delays_required);
  44.  
  45. /* инициализируем моделирование */
  46. initialize();
  47.  
  48. /* выполняем пока не зарегистрировано нужное число задержек в очереди */
  49. while (num_custs_delayed < num_delays_required) {
  50.     /* определяем следующее событие */
  51.     timing();
  52.     /* обновляем среднестатистические накопители */
  53.     update_time_avg_stats();
  54.     /* вызываем соответствующую событийную функцию */
  55.     switch (next_event_type) {
  56.         case 1:
  57.             arrive();
  58.             break;
  59.         case 2:
  60.             depart();
  61.             break;
  62.     }
  63. }
  64. /* вызываем генератор отчетов и завершаем моделирование */
  65. report();
  66. fclose(infile);
  67. fclose(outline);
  68. return 0;
  69. }"
  70.  
  71. код на языке C для функции инициализации
  72.  
  73. "void initialize(void) /* функция инициализации */
  74. {
  75. /* устанавливаем в исходное состояние часы модельного времени */
  76. sim_time = 0.0;
  77.  
  78. /* задаем исходные значения переменных состояния */
  79. server_status = IDLE;
  80. num_in_q = 0;
  81. time_last_event = 0.0;
  82.  
  83. /* устанавливаем в исходное состояние статистические счетчики */
  84. num_custs_delayed = 0;
  85. total_of_delays = 0.0;
  86. area_num_in_q = 0.0;
  87. area_server_status = 0.0;
  88.  
  89. /* инициализируем список событий. отменяем учет ухода (завершения обслуживания), поскольку в системе нет требований */
  90. time_next_event[1] = sim_time + expon(mean_interarrival);
  91. time_next_event[2] = 1.0e+30;"
  92.  
  93. код на языке C для синхронизирующей функции
  94. "void timing(void) /* синхронизирующая функция */
  95. {
  96. int 1;
  97. float min_time_next_event = 1.0e+29;
  98. next_event_type = 0;
  99.  
  100. /* определяем тип следующего события */
  101. for (i = 1; i <= num_events; ++1)
  102.     if (time_next_event[i] < min_time_next_event) {
  103.         min_time_next_event = time_next_event[i];
  104.         next_event_type = i;}
  105.  
  106. /* проверяем, является ли список событий пустым */
  107. if (next_event_type == 0) {
  108. /* список событий пуст. завершаем моделирование */
  109. fprint(outline, "\n список событий пуст в момент времени %f", sim_time);
  110. exit(1);
  111. }"
  112.  
  113. код для функции arrive
  114.  
  115. "
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement