Prévia do material em texto
CENTRO UNIVERSITÁRIO INTERNACIONAL UNINTER
ESCOLA SUPERIOR POLITÉCNICA
CURSO
ESTRUTURA DE DADOS
ATIVIDADE PRÁTICA
NOME:– RU:
NOME
TRÊS RIOS – RJ
ANO DO PROJETO: 2023
1
1 EXERCÍCIO 1 (EXEMPLO)
Com a finalidade de melhorar o atendimento e priorizar os casos
mais urgentes, a direção de um hospital criou um sistema de triagem em numerado
verde (V) ou amarelo (A), que define o menor ou maior grau
de urgência da ocorrência, respectivamente. Para informatizar esse
processo, o software desenvolvido tem como base o seguinte trecho de
código-fonte:
Na linha 27, a função inserir recebe o número e a cor do cartão entregue
ao paciente na triagem. Pacientes com cartão verde são inseridos no final da
fila pela função inserirNoFinal (linhas 17-25). Pacientes com cartão amarelo
têm prioridade no atendimento e são inseridos no início da fila, em ordem de
chegada, pela função inserir prioridade. Portanto, se são entregues os cartões
10-V, 11-V, 5-A, 12-V e 6-A, nessa ordem, a fila deve ficar assim organizada: 5-A, 6-A,
10-V, 11-V e 12-V.
Considerando o processo de triagem descrito e o trecho de código-fonte
apresentado, implemente a função inserirPrioridade conforme indicado (linha 36)
Solução do aluno:
import tkinter as tk #biblioteca gráfica
class ElementoDaListaSimples:
def __init__(self, dado, cor):
self.dado = dado
self.cor = cor
self.proximo = None
class ListaEncadeadaSimples:
def __init__(self, nodos=None):
self.head = None
if nodos is not None:
nodo = ElementoDaListaSimples(dado=nodos.pop(0), cor="V")
self.head = nodo
for elem in nodos:
nodo.proximo = ElementoDaListaSimples(dado=elem)
nodo = nodo.proximo
def inserirNoFinal(self, nodo):
if self.head is None:
self.head = nodo
return
nodo_atual = self.head
while nodo_atual.proximo is not None:
nodo_atual = nodo_atual.proximo
nodo_atual.proximo = nodo
def inserirPrioridade(self, nodo): #função inserir PRIORIDADE
DE ATENDIMENTO
if self.head is None:
self.head = nodo
return
else:
nodo.proximo = self.head
self.head = nodo
class TriagemApp:
def __init__(self, root):
self.root = root
self.root.title("Triagem criada por Silas Barbosa de Almeida")
#TITULO DA MINHA TELA GRÁFICA
self.lista_triagem = ListaEncadeadaSimples()
self.label = tk.Label(root, text="Insira o número do paciente:")
self.label.pack(pady=10)
self.entry_numero = tk.Entry(root)
self.entry_numero.pack(pady=10)
self.label_cor = tk.Label(root, text="Selecione a cor do cartão:")
self.label_cor.pack(pady=10)
self.cor_var = tk.StringVar()
self.cor_var.set("V") # Inicialmente, a cor é verde
self.radio_verde = tk.Radiobutton(root, text="Verde", varia-
ble=self.cor_var, value="V")
self.radio_amarelo = tk.Radiobutton(root, text="Amarelo", varia-
ble=self.cor_var, value="A")
self.radio_verde.pack()
self.radio_amarelo.pack()
self.btn_inserir = tk.Button(root, text="Inserir Paciente", com-
mand=self.inserir_paciente)
self.btn_inserir.pack(pady=20)
self.listbox = tk.Listbox(root)
self.listbox.pack(pady=10)
def inserir_paciente(self):
numero = self.entry_numero.get()
cor = self.cor_var.get()
# Validar a entrada
if not numero:
tk.messagebox.showwarning("Aviso", "Por favor, insira o número
do paciente.")
return
paciente = ElementoDaListaSimples(dado=numero, cor=cor)
if cor == "V":
self.lista_triagem.inserirNoFinal(paciente)
else:
self.lista_triagem.inserirPrioridade(paciente)
self.atualizar_listbox()
# Limpar campos de entrada
self.entry_numero.delete(0, tk.END)
self.cor_var.set("V")
# Mensagem de confirmação
tk.messagebox.showinfo("Sucesso", "Paciente inserido com sucesso!")
def atualizar_listbox(self):
self.listbox.delete(0, tk.END)
current = self.lista_triagem.head
while current:
self.listbox.insert(tk.END, f"Número: {current.dado}, Cor:
{current.cor}")
current = current.proximo
if __name__ == "__main__":
root = tk.Tk()
app = TriagemApp(root)
root.mainloop()
Imagem do código funcionando no seu computador:
Exercício 2:
Uma empresa trabalha na produção de concreto e terceiriza o serviço
de transporte do produto. Os caminhoneiros telefonam para a empresa e
registram seu interesse pelo trabalho. Todas as manhãs os caminhone-
ros estacionam o caminhão no pátio da empresa e aguarda a sua vez. O
atendimento segue o critério de ordem de chegada. Esse processo é,
atualmente, controlado pela secretária, que utiliza sua agenda para ge-
renciar os motoristas diariamente. A empresa, que carrega, no máximo
10 caminhões por dia, pretende informatizar esse processo.
Implemente a solução desse problema, utilizando o conceito de fila.
from queue import Queue #biblioteca queue para implementar a fila
class EmpresaConcreto: #é a classe que representa a empresa de concreto.
def __init__(self, capacidade_maxima=10):
self.fila_caminhoes = Queue()
self.capacidade_maxima = capacidade_maxima
def registrar_interesse(self, caminhoneiro): #é o método para caminho-
neiros se registrarem na fila
if self.fila_caminhoes.qsize() < self.capacidade_maxima:
self.fila_caminhoes.put(caminhoneiro)
print(f"{caminhoneiro} registrado com sucesso!")
else:
print("Capacidade máxima de caminhões atingida. Tente novamente
amanhã.")
def atender_caminhoes(self): #é o método para atender os caminhoneiros
com base na ordem de chegada
while not self.fila_caminhoes.empty():
caminhoneiro = self.fila_caminhoes.get()
print(f"Atendendo caminhoneiro: {caminhoneiro}")
if __name__ == "__main__":
empresa = EmpresaConcreto()
# Exemplo de registro de caminhoneiros
caminhoneiros = ["Motorista1", "Motorista2", "Motorista3", "Motoris-
ta4", "Motorista5", "Motorista6", "Motorista7"]
for caminhoneiro in caminhoneiros:
empresa.registrar_interesse(caminhoneiro)
# Exemplo de atendimento
empresa.atender_caminhoes()