using System.Collections;
using System.Collections.Generic;
public static void Main(string[] args)
object removedObject = null;
Queue queueFirstClass = new Queue();
Queue queueCoach = new Queue();
int passengerArrivalTime;
Random randomPassengerArrivalTime = new Random();
Random randomPassengerType = new Random();
double averageArrivalRateFirstClassR1;
double averageArrivalRateCoachR2;
int experimentDurationInMinutes;
int passengersTotalServiceTime = 0;
int maximumServiceTimeFirstClass;
int maximumServiceTimeCoach;
Random randomServiceTime = new Random();
Queue serviceStation1FirstClass = new Queue();
Queue serviceStation2FirstClass = new Queue();
Queue serviceStation1Coach = new Queue();
Queue serviceStation2Coach = new Queue();
Queue serviceStation3Coach = new Queue();
float averageServiceTime;
float maximumServiceTime;
int numbersServedInFirstClass;
int numbersServedInCoach;
int maximumQueueLengthFirstClassPassenger;
int maximumQueueLengthCoachPassenger;
Console.Write("Enter duration of the experiment (in minutes): ");
experimentDurationInMinutes = Convert.ToInt32(Console.ReadLine());
Console.Write("\n\nEnter AVERAGE arrival rate (R1) for First Class passengers: ");
averageArrivalRateFirstClassR1 = Convert.ToDouble(Console.ReadLine());
Console.Write("\n\nEnter AVERAGE arrival rate (R2) for Coach passengers: ");
averageArrivalRateCoachR2 = Convert.ToDouble(Console.ReadLine());
Console.Write("\n\nNote: minimum SERVICE TIME for First Class passengers is 1 minute");
Console.Write("\nEnter maximum (S1) SERVICE TIME for First Class passenger (in minutes): ");
maximumServiceTimeFirstClass = Convert.ToInt32(Console.ReadLine());
Console.Write("\n\nNote: minimum SERVICE TIME for Coach passengers is 1 minute");
Console.Write("\nEnter maximum (S2) SERVICE TIME for Coach passenger (in minutes): ");
maximumServiceTimeCoach = Convert.ToInt32(Console.ReadLine());
while (passengersTotalServiceTime < experimentDurationInMinutes)
passengerArrivalTime = 1 + randomPassengerArrivalTime.Next(experimentDurationInMinutes);
if (randomPassengerType.Next(1, 3) == 1)
queueFirstClass.Enqueue("Passenger "+passengerNumber);
if (maximumServiceTimeFirstClass == 1) serviceTime = 1;
serviceTime = 1 + randomServiceTime.Next(maximumServiceTimeFirstClass);
passengersTotalServiceTime = passengersTotalServiceTime + serviceTime;
queueFirstClass.Enqueue(serviceTime);
queueFirstClass.Enqueue(passengerArrivalTime);
queueCoach.Enqueue("Passenger "+passengerNumber);
if (maximumServiceTimeCoach == 1) serviceTime = 1;
serviceTime = 1 + randomServiceTime.Next(maximumServiceTimeCoach);
passengersTotalServiceTime = passengersTotalServiceTime + serviceTime;
queueCoach.Enqueue(serviceTime);
queueCoach.Enqueue(passengerArrivalTime);
maximumQueueLengthFirstClassPassenger = (queueFirstClass.Count) / 3;
maximumQueueLengthCoachPassenger = (queueCoach.Count) / 3;
for (int passengerCounter = passengerNumber; passengerCounter >= 1; passengerCounter--)
if ((serviceStation1FirstClass.Count == 0) && (queueFirstClass.Count != 0))
for (int counter = 3; counter >= 1; counter --)
serviceStation1FirstClass.Enqueue(removedObject = queueFirstClass.Dequeue());
else if ((serviceStation2FirstClass.Count == 0) && (queueFirstClass.Count != 0))
for (int counter = 3; counter >= 1; counter --)
serviceStation2FirstClass.Enqueue(removedObject = queueFirstClass.Dequeue());
else if ((serviceStation1Coach.Count == 0) && (queueCoach.Count != 0))
for (int counter = 3; counter >= 1; counter --)
serviceStation1Coach.Enqueue(removedObject = queueCoach.Dequeue());
else if ((serviceStation2Coach.Count == 0) && (queueCoach.Count != 0))
for (int counter = 3; counter >= 1; counter --)
serviceStation2Coach.Enqueue(removedObject = queueCoach.Dequeue());
else if ((serviceStation3Coach.Count == 0) && (queueCoach.Count != 0))
for (int counter = 3; counter >= 1; counter --)
serviceStation3Coach.Enqueue(removedObject = queueCoach.Dequeue());
else if (((serviceStation1FirstClass.Count == 0) && (queueFirstClass.Count == 0)) && (queueCoach.Count != 0))
for (int counter = 3; counter >= 1; counter --)
serviceStation1FirstClass.Enqueue(removedObject = queueCoach.Dequeue());
else if (((serviceStation2FirstClass.Count == 0) && (queueFirstClass.Count == 0)) && (queueCoach.Count != 0))
for (int counter = 3; counter >= 1; counter --)
serviceStation2FirstClass.Enqueue(removedObject = queueCoach.Dequeue());
Console.WriteLine("\n\n ESTADÍSTICAS:");
averageServiceTime = (float)passengersTotalServiceTime / (float)passengerNumber;
Console.WriteLine("\n\n PROMEDIO DE TIEMPO DE SERVICIO= {0}", averageServiceTime);
if (maximumServiceTimeFirstClass >= maximumServiceTimeCoach)
maximumServiceTime = maximumServiceTimeFirstClass;
maximumServiceTime = maximumServiceTimeCoach;
Console.WriteLine("\n\n TIEMPO MÁXIMO DE SERVICIO= {0}", maximumServiceTime);
numbersServedInFirstClass = ((serviceStation1FirstClass.Count) / 3) + ((serviceStation2FirstClass.Count) / 3);
Console.WriteLine("\n\n ATENDIDOS EN PRIMERA CLASE= {0}", numbersServedInFirstClass);
numbersServedInCoach = ((serviceStation1Coach.Count) / 3) + ((serviceStation2Coach.Count) / 3) + ((serviceStation3Coach.Count) / 3);
Console.WriteLine("\n\n ATENDIDOS EN COACH= {0}", numbersServedInCoach);
Console.WriteLine("\n\n COLA DE PRIMERA CLASE= {0}", maximumQueueLengthFirstClassPassenger);
Console.WriteLine("\n\n COLA DE COACH= {0}", maximumQueueLengthCoachPassenger);
Console.WriteLine("\n\n");