Usando TAD Filas, crie um programa que gere a impressão de documentos enviados para uma impressora de rede. Os documentos são enviados e impressos de acordo com a ordem de chegada.
Neste programa, o utilizador deve ser capaz de realizar as seguintes operações:
•Enviar documento para a impressora;
• Cancelar a impressão;
•Listar documentos em espera;
•Imprimir documento;
Neste programa, o utilizador deve ser capaz de realizar as seguintes operações:
•Enviar documento para a impressora;
• Cancelar a impressão;
•Listar documentos em espera;
•Imprimir documento;
Passo 1
Beleza, vamos lá! Você tem um exercício que pede para criar um programa usando o TAD Filas (tipo abstrato de dados fila) para gerenciar a impressão de documentos numa impressora de rede. A ideia é que os documentos sejam impressos na ordem em que chegam, tipo uma fila de supermercado. Para resolver isso, vamos precisar entender como funciona uma fila, como adicionar e remover elementos dela, e como implementar essas operações no nosso programa.
Passo 2
Primeiro, vamos entender o que é uma fila. Uma fila é uma estrutura de dados onde o primeiro que entra é o primeiro que sai, ou seja, segue a regra FIFO (First In, First Out). Isso é perfeito para gerenciar documentos na impressora, já que queremos que os documentos sejam impressos na ordem em que foram enviados.
Passo 3
Vamos começar criando uma classe para representar a fila. Em Python, podemos usar uma lista para isso, mas para ficar mais didático, vamos criar uma classe
Fila
com métodos para enfileirar (adicionar) e desenfileirar (remover) documentos.class Fila:
def __init__(self):
self.itens = []
def enfileirar(self, item):
self.itens.append(item)
def desenfileirar(self):
if not self.vazia():
return self.itens.pop(0)
else:
return None
def vazia(self):
return len(self.itens) == 0
def listar(self):
return self.itens
Aqui,
enfileirar
adiciona um documento no final da fila, desenfileirar
remove o primeiro documento da fila, vazia
verifica se a fila está vazia e listar
retorna todos os documentos em espera.Passo 4
Agora, vamos criar uma classe para representar os documentos. Cada documento pode ter um nome ou um identificador único.
class Documento:
def __init__(self, nome):
self.nome = nome
def __str__(self):
return self.nome
Isso facilita a identificação dos documentos quando listarmos ou cancelarmos a impressão.
Passo 5
Vamos agora criar a classe principal que vai gerenciar a impressora. Essa classe vai usar a nossa fila para gerenciar os documentos.
class Impressora:
def __init__(self):
self.fila = Fila()
def enviar_documento(self, documento):
self.fila.enfileirar(documento)
print(f'Documento "{documento}" enviado para a impressora.')
def cancelar_impressao(self, nome_documento):
fila_atual = self.fila.listar()
nova_fila = Fila()
encontrado = False
for doc in fila_atual:
if doc.nome == nome_documento and not encontrado:
encontrado = True
print(f'Documento "{doc}" cancelado da fila de impressão.')
continue
nova_fila.enfileirar(doc)
self.fila = nova_fila
if not encontrado:
print(f'Documento "{nome_documento}" não encontrado na fila.')
def listar_documentos(self):
documentos = self.fila.listar()
if documentos:
print("Documentos na fila de impressão:")
for doc in documentos:
print(f'- {doc}')
else:
print("A fila de impressão está vazia.")
def imprimir_documento(self):
documento = self.fila.desenfileirar()
if documento:
print(f'Imprimindo documento: {documento}')
else:
print("Não há documentos para imprimir.")
Aqui, a classe
Impressora
tem métodos para enviar documentos, cancelar impressões, listar documentos na fila e imprimir documentos. Note que, para cancelar uma impressão, percorremos a fila atual e criamos uma nova fila sem o documento que queremos cancelar.Passo 6
Por último, vamos criar um menu simples para o usuário interagir com a impressora.
def menu():
impressora = Impressora()
while True:
print("\n--- Menu da Impressora ---")
print("1. Enviar documento para a impressora")
print("2. Cancelar impressão")
print("3. Listar documentos em espera")
print("4. Imprimir documento")
print("5. Sair")
escolha = input("Escolha uma opção: ")
if escolha == '1':
nome = input("Digite o nome do documento: ")
documento = Documento(nome)
impressora.enviar_documento(documento)
elif escolha == '2':
nome = input("Digite o nome do documento a cancelar: ")
impressora.cancelar_impressao(nome)
elif escolha == '3':
impressora.listar_documentos()
elif escolha == '4':
impressora.imprimir_documento()
elif escolha == '5':
print("Saindo do programa.")
break
else:
print("Opção inválida. Tente novamente.")
if __name__ == "__main__":
menu()
Esse menu permite que o usuário escolha entre enviar um documento, cancelar uma impressão, listar os documentos em espera, imprimir o próximo documento ou sair do programa.
Resposta
Aqui está o programa completo que implementa as funcionalidades usando o TAD Filas:
class Fila:
def __init__(self):
self.itens = []
def enfileirar(self, item):
self.itens.append(item)
def desenfileirar(self):
if not self.vazia():
return self.itens.pop(0)
else:
return None
def vazia(self):
return len(self.itens) == 0
def listar(self):
return self.itens
class Documento:
def __init__(self, nome):
self.nome = nome
def __str__(self):
return self.nome
class Impressora:
def __init__(self):
self.fila = Fila()
def enviar_documento(self, documento):
self.fila.enfileirar(documento)
print(f'Documento "{documento}" enviado para a impressora.')
def cancelar_impressao(self, nome_documento):
fila_atual = self.fila.listar()
nova_fila = Fila()
encontrado = False
for doc in fila_atual:
if doc.nome == nome_documento and not encontrado:
encontrado = True
print(f'Documento "{doc}" cancelado da fila de impressão.')
continue
nova_fila.enfileirar(doc)
self.fila = nova_fila
if not encontrado:
print(f'Documento "{nome_documento}" não encontrado na fila.')
def listar_documentos(self):
documentos = self.fila.listar()
if documentos:
print("Documentos na fila de impressão:")
for doc in documentos:
print(f'- {doc}')
else:
print("A fila de impressão está vazia.")
def imprimir_documento(self):
documento = self.fila.desenfileirar()
if documento:
print(f'Imprimindo documento: {documento}')
else:
print("Não há documentos para imprimir.")
def menu():
impressora = Impressora()
while True:
print("\n--- Menu da Impressora ---")
print("1. Enviar documento para a impressora")
print("2. Cancelar impressão")
print("3. Listar documentos em espera")
print("4. Imprimir documento")
print("5. Sair")
escolha = input("Escolha uma opção: ")
if escolha == '1':
nome = input("Digite o nome do documento: ")
documento = Documento(nome)
impressora.enviar_documento(documento)
elif escolha == '2':
nome = input("Digite o nome do documento a cancelar: ")
impressora.cancelar_impressao(nome)
elif escolha == '3':
impressora.listar_documentos()
elif escolha == '4':
impressora.imprimir_documento()
elif escolha == '5':
print("Saindo do programa.")
break
else:
print("Opção inválida. Tente novamente.")
if __name__ == "__main__":
menu()
Como usar o programa:
-
Enviar documento para a impressora: Escolha a opção 1 e digite o nome do documento que deseja enviar. Ele será adicionado ao final da fila.
-
Cancelar impressão: Escolha a opção 2 e digite o nome do documento que deseja cancelar. O programa irá remover o primeiro documento com esse nome da fila.
-
Listar documentos em espera: Escolha a opção 3 para ver todos os documentos que estão na fila de impressão.
-
Imprimir documento: Escolha a opção 4 para imprimir o próximo documento na fila (o que está na frente).
-
Sair: Escolha a opção 5 para encerrar o programa.
Exemplo de execução:
--- Menu da Impressora ---
1. Enviar documento para a impressora
2. Cancelar impressão
3. Listar documentos em espera
4. Imprimir documento
5. Sair
Escolha uma opção: 1
Digite o nome do documento: Relatório.pdf
Documento "Relatório.pdf" enviado para a impressora.
--- Menu da Impressora ---
1. Enviar documento para a impressora
2. Cancelar impressão
3. Listar documentos em espera
4. Imprimir documento
5. Sair
Escolha uma opção: 3
Documentos na fila de impressão:
- Relatório.pdf
--- Menu da Impressora ---
1. Enviar documento para a impressora
2. Cancelar impressão
3. Listar documentos em espera
4. Imprimir documento
5. Sair
Escolha uma opção: 4
Imprimindo documento: Relatório.pdf
Esse programa simples utiliza o conceito de fila para garantir que os documentos sejam impressos na ordem correta, além de permitir operações como enviado, cancelamento e listagem dos documentos.