首页 > > 详细

解析c编程、c讲解、讲解留学生c编程、c语言辅导留学生、调试c编程

#include
#include
#include
#include


//#include "lcgrand.h" /* Header file for random-number generator. */

#define Q_LIMIT 100 /* Limit on queue length. */
#define BUSY 1 /* Mnemonics for server's being busy */
#define IDLE 0 /* and idle. */

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_arrival[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_stats(void);
float expon(float mean);


main() /* Main function. */
{
/* Open input and output files. */

infile = fopen("mm1.in", "r");
utfile = fopen("mm1.out", "w");

/* Specify the number of events for the timing function. */

num_events = 2;

srand((unsigned)time(NULL));

/* Read input parameters. */

fscanf(infile, "%f %f %d", mean_interarrival, mean_service,
num_delays_required);
//printf("%f",mean_interarrival); 1.0 0.5 1000; 、、

/* Write report heading and input parameters. */

fprintf(outfile, "Single-server queueing system\n\n");
fprintf(outfile, "Mean interarrival time%11.3f minutes\n\n",
mean_interarrival);
fprintf(outfile, "Mean service time%16.3f minutes\n\n", mean_service);
fprintf(outfile, "Number of customers%14d\n\n", num_delays_required);

/* Initialize the simulation. */

initialize();

/* Run the simulation while more delays are still needed., */

while (num_custs_delayed Q_LIMIT)
{
/* The queue has overflowed, so stop the simulation.
, */

fprintf(outfile, "\nOverflow of the array time_arrival at");
fprintf(outfile, " time %f", sim_time);
exit(2);
}

/* There is still room in the queue, so store the time of arrival of the
arriving customer at the (new) end of time_arrival.
, time_arrival() */

time_arrival[num_in_q] = sim_time;//
}

else
{
/* Server is idle, so arriving customer has a delay of zero. (The
following two statements are for program clarity and do not affect
the results of the simulation.)
, 0(,) */

delay = 0.0;
total_of_delays += delay;

/* Increment the number of customers delayed, and make server busy.
, 1 */

++num_custs_delayed;
server_status = BUSY;

/* Schedule a departure (service completion).
*/

time_next_event[2] = sim_time + expon(mean_service);
}
}


void depart(void) /* Departure event function. */
{
int i;
float delay;

/* Check to see whether the queue is empty.
*/

if (num_in_q == 0)
{
/* The queue is empty so make the server idle and eliminate the
departure (service completion) event from consideration.
,,
。 */

server_status = IDLE;
time_next_event[2] = 1.0e+30;
}

else
{
/* The queue is nonempty, so decrement the number of customers in
queue. , */

--num_in_q;

/* Compute the delay of the customer who is beginning service and update
the total delay accumulator.
*/

delay = sim_time - time_arrival[1];// = -

total_of_delays += delay;//

/* Increment the number of customers delayed, and schedule departure.
, 1 */

++num_custs_delayed;
time_next_event[2] = sim_time + expon(mean_service);

/* Move each customer in queue (if any) up one place.
*/

for (i = 1; i <= num_in_q; ++i)
time_arrival[i] = time_arrival[i + 1];
}
}


void report(void) /* Report generator function. */
{
/* Compute and write estimates of desired measures of performance.
*/

fprintf(outfile, "\n\nAverage delay in queue%11.3f minutes\n\n",
total_of_delays / num_custs_delayed);//
fprintf(outfile, "Average number in queue%10.3f\n\n",
area_num_in_q / sim_time);//
fprintf(outfile, "Server utilization%15.3f\n\n",
area_server_status / sim_time);//
fprintf(outfile, "Time simulation ended%12.3f minutes", sim_time);
}


void update_time_avg_stats(void) /* Update area accumulators for time-average
statistics.
*/
{
float time_since_last_event;

/* Compute time since last event, and update last-event-time marker.
, */

time_since_last_event = sim_time - time_last_event;
time_last_event = sim_time;

/* Update area under number-in-queue function. Q(t) */

area_num_in_q += num_in_q * time_since_last_event;

/* Update area under server-busy indicator function. B(t) */

area_server_status += server_status * time_since_last_event;
}


float expon(float mean) /* Exponential variate generation function. */
{
/* Return an exponential random variate with mean "mean".“ mean”
*/

// return -mean * log(lcgrand(1));

return -mean*log((float)rand()/(float)RAND_MAX);
}
 

联系我们
  • QQ:99515681
  • 邮箱:99515681@qq.com
  • 工作时间:8:00-21:00
  • 微信:codinghelp
热点标签

联系我们 - QQ: 99515681 微信:codinghelp
程序辅导网!