Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- код на языке C для внешних определений
- "/* внешние определения для системы массового обслуживания с 1 устройством обслуживания*/
- #include <studio.h>
- #include <math.h>
- #include "1cgrand.h" /* заголовочный файл для генератора случайного числа */
- #define Q_LIMIT 100 /* ограничение длины очереди */
- #define BUSY 1 /* устройство в состоянии занятости */
- #define IDLE 0 /* устройство в состоянии незанятости */
- int next_event_type, num_custs_delayed, num_delays_required, num_events, num_in_q, server_status;
- 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;
- FILE *infile, *outfile;
- void initialize(void);
- void timing(void);
- void arrive(void);
- void depart(void);
- void report(void);
- void update_time_avg_status(void);
- float expon(float mean);"
- код для основной функции
- "main()
- {
- /* открываем входной и выходной файлы из файла mml.in, в котором содержится одна строка с числами 1,0; 0,5 и 1000, разделенные пробелами */
- infile = fopen("mml.in", "r");
- outfile = fopen("mml.in", "w");
- /* указываем число событий для синхронизирующей функции */
- num events = 2;
- /* считываем входные параметры */
- fscanf(infile, "%f %f %d", &mean_interarrival, &mean_service, &num_delays_required);
- /* указываем заголовок отчета и входные параметры */
- fprintf(outfile, "среднее время между поступлениями %11.3f мин\n\n", mean_interrarival);
- fprintf(outfile, "среднее число обслуживания%16.3f мин\n\n", mean_service);
- fprintf(outfile, "число требований%14d\n\n", num_delays_required);
- /* инициализируем моделирование */
- initialize();
- /* выполняем пока не зарегистрировано нужное число задержек в очереди */
- while (num_custs_delayed < num_delays_required) {
- /* определяем следующее событие */
- timing();
- /* обновляем среднестатистические накопители */
- update_time_avg_stats();
- /* вызываем соответствующую событийную функцию */
- switch (next_event_type) {
- case 1:
- arrive();
- break;
- case 2:
- depart();
- break;
- }
- }
- /* вызываем генератор отчетов и завершаем моделирование */
- report();
- fclose(infile);
- fclose(outline);
- return 0;
- }"
- код на языке C для функции инициализации
- "void initialize(void) /* функция инициализации */
- {
- /* устанавливаем в исходное состояние часы модельного времени */
- sim_time = 0.0;
- /* задаем исходные значения переменных состояния */
- server_status = IDLE;
- num_in_q = 0;
- time_last_event = 0.0;
- /* устанавливаем в исходное состояние статистические счетчики */
- num_custs_delayed = 0;
- total_of_delays = 0.0;
- area_num_in_q = 0.0;
- area_server_status = 0.0;
- /* инициализируем список событий. отменяем учет ухода (завершения обслуживания), поскольку в системе нет требований */
- time_next_event[1] = sim_time + expon(mean_interarrival);
- time_next_event[2] = 1.0e+30;"
- код на языке C для синхронизирующей функции
- "void timing(void) /* синхронизирующая функция */
- {
- int 1;
- float min_time_next_event = 1.0e+29;
- next_event_type = 0;
- /* определяем тип следующего события */
- for (i = 1; i <= num_events; ++1)
- if (time_next_event[i] < min_time_next_event) {
- min_time_next_event = time_next_event[i];
- next_event_type = i;}
- /* проверяем, является ли список событий пустым */
- if (next_event_type == 0) {
- /* список событий пуст. завершаем моделирование */
- fprint(outline, "\n список событий пуст в момент времени %f", sim_time);
- exit(1);
- }"
- код для функции arrive
- "
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement