Exemplo n.º 1
0
 def test__eq__n_elements_queues(self):
     """Duas filas com os mesmos elementos são iguais"""
     x = randint(100, 500)
     fila1 = Fila()
     fila2 = Fila()
     for i in range(0, x):
         element = randint(0, self.MAX_VALUE)
         fila1.enqueue(element)
         fila2.enqueue(element)
         self.assertEqual(fila1, fila2)
     self.assertEqual(fila1, fila2)
Exemplo n.º 2
0
 def test_enqueue_dequeue_1(self):
     """teste de integração pipeline de filas"""
     fila1 = Fila()
     fila2 = Fila()
     fila3 = Fila()
     fila4 = Fila()
     for i in range(0, self.max):
         fila1.enqueue(i)
         fila2.enqueue(fila1.dequeue())
         fila3.enqueue(fila2.dequeue())
         fila4.enqueue(fila3.dequeue())
         self.assertEqual(i, fila4.dequeue())
def main():
    pizzaria = Fila()

    pedido1 = Pedido("Muçarela")
    pedido2 = Pedido("Calabraza")
    pedido3 = Pedido("Marguerita")
    pedido4 = Pedido("Rúcula")

    pizzaria.entrar(pedido1)
    pizzaria.entrar(pedido2)
    pizzaria.entrar(pedido3)
    pizzaria.entrar(pedido4)

    pedido = pizzaria.sair()
    print("Fazendo pizza: {}".format(pedido))
    print("Está vazia? {}".format(pizzaria.vazia))

    pedido = pizzaria.sair()
    print("Fazendo pizza: {}".format(pedido))
    print("Está vazia? {}".format(pizzaria.vazia))

    pedido = pizzaria.sair()
    print("Fazendo pizza: {}".format(pedido))
    print("Está vazia? {}".format(pizzaria.vazia))

    pedido = pizzaria.sair()
    print("Fazendo pizza: {}".format(pedido))
    print("Está vazia? {}".format(pizzaria.vazia))
Exemplo n.º 4
0
def main():
    vagas = Fila()

    print('Comandos\n', 'A - adicionar carro\n', 'R - remover carro\n',
          'S - mostrar statatus do estacionamento\n',
          'E - Encerrar o programa')

    print()

    comando = input('Insira o comando desejado: ').upper()

    while comando != 'E':

        if comando == 'A':
            placa = input('Informe o numero da placa: ')
            vagas.inserirDado(placa)
            comando = input('Insira o comando desejado: ').upper()

        elif comando == 'R':
            placa = input('Informe a placa do carro que quer remover: ')
            vagas.remove(placa)

            comando = input('Insira o comando desejado: ').upper()

        elif comando == 'S':
            print(vagas.getFila())
            comando = input('Insira o comando desejado: ').upper()
Exemplo n.º 5
0
 def setUp(self):
     """Esse método é invocado antes de cada Teste. Prepara o ambiente"""
     self.MAX_VALUE = 10000
     self.fila_vazia = Fila()
     self.x = randint(0, maxsize)
     self.fila_um = Fila()
     self.fila_um.enqueue(self.x)
     self.max = randint(100, 500)
     self.fila = Fila()
     self.fila.enqueue(self.x)
     self.fila_limite = Fila(self.max)
     self.python_deque = deque()
     for i in range(0, self.max):
         element = randint(0, self.MAX_VALUE)
         self.python_deque.append(element)
         self.fila_limite.enqueue(element)
Exemplo n.º 6
0
    def test_dequeue(self):
        """dequeue diminui o tamanho da fila em 1"""
        self.assertEqual(len(self.fila_um), 1)
        self.fila_um.dequeue()
        self.assertEqual(len(self.fila_um), 0)
        self.assertEqual(self.fila_um, Fila())

        size = len(self.fila_limite)
        self.fila_limite.dequeue()
        self.assertEqual(len(self.fila_limite), size - 1)
Exemplo n.º 7
0
 def test_str_n_elements_queue(self):
     """Uma fila com n elementos imprime todos os elementos"""
     """Nossa implementação insere no começo e retira no final,
     mas também é possível inserir no final e retirar no começo"""
     fila = Fila()
     fila.enqueue(1)
     fila.enqueue(2)
     fila.enqueue(3)
     fila.enqueue(4)
     self.assertEqual(str(fila), "[4, 3, 2, 1]")
Exemplo n.º 8
0
def main():
    filaTeste = Fila()
    filaTeste.inserirdados("ifpb")
    filaTeste.inserirdados("teste")
    filaTeste.inserirdados("valor final")
    print(filaTeste.getFila())
    filaTeste.removerDado()
    print(filaTeste.getFila())
    filaTeste.removev("teste")
    #remove o teste
    print(filaTeste.remove())
    #sai o primeiro valor
    print(filaTeste.TamanhoFila())
Exemplo n.º 9
0
 def __init__(self, max_elementos):
     self.__pilha = Pilha()
     self.__fila = Fila()
     self.__max_elementos = max_elementos
Exemplo n.º 10
0
from fila import Fila
from random import randint
from time import sleep
import sys

filaImpressao = Fila()

def adicionarFilaImpressao(documento):
    print("Adicionando documento a fila de impressao, aguarde...")
    filaImpressao.ENQUEUE(documento)

def imprimir():
    for i in range(filaImpressao.LENGTH()):
        documento = filaImpressao.DEQUEUE()
        
        tempo_impressao = randint(1,10)
        print("Imprimindo...\n")

        sleep(tempo_impressao)
        print("Documento impresso!\n")
        print("A impressão levou: %ds"%(tempo_impressao))
    
        

def sair():
    print("Saindo...")
    sys.exit()

def main():  
    print("-------------- IMPRESSORA--------------\n")
    print("TECLE: \n", "1- Adicionar documento na fila de impressão\n", "2- Imprimir\n","3- Sair.\n")
Exemplo n.º 11
0
    def executar(self, n_rodadas, fregueses_por_rodada, rho, n_transiente):
        """ Funcao de execucao do simulador
        Args:
            n_fregueses: numero de fregueses
            n_rodadas: numero de rodadas da simulacao.
            rho: taxa
        """

        ''' Inicializacao '''
        lambd = rho/2                   # taxa de chegada.
        taxa_servico = 1                # taxa de servico.
        
        fila1 = Fila(1)                 # fila 1, mais prioritaria (chegadas exogenas).
        fila2 = Fila(2)                 # fila 2, menos prioritaria (nao ha chagadas exogenas).
        # eventos = []                    # lista de eventos.

        total_fregueses_servidos = 0    # total de fregueses que passaram pelo sistema.
        total_fregueses_criados = 0     # total de fregueses criados pelo sistema
        tempo = 0                       # tempo atual da simulacao.
        rodada_atual = 0                # rodada da fase transiente.
        fregues_executando = None       # inicializacao nula do fregues executando.

        plot = Plot()
        intervalo = (n_transiente + (fregueses_por_rodada * n_rodadas)) * 0.1
        metricas = Metrica(n_rodadas, fregueses_por_rodada) 
        if n_transiente > 0:
            id_proximo_fregues = - n_transiente
        else:
            id_proximo_fregues = 0   # id do proximo fregues a ser criado (fase transiente arbitraria)


        ''' Casos DETERMINISTICOS '''
        deterministico = False
        xs1 = [0]      
        xs2 = [0]
        if deterministico:              # Caso de Interrupcao.
            chegadas = [1, 4]           # Os vetores representam caracteristicas de todos os fregueses.
            xs1 = [1, 2]                
            xs2 = [5, 2]                   
            # chegadas = [0, 4]         # Caso de Servidor Ocioso.
            # xs1 = [1, 1]
            # xs2 = [1, 2]   
            

        ''' Execucao da SIMULACAO '''
        inicio = datetime.now()
        while total_fregueses_servidos < n_rodadas * fregueses_por_rodada:  # Loop de execucao sobre as RODADAS.
            
            # Tempo de chegada conforme sistema Deterministico:
            if deterministico:
                if len(chegadas) > 0:
                    tempo_ate_prox_chegada = chegadas.pop(0)-tempo
                else:
                    tempo_ate_prox_chegada = 10
            # Tempo de chegada conforme sistema Exponencial:
            else:
                tempo_ate_prox_chegada = Utils.gera_taxa_exp(lambd)  
            tempo += tempo_ate_prox_chegada


            # Loop de execucao enquanto ainda nao chegar um novo fregues
            while tempo_ate_prox_chegada > 0 and fregues_executando is not None:    
                
                # Se a execucao do fregues acabar antes da proxima chegada.
                if fregues_executando.tempo_restante <= tempo_ate_prox_chegada:     
                    tempo_ate_prox_chegada -= fregues_executando.tempo_restante     # O tempo ate a prox chegada sera subtraido do tempo de servico do fregues em execucao
                    fregues_executando.tempo_restante = 0
                    tempo_atual = tempo - tempo_ate_prox_chegada
                    cor = fregues_executando.cor
                    # eventos.append(Evento(tempo_atual, fregues_executando.fregues_id, TipoEvento.FIM_SERVICO, fregues_executando.prioridade))
                    
                    # Atualizacao de metricas de acordo com a fila do fregues (1 ou 2).
                    # E realizacao da troca de filas (para o fregues que executou em 1) ou evento de fim de execucao (fregues dafila 2)
                    if fregues_executando.prioridade == 1:
                        w1 = tempo_atual - fregues_executando.tempo_chegada1 - fregues_executando.tempo_servico1
                        if cor <= n_rodadas: # so calcula metricas dos fregueses ate n_rodadas
                            metricas.acumula_w1(w1, cor)
                            plot.w1_acumulado += w1
                            metricas.acumula_t1(w1, cor)
                        fregues_executando.troca_fila(tempo_atual)
                        fila2.adiciona(fregues_executando)
                        # eventos.append(Evento(tempo_atual, fregues_executando.fregues_id, TipoEvento.CHEGADA, 2))
                    else:
                        w2 = tempo_atual - fregues_executando.tempo_chegada2 - fregues_executando.tempo_servico2
                        if cor <= n_rodadas: # so calcula metricas dos fregueses ate n_rodadas
                            metricas.acumula_w2(w2, cor)
                            plot.w2_acumulado += w2
                            metricas.acumula_t2(w2, cor)
                        # if para garantir que os fregueses das rodadas foram os servidos
                        if fregues_executando.cor > 0 and fregues_executando.cor <= n_rodadas:
                            total_fregueses_servidos += 1

                    # Caso exista freguese na fila: coloca-lo em execucao (Prioridade para fila 1).
                    if fila1.tamanho() > 0:
                        fregues_executando = fila1.proximo_fregues()
                    else:
                        if fila2.tamanho() > 0:
                            fregues_executando = fila2.proximo_fregues()
                        else:
                            fregues_executando = None
                
                # Caso chegue um outro fregues no meio da execucao do fregues atual.
                else:
                    fregues_executando.tempo_restante -= tempo_ate_prox_chegada
                    tempo_ate_prox_chegada = 0


            # Tratando as rodadas.
            if id_proximo_fregues >= 0 and id_proximo_fregues % fregueses_por_rodada == 0:
                rodada_atual += 1

            if deterministico and total_fregueses_servidos == fregueses_por_rodada:
                break
            # Chega um novo fregues: entra na fila 1.
            fregues = Fregues(id_proximo_fregues, tempo, taxa_servico, rodada_atual, xs1[0], xs2[0])
            if deterministico:
                del xs1[0]
                del xs2[0]
            
            # Atualizacao de Metricas.
            if rodada_atual <= n_rodadas:
                metricas.acumula_x1(fregues.tempo_servico1, rodada_atual)
                metricas.acumula_t1(fregues.tempo_servico1, rodada_atual)
                metricas.acumula_nq1(fila1.tamanho(), rodada_atual)
                metricas.acumula_n1(fila1.tamanho(), rodada_atual)
                metricas.acumula_x2(fregues.tempo_servico2, rodada_atual)
                metricas.acumula_t2(fregues.tempo_servico2, rodada_atual)
                metricas.acumula_nq2(fila2.tamanho(), rodada_atual)
                metricas.acumula_n2(fila2.tamanho(), rodada_atual)
                plot.nq1_acumulado += fila1.tamanho()
                plot.nq2_acumulado += fila2.tamanho()

            # eventos.append(Evento(tempo, id_proximo_fregues, TipoEvento.CHEGADA, 1))

            # Rotina de verificacao de quem deve executar.
            if fregues_executando is None:
                fregues_executando = fregues
            else:                                               # Interrupcao, Novo fregues executa.
                if fregues_executando.prioridade == 2:
                    fila2.volta_para_fila(fregues_executando)
                    fregues_executando = fregues
                    if rodada_atual <= n_rodadas:
                        metricas.acumula_ns2(1, rodada_atual)
                        plot.ns2_acumulado += 1
                        metricas.acumula_n2(1, rodada_atual)
                else:                                           # Novo fregues para fila 1.
                    fila1.adiciona(fregues)
                    if rodada_atual <= n_rodadas:
                        metricas.acumula_ns1(1, rodada_atual)
                        plot.ns1_acumulado += 1
                        metricas.acumula_n1(1, rodada_atual)
            id_proximo_fregues += 1
            total_fregueses_criados += 1

            # if id_proximo_fregues % intervalo == 0:
            plot.w1.append(plot.w1_acumulado / total_fregueses_criados)
            plot.nq1.append(plot.nq1_acumulado / total_fregueses_criados)
            plot.ns1.append(plot.ns1_acumulado / total_fregueses_criados)
            plot.w2.append(plot.w2_acumulado / total_fregueses_criados)
            plot.nq2.append(plot.nq2_acumulado / total_fregueses_criados)
            plot.ns2.append(plot.ns2_acumulado / total_fregueses_criados)

        # Impressao dos parametros de entrada.
        tabela_parametros = PrettyTable(["n_rodadas", "fregueses/rodada", "fase_transiente", "rho", "lambda"])
        tabela_parametros.add_row([n_rodadas, fregueses_por_rodada, n_transiente, rho, lambd])
        print(tabela_parametros, "\n")

        # Calculo e impressao das metricas.
        metricas.calcula(deterministico)

        fim = datetime.now()
        total = fim - inicio
        print("Tempo de execucao: " + str(total))

        # plota os graficos
        plot.desenha(intervalo, n_rodadas, fregueses_por_rodada, n_transiente, rho)
Exemplo n.º 12
0
    def __init__(self, grafo, vertice):

        fila = Fila()

        #lista para guardar os vertices por distancia
        auxDist = []
        for i in range(len(grafo)):
            auxDist.append([])

        cont = 1
        self.__vetor_distancias = ([0] * len(grafo))
        self.__vetor_visitacao = ([-1] * len(grafo))

        fila.QEUEput(vertice)
        fila.QEUEput(-1)  # separa a fila por camada

        self.__vetor_visitacao[vertice] = cont

        cont += 1
        distancia = 0

        while fila.QEUEempty() != 0:
            v = fila.QEUEget()

            #se o v for igual a -1 significa que e o fim da fila
            if v != -1:
                camada = fila.QEUEget()

                #aumenta a distancia caso a camada = -1,
                aux = distancia
                if camada == -1:
                    distancia += 1
                else:
                    #se a camada nao for igual a -1, ela e inserida novamente no inicio da fila,
                    # pois se trata de um vertice
                    fila.addInicioDaFila(camada)

                #preenche o vetor de visitaçao
                for i in grafo[v]:
                    if self.__vetor_visitacao[i] == -1:
                        self.__vetor_visitacao[i] = cont
                        cont = cont + 1
                        fila.QEUEput(i)

                #verifico se minha distancia mudou
                #caso a distancia tenha mudado, insiro meus vertices pertencentes a distancia
                if aux != distancia:
                    auxDist[distancia] = (fila.getFila())
                    fila.QEUEput(
                        -1
                    )  # insiro no fim da fila para identificar que e outra camada

        #mantem na lista de distancia apenas, as listas nao nulas
        auxDist2 = []
        for i in auxDist:
            if len(i) != 0:
                auxDist2.append(i)

        #soma a quantidade de cidades por cada distancia
        cont = 0
        for i in auxDist2:
            soma = 0
            for j in i:
                soma += 1
            self.__vetor_distancias[cont] = soma
            cont += 1

        fila.QEUEfree()
Exemplo n.º 13
0
from fila import Fila
from random import randint
from time import sleep
import sys

filaBanco = Fila()

def EntrarNaFila(cliente):
    print("Cliente entrando na fila do caixa...")
    filaBanco.ENQUEUE(cliente)

def Atender():
    for i in range(filaBanco.LENGTH()):
        cliente = filaBanco.DEQUEUE()
        
        tempo_Atendimento = randint(1,10)
        print("Cliente sendo atendido...\n")

        sleep(tempo_Atendimento)
        print("Atendimento terminado!\n")
        print("O atendimento demorou %d minutos. "%(tempo_Atendimento))
    
        

def Sair():
    print("Saindo...")
    sys.exit()

def main():  
    print("-------------- BANCO--------------\n")
    print("TECLE: \n", "1- Entrar na fila do caixa de atendimento\n", "2- Atendimento\n","3- Sair.\n")
Exemplo n.º 14
0
 def test__eq__empty_queues(self):
     """Duas filas vazias são iguais"""
     self.assertEqual(Fila(), Fila())
     #o argumento é a capacidade da fila
     self.assertEqual(Fila(5), Fila(10))
Exemplo n.º 15
0
from fila import Fila
from tkinter import *

f1 = Fila()


class Application:
    #Construtor
    def __init__(self, master=None):
        self.fonte = ("Verdana", "8")

        self.container1 = Frame(master)
        self.container1["pady"] = 10
        self.container1.pack()
        self.container3 = Frame(master)
        self.container3["padx"] = 20
        self.container3["pady"] = 5
        self.container3.pack()
        self.container4 = Frame(master)
        self.container4["padx"] = 20
        self.container4["pady"] = 5
        self.container4.pack()
        self.container5 = Frame(master)
        self.container5["padx"] = 20
        self.container5["pady"] = 5
        self.container5.pack()
        self.container6 = Frame(master)
        self.container6["padx"] = 20
        self.container6["pady"] = 10
        self.container6.pack()
        self.container7 = Frame(master)
Exemplo n.º 16
0
from fila import Fila

fila1 = Fila()
fila1.inserirDado(0)
fila1.inserirDado(1)
fila1.inserirDado(2)
print(fila1.getFila())

fila1.remover()
print(fila1.getFila())
fila1.removerDado(2)

tam = fila1.tamanhoFila()
if (tam != 0):
    print(fila1.getFila())
else:
    print("Lista Vazia")
Exemplo n.º 17
0
def menu():
    print ('Entre com a opcao: \n', \
            '1 para inserir na pilha \n', \
            '2 para retirar na pilha\n', \
            '3 para mostra o proximo valor a ser retirado da pilha \n', \
            '4 verificar se esta vazia \n', \
            '##################################### \n', \
            '5 para inserir na fila \n', \
            '6 para retirar na fila\n', \
            '7 para mostra o proximo valor a ser retirado da fila \n', \
            '8 verificar se esta vazia \n', \
            '9 para finalizar o programa \n')


pilha = Pilha()
fila = Fila()
menu()
contro = input(' ? ')

while contro != 9:
    if contro == '1':
        pilha.push(input('Qual o valor ?'))
    elif contro == '2':
        pilha.pop()
    elif contro == '3':
        pilha.peek()
    elif contro == '4':
        pilha.empty()
    elif contro == '5':
        fila.push(input('Qual o valor ?'))
    elif contro == '6':
 def __init__(self):
     self.fila = Fila()
     self.removidas = []
Exemplo n.º 19
0
 def setUp(self):
     self.fila = Fila([0, 1, 2, 3, 4, 5])
from fila import Fila

fila_sem_max = Fila()

# testando inserir em fila sem maximo de elementos definidos.
print("fila sem maximo de elementos definidos")
fila_sem_max.inserir("Joker")
fila_sem_max.inserir("Bruce Wayne")
fila_sem_max.inserir("James Gordon")
fila_sem_max.inserir("Selina")
print(fila_sem_max)

# testando inserir em fila com maximo de elementos definidos.
fila_com_max = Fila(max_tamanho=5)
fila_com_max.inserir("Comedian")
fila_com_max.inserir("Spectral")
fila_com_max.inserir("Sally Jupiter")
fila_com_max.inserir("Roschach")
fila_com_max.inserir("Night Owl")
print("fila com maximo de elementos definidos")
print(fila_com_max)

try:
    fila_com_max.inserir("Manhattan")
except Exception:
    print("A fila está cheia")

for i in range(fila_sem_max.tamanho()):
    print(fila_sem_max.remover())
Exemplo n.º 21
0
from fila import Fila
from pilha import Pilha
from listaencadeada import Lista_Encadeada

#Teste da fila
print('Teste da fila')
f = Fila()
f.inserir(10)
f.inserir(20)
f.inserir(30)
print(f.retornar_lista())
f.remover()
print(f.retornar_lista())

# Teste da pilha
print('Teste da pilha')
p = Pilha()
p.inserir(10)
p.inserir(20)
p.inserir(30)
print(p.retornar_lista())
p.remover()
print(p.retornar_lista())

#Teste da lista encadada
print('Teste da lista encadada')
e = Lista_Encadeada()
e.inserir(0, 10)
e.inserir(0, 20)
e.inserir(1, 30)
print(e.retornar_lista())
Exemplo n.º 22
0
 def __init__(self):
     self.entrada = Fila()
     self.mesas = [Mesa(), Mesa(), Mesa(), Mesa()]
     self.caixas = [Fila(), Fila()]
     self.tempo = 2