Roteiro de Atividade Pratica A1-2024 - Estrutura de Dados

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 13

ANO

2024

ATIVIDADE PRÁTICA
ESTRUTURA DE DADOS

Roteiro Elaborado por:


Profa. Me. Bruno Kostiuk.
Roteiro de Atividade Prática de
Estrutura de Dados

INTRODUÇÃO
Olá a todos.
Sejam todos muito bem-vindos!
Esta avaliação foi preparada e planejada para a disciplina de Estrutura de
Dados.
O objetivo desta atividade é fazer com que você, estudante, desenvolva os
conhecimentos teóricos aprendidos nas rotas de maneira práticas. Para o
desenvolvimento desta atividade iremos utilizar os conceitos que estudamos na
disciplina.
Ao longo desse roteiro serão passadas as orientações gerais para
realização da avaliação bem como os seus critérios de correção. Seguindo o
roteiro, estarão as práticas a serem realizadas, com explicações de como deve
ser feita e como será avaliada.

No mais, desejo-lhe boa atividade prática!

1
Roteiro de Atividade Prática de
Estrutura de Dados

SUMÁRIO
INTRODUÇÃO _____________________________________________ 1

ORIENTAÇÕES GERAIS ______________________________________ 3

OBJETIVO ______________________________________________________ 3

PROGRAMAS NECESSÁRIOS _______________________________________ 3

ORIENTAÇÕES GERAIS ____________________________________________ 3

COMO SE DARÁ A CORREÇÃO DA ATIVIDADE? ________________________ 5

EXERCÍCIOS ____________________________________________________ 7

2
Roteiro de Atividade Prática de
Estrutura de Dados

ORIENTAÇÕES GERAIS
Esta atividade é para ser realizada com consulta e pesquisa.

OBJETIVO
Desenvolver os exercícios colocados no tópico Exercícios, ao final deste
documento.

PROGRAMAS NECESSÁRIOS
Os exercícios (que exigirem Implementação) da Atividade Prática de
Estrutura de Dados poderá ser realizado com a utilização do software
Pycharm.

IMPORTANTE: caso o estudante tenha familiaridade com outro ambiente


de desenvolvimento (Google Colab, Visual Studio Code, entre outros), é
possível utilizá-lo. Porém, nossa ferramenta oficial nessa disciplina é o
Pycharm, portanto fica a cargo do estudante saber utilizar as outras
ferramentas.

ORIENTAÇÕES GERAIS
 O estudante deverá entregar um ARQUIVO ÚNICO NO FORMATO PDF
no AVA no ícone Trabalhos. Caso o formato de entrega seja diferente do
formato PDF, a nota máxima do trabalho será decrescida.
 Submeter o trabalho em múltiplos arquivos separados, ou em formato
diferente do imposto acima, acarretará redução de nota;
 Esta atividade é para ser realizada com consulta e pesquisa. Portanto,
não basta somente estudar o material da rota de aprendizagem. Leia
também os livros bases, materiais complementares e procure seu tutor
para tirar dúvidas diretamente via Canal de Tutoria;
 Cada linha de código programada (código escrito pelo estudante),
deverá ser explicada através de comentário. A falta de comentários no
código implicará em redução de nota;

3
Roteiro de Atividade Prática de
Estrutura de Dados

 Para cada exercício, coloque no seu relatório o ENUNCIADO do mesmo


e coloque como resposta o seu código COMPLETO. Deste a primeira até
a última linha que você digitou;
 No Pycharm, para inserir os códigos nas respostas, faça um
CTRL+C/CTRL+V do código criado por você na ferramenta, e cole-o no
documento do Word. Pode ainda utilizar o botão direito do mouse para
escolher a formatação adequada no word. Assim, o código já virá
colorido, organizado e indentado, facilitando a correção da sua atividade;
 No AVA existe um modelo em WORD para você utilizar. Após concluir
suas alterações, salve o arquivo editado no formato PDF para entrega ou
imprima em PDF. Segue exemplo:
 Clique em Salvar uma cópia, em seguida selecione o formato PDF.

 Ou clique em Imprimir e selecione a impressora “Microsoft Print to PDF”

 Qualquer dúvida sobre como salvar em PDF, contate a Tutoria.


 Além do código em python, você deverá colocar uma captura de tela da
saída do console. Capture a saída mostrando a resposta.

4
Roteiro de Atividade Prática de
Estrutura de Dados

COMO SE DARÁ A CORREÇÃO DA ATIVIDADE?


Como temos 4 questões. Seus pesos estão igualmente distribuídos.
Para que você ganhe nota máxima em cada exercício, você deverá
desenvolver o código corretamente de forma que cumpra o que foi solicitado.
Além disso, precisará cumprir os requisitos básicos explicados nas
ORIENTAÇÕES GERAIS:
 Salvar o documento em formato PDF.
 Apresentar seu código completo, indentado e organizado;
 Explicar cada linha do seu código através de comentários;
 Colocar uma IMAGEM com o terminal rodando e mostrando o que
cada exercício pede.
Os requisitos têm influência direta na nota final do trabalho:
 Salvar o documento em PDF:
a. Enviar o documento em formato diferente irá descontar 20% da
nota do trabalho.
Enviar o documento em arquivo corrompido irá descontar 100% da
nota do trabalho, ou seja, o estudante irá automaticamente receber a nota
ZERO. Após enviar seu trabalho, realize o download do arquivo e
verifique se está tudo OK. Caso haja algum problema, envie o arquivo
correto via Tutoria dentro do prazo de entrega do Trabalho.
 Apresentar o código completo, indentado e organizado:
a. Códigos sem indentação, ou indentação incorreta serão
descontados 10% da nota final.
b. A indentação em Python é muito importante, se sua indentação
estiver incorreta, seu código também realizará algo diferente do
que você deseja, então tome cuidado com isso. Caso não
consiga indentar o código no documento de entrega, envie
também uma print do seu código dentro do ambiente de
desenvolvimento, mostrando que está tudo correto.

5
Roteiro de Atividade Prática de
Estrutura de Dados

 Explicar cada linha do seu código através de comentários:


a. CADA LINHA DE CÓDIGO DESENVOLVIDA DEVE SER
EXPLICADA. Cada linha de código que você estudante
desenvolver, deve ser explicada através de comentários.
b. Comentários valem 10% da nota final, sendo que será a nota de
comentários será baseada na fórmula:

𝑻𝒐𝒕𝒂𝒍 𝒅𝒆 𝒍𝒊𝒏𝒉𝒂𝒔 𝒄𝒐𝒎𝒆𝒏𝒂𝒅𝒂𝒔 𝑪𝒐𝒓𝒓𝒆𝒕𝒂𝒎𝒆𝒏𝒕𝒆


𝑵𝒐𝒕𝒂𝑪𝒐𝒎𝒆𝒏𝒕á𝒓𝒊𝒐𝒔 =
𝑻𝒐𝒕𝒂𝒍 𝒅𝒆 𝒍𝒊𝒏𝒉𝒂𝒔 𝒑𝒓𝒐𝒈𝒓𝒂𝒎𝒂𝒅𝒂𝒔
c. Comentários incompatíveis com o código desenvolvido serão
desconsiderados.
d. Exemplo de comentário correto:

 Colocar uma IMAGEM com o terminal rodando e mostrando o que


cada exercício pede.
a. Não colocar um print do seu terminal rodando com os resultados
do seu código, irá descontar 10% de sua nota.
b. Caso a print não seja possível através do código enviado (print
modificada ou induzida a apresentar um resultado), será
descontado 10% da nota.
c. Exemplo de print:

6
Roteiro de Atividade Prática de
Estrutura de Dados

A avaliação do trabalho seguirá conforme tabela abaixo:

Onde:
𝐷𝑒𝑠𝑐𝑜𝑛𝑡𝑜𝑠 = 𝐴𝑟𝑞𝑢𝑖𝑣𝑜 + 𝐼𝑛𝑑𝑒𝑛𝑡𝑎çã𝑜 + 𝐶𝑜𝑚𝑒𝑛𝑡á𝑟𝑖𝑜𝑠 + 𝑃𝑟𝑖𝑛𝑡𝐷𝑜𝑇𝑒𝑟𝑚𝑖𝑛𝑎𝑙
𝑁𝑜𝑡𝑎𝐴𝑡𝑢𝑎𝑙𝑖𝑧𝑎𝑑𝑎 = 𝑁𝑜𝑡𝑎𝐸𝑥𝑒𝑟𝑐í𝑐𝑖𝑜 ∗ (100% − 𝐷𝑒𝑠𝑐𝑜𝑛𝑡𝑜𝑠)
E a Nota do Trabalho é a média entre a nota dos exercícios.

EXERCÍCIOS
1. “O algoritmo de ordenação por intercalação, ou Merge Sort, usufrui da estratégia de dividir
para conquistar. O Merge Sort realiza a ordenação dividindo um conjunto de dados em
metades iguais e reorganizando essas metades. É um algoritmo que opera de maneira
recursiva, dividindo de maneira contínua o conjunto de dados até eles tornarem-se
indivisíveis.”
Abaixo temos o código da função em Python do algoritmo Merge Sort.
def mergeSort(dados):
if len(dados) > 1:
meio = len(dados)//2
esquerda = dados[:meio]
direita = dados[meio:]
mergeSort(esquerda)
mergeSort(direita)
i = j = k = 0
while i<len(esquerda) and j<len(direita):
if esquerda[i]<direita[j]:
dados[k]=esquerda[i]
i=i+1
else:

7
Roteiro de Atividade Prática de
Estrutura de Dados

dados[k]=direita[j]
j=j+1
k=k+1
while i<len(esquerda):
dados[k]=esquerda[i]
i=i+1
k=k+1
while j<len(direita):
dados[k]=direita[j]
j=j+1
k=k+1
Para chamar a função acima utilizamos o seguinte trecho de código:
dados = [54, 26, 93, 17, 77, 31, 44, 55]
mergeSort(dados)
print(dados)
Onde “dados” é o vetor de entrada da função.
Reescreva a função “mergeSort” de forma que ela realize a ordenação dos elementos do
maior para o menor elemento. Por exemplo:
Para a entrada: [54, 26, 93, 17, 77, 31, 44, 55]
A saída deve ser: [93, 77, 55, 54, 44, 31, 26, 17]
Além de reescrever a função, você estudante deve comentar todas as linhas de código,
explicando o que está sendo realizado. Não se esqueça de testar o código e anexar a print
do terminal no documento de entrega.

2. Você e seus amigos decidiram desenvolver um jogo de cartas em linguagem python, e você
ficou encarregado de desenvolver as funções: embaralhaCartas e compraCarta.
As 52 cartas do baralho estão na lista de string abaixo:
baralho = ["A-Copas","A-Paus","A-Espadas","A-Ouros",
"2-Copas","2-Paus","2-Espadas","2-Ouros",
"3-Copas","3-Paus","3-Espadas","3-Ouros",
"4-Copas","4-Paus","4-Espadas","4-Ouros",
"5-Copas","5-Paus","5-Espadas","5-Ouros",
"6-Copas","6-Paus","6-Espadas","6-Ouros",
"7-Copas","7-Paus","7-Espadas","7-Ouros",
"8-Copas","8-Paus","8-Espadas","8-Ouros",
"9-Copas","9-Paus","9-Espadas","9-Ouros",
"10-Copas","10-Paus","10-Espadas","10-Ouros",
"J-Copas","J-Paus","J-Espadas","J-Ouros",
"Q-Copas","Q-Paus","Q-Espadas","Q-Ouros",
"K-Copas","K-Paus","K-Espadas","K-Ouros"]
A função “embaralhaCartas”, deve receber a lista “baralho” e retornar uma pilha de cartas, a
qual será utilizada pela função “compraCartas”. A função “compraCartas” vai receber a pilha
de cartas e retirar a carta do topo da pilha, e imprimindo a mesma na tela.

8
Roteiro de Atividade Prática de
Estrutura de Dados

Para testar seu código, utilize o trecho de código abaixo:


pilhaCartas = embaralhaCartas(baralho)
compraCartas(pilhaCartas)
compraCartas(pilhaCartas)
compraCartas(pilhaCartas)
Saída esperada:

Vale lembrar que a cada vez que o código rodar, novas três cartas serão apresentadas
devido a função “embaralhaCartas”. Você estudante deve comentar todas as linhas de
código, explicando o que está sendo realizado. Não se esqueça de testar o código e anexar
a print do terminal no documento de entrega.

3. 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 que um profissional da saúde classifica a
ordem de atendimento com base numa avaliação prévia do paciente, entregando-lhe um
cartão 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:
1. class ElementoDaListaSimples:
2. def __init__(self,dado,cor):
3. self.dado = dado
4. self.cor = cor
5. self.proximo = None
6.
7. class ListaEncadeadaSimples:
8. def __init__(self, nodos=None):
9. self.head = None
10.
11. def inserirNoFinal(self, nodo):
12. nodo_atual = self.head
13. while nodo_atual.proximo != None:
14. nodo_atual = nodo_atual.proximo
15. nodo_atual.proximo = nodo
16. return
17.
18. def inserirPrioridade(self, nodo):
19. #insira aqui seu código
20. return
21.
22. def inserir(self, dado, cor):
23. nodo = ElementoDaListaSimples(dado, cor)

9
Roteiro de Atividade Prática de
Estrutura de Dados

24. if self.head is None:


25. self.head = nodo
26. return
27. else:
28. if nodo.cor == "V":
29. self.inserirNoFinal(nodo)
30. else:
31. self.inserirPrioridade(nodo)
32. return
Na linha 31, 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 11-16). Pacientes com cartão amarelo
têm prioridade no atendimento e são inseridos no início da fila, em ordem de
chegada (ou seja, um paciente com cartão amarelo será inserido após os outros pacientes
com cartão amarelo que já estão na fila), pela função inserirPrioridade (linha 18-20).
Portanto, se os seguintes trechos de códigos são executados:
#programa principal
filaPacientes = ListaEncadeadaSimples() #cria a lista que ira receber os dados
dos pacientes

filaPacientes.inserir(1, "V") #insere um paciente com senha "V" 1


filaPacientes.inserir(2, "V") #insere um paciente com senha "V" 2
filaPacientes.inserir(101, "A") #insere um paciente com senha "A" 101
filaPacientes.inserir(3, "V") #insere um paciente com senha "V" 3
filaPacientes.inserir(102, "A") #insere um paciente com senha "A" 102
filaPacientes.inserir(103, "A") #insere um paciente com senha "A" 103
filaPacientes.inserir(4, "V") #insere um paciente com senha "V" 4
filaPacientes.inserir(104, "A") #insere um paciente com senha "A" 104
filaPacientes.inserir(105, "A") #insere um paciente com senha "A" 105

nodo_atual = filaPacientes.head
while nodo_atual is not None:
print(f"Cartão: {nodo_atual.cor}, Senha: {nodo_atual.dado}")
nodo_atual = nodo_atual.proximo
A saída deve ser:

10
Roteiro de Atividade Prática de
Estrutura de Dados

Considerando o processo de triagem descrito e os trechos de código-fonte apresentados,


implemente a função inserirPrioridade conforme indicado (linha 18-20) de forma que a
saída esteja correta. Você estudante deve comentar todas as linhas de código
desenvolvidas (função inserirPrioridade apenas), explicando o que está sendo realizado.
Não se esqueça de testar o código e anexar a print do terminal no documento de entrega.
Deve-se utilizar apenas a estrutura de Lista Encadeada Simples, a utilização de outras
estruturas, listas ou bibliotecas, acarretará redução de nota.

4. Uma árvore binária, por não ser uma estrutura linear, apresenta distintas maneiras de se
percorrer por ela para visualizar, manipular ou processar os dados da árvore. Dado o código
abaixo de uma árvore binária de busca, escreva uma função chamada “folhas“, que irá
retornar um vetor contendo apenas os nós folha da arvore (nós sem filhos).
class BST:
def __init__(self, dado=None):
self.dado = dado
self.esquerda = None
self.direita = None

def inserir(self, dado):


if (self.dado == None):
self.dado = dado
else:
if (dado < self.dado):
if (self.esquerda):
self.esquerda.inserir(dado)
else:
self.esquerda = BST(dado)
else:
if(self.direita):
self.direita.inserir(dado)
else:
self.direita = BST(dado)

def folhas(self, lst):


#implemente aqui seu código!
Para testar seu código, utilize o trecho de código abaixo:
Teste = BST()
Teste.inserir(7)
Teste.inserir(4)
Teste.inserir(9)
Teste.inserir(0)
Teste.inserir(5)
Teste.inserir(8)
Teste.inserir(13)

11
Roteiro de Atividade Prática de
Estrutura de Dados

print('Folhas: ', Teste.folhas([]))

A saída esperada para o trecho de código acima é:

Você estudante deve comentar todas as linhas de código desenvolvidas (função folhas
apenas), explicando o que está sendo realizado. Não se esqueça de testar o código e
anexar a print do terminal no documento de entrega. Deve-se utilizar apenas a estrutura de
BTS, a utilização de outras estruturas ou bibliotecas, acarretará redução de nota.

12

Você também pode gostar