static int perda = 0; // qnts chegadas cairam static void Main(string[] args) { Console.WriteLine("Digite a quantidade de servidores da fila: "); int serv = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Digite a capacidade maxima da fila: "); int capa = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Digite o tempo de chegada minimo: "); int cheMin = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Digite o tempo de chegada maximo: "); int cheMax = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Digite o tempo de atendimento min: "); int ateMin = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Digite o tempo de atendimento max: "); int ateMax = Convert.ToInt32(Console.ReadLine()); fila = new Fila(serv, capa, cheMin, cheMax, ateMin, ateMax); Console.WriteLine(fila.exibir()); //setup das demais configs Console.WriteLine("Digite o estado inicial de chegada: "); double estIni = Convert.ToDouble(Console.ReadLine()); for (int i = 0; i < 100000; i++) { numerosAleatorios.Add(ger.receiveRandomIn(0, 1)); } for (int i = 0; i < capa + 1; i++) { estadoFila.Add(0.0); } filaSimples(fila, estIni); for (int i = 0; i <= fila.getCap(); i++) { Console.WriteLine("Tempo total que " + i + " ficaram na fila: " + estadoFila.ElementAt(i)); } Console.WriteLine("perdas: " + perda); Console.WriteLine("tempo total: " + tempoDecorrido); }
private static void filaSimples(Fila fi, double inicio) { tempoDecorrido = 0; chegada(inicio); double menorTempo = 0; int posMenor = 0; // enquanto existirem numeros aleatorios na lista while (!numerosAleatorios.Any()) { if (fila.getAtual() == fila.getCap()) { menorTempo = listaEvento.ElementAt(0).getTempo(); posMenor = 0; for (int i = 0; i < listaEvento.Count; i++) { if (listaEvento.ElementAt(posMenor).getTempo() > listaEvento.ElementAt(i).getTempo()) { menorTempo = listaEvento.ElementAt(i).getTempo(); posMenor = i; } } // se evento não for saida if (listaEvento.ElementAt(posMenor).getTipo() == 1) { perda++; listaEvento.RemoveAt(posMenor); chegada(menorTempo); } else { saida(menorTempo); listaEvento.RemoveAt(posMenor); } } else { //caso fila não cheia menorTempo = listaEvento.ElementAt(0).getTempo(); posMenor = 0; for (int i = 0; i < listaEvento.Count; i++) { if (listaEvento.ElementAt(posMenor).getTempo() > listaEvento.ElementAt(i).getTempo()) { menorTempo = listaEvento.ElementAt(i).getTempo(); posMenor = i; } } //Chegada if (listaEvento.ElementAt(posMenor).getTipo() == 1) { chegada(menorTempo); listaEvento.RemoveAt(posMenor); } //Saida else if (listaEvento.ElementAt(posMenor).getTipo() == 0) { saida(menorTempo); listaEvento.RemoveAt(posMenor); } menorTempo = 0; posMenor = 0; } } }