Você está na página 1de 6

UNIVERSIDADE DE SÃO PAULO - USP

INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO - ICMC

SCC0502 - ALGORITMOS E ESTRUTURAS DE DADOS I

TRABALHO 1
“ADMINISTRANDO CONTATINHOS” E “PILHA OU FILA”

ALUNOS: TIAGO ALEXANDRE COSTA DOS SANTOS; 12674811


JESSÉ GONÇALVES JÚNIOR; 12547830
FELIPE VINICIUS DE SOUSA; 10346940

PROF. Dr. DIEGO FURTADO SILVA

São Carlos
25 de Outubro de 2022
SUMÁRIO
1. ADMINISTRANDO CONTATINHOS 1

2. PILHA OU FILA 2
1. ADMINISTRANDO CONTATINHOS
Para a resolução do problema, criamos três arquivos principais: main.c, lista.c
e lista.h. Neste último, foram definidas as structs que foram utilizadas no código, além
da enumeração e definição de tipo das funções , estas sendo : void criar(), void
inserir(), static pesquisa_fun(), void pesquisa_pos(), void remover() , void inserir() e
void alterar . Já no arquivo lista.c, foram escritas as lógicas dessas funções, ou seja,
suas implementações para realizar os seus objetivos, além das mensagens de saídas
específicas para cada situação enunciada no exercício. Por fim, temos a main.c, em
que está escrito o código que de fato soluciona a administração de contatinhos,
utilizando os outros dois arquivos para o uso das funções.
A ideia da main.c é bastante simples. Utilizamos da função scanf(), da
biblioteca stdio.h, para ler e separar a entrada em três variáveis. A primeira é o
indicador da operação, o segundo é o nome da pessoa e o terceiro é o número, e
foram alocadas para as variáveis char op e t_elemento elemento, o qual esse último
permite abrigar duas extensões: elemento.nome e elemento.telefone. A partir da
informação atribuída à char op, é feita uma lógica de seleção da função que deverá
ser chamada, utilizando if e else if. Como toda a programação das funções foram feitas
no lista.c, na main apenas os parâmetros específicos oriundos da entrada são
passados nas funções, e elas então executam suas ações baseadas neles. Dessa
forma, as operações pretendidas com os contatinhos são realizadas assim como
propostas no enunciado do exercício.
Como pode ser visto pelos nomes dos arquivos utilizados, a ED escolhida foi
uma Lista. Optamos por tal estrutura pela maior facilidade e afinidade do grupo com
ela, além de que ela apresenta diversas formas diferentes de manipulação, das quais
conseguimos visualizar que seriam aplicáveis para a solução do problema em
questão.
Em relação às dificuldades, os maiores problemas que encontramos foram em
relação à compilação do código e makefile. Obtemos alguns erros de comunicação
entre os arquivos , de declarações de tipos das estruturas do código e de alocação
dinâmica. A grande maioria desses erros eram indicados no terminal após a tentativa
de compilação, então era mais simples de corrigí-los. Já o Makefile foi mais difícil.
Tentamos por diversas vezes, mas sem nenhum sucesso. Pesquisamos diferentes
formas de escrevê-lo nos materiais da disciplina e na internet, assim como entramos

1
em contato com colegas , até que finalmente conseguimos, mesclando um pouco de
cada informação que obtivemos

2. PILHA OU FILA
Para a resolução deste problema, seguimos uma ideia similar ao do
anterior, com três arquivos principais: main.c, pilhaoufila.c e pilhaoufila.h. Neste
último, foram definidas as structs dos elementos que foram utilizados na
implementação das funções e do código principal da main. Já no arquivo pilhaoufila.c,
foram declaradas, definidas e implementadas as funções necessárias para a
resolução da questão, as quais foram : void criar(), void inserirFim(), void
removerFim(), void removerUnica(), void removerInicio(), void imprimir() . Por fim,
temos a main.c, em que está escrito o código que de fato soluciona a dúvida da pilha
ou fila, incluindo os outros dois arquivos para tal.
A ideia da main.c começa com a declaração das variáveis que serão utilizadas
na implementação. Vale ressaltar a importância da variável inteira resposta, a qual
será responsável por guiar o programa na escolha da análise a ser feita para
determinado par de entrada, além de indicar qual ED foi utilizada (pilha ou fila).Após
as declarações, são utilizados dois for concatenados, a fim de permitir a inserção da
quantidade de casos de testes e de pares que foram determinados pela entrada.
Prosseguindo com o código, é feito a análise de se a operação é de inserção ou
remoção. A questão de inserção é mais simples, visto que temos apenas o caso de
inserir no final. Contudo, na remoção é que aparecem as divergências principais entre
pilha e fila. No código, tratamos tais possibilidades com diferentes tentativas usando
as funções void removerFim() e void removerInicio(), em que para cada caso de
sucesso ou falha das condições escritas, um determinado valor é atribuído à variável
resposta. Além disso, também é avaliado o caso no qual aa estrutura de dados possui
tamanho fixo e não pode ser alterado. Toda essa lógica está presente dentro do
segundo for previamente mencionado, o qual permitem analisar todos os pares dos
casos de teste. Após todo o processo de loop, a variável resposta adquiriu um valor
definitivo , o qual indica qual saída será impressa no terminal. Essa artimanha está
contida no primeiro for, o que permite que saibamos a qual dos 4 casos de saída o
caso de teste está associado, imprimindo assim o formato de saída desejado no
exercício.

2
Como pode ser visto nos arquivos utilizados, a ED escolhida para auxiliar no
armazenamento dos dados ao longo do código foi uma Lista. Optamos por tal
estrutura pela maior facilidade e afinidade do grupo com ela, além de que ela
apresenta diversas formas diferentes de manipulação, das quais conseguimos
visualizar que seriam aplicáveis para a solução do problema em questão.
Em relação às dificuldades, os maiores problemas que encontramos foram em
relação à alguns casos específicos e na escrita do makefile. Obtemos alguns erros na
saída de alguns casos, principalmente na situação do “indefinido” e do “impossível”,
em que muitos deles acabavam sendo indicados como pila ou filha. Todavia, fomos
revisando o código a cada tentativa e corrigndo os erros que íamos identificando, até
que ele funcionou em maioria. Já o Makefile foi mais difícil. Tentamos por diversas
vezes, mas sem nenhum sucesso. Pesquisamos diferentes formas de escrevê-lo nos
materiais da disciplina e na internet, assim como entramos em contato com colegas ,
até que finalmente conseguimos, mesclando um pouco de cada informação que
obtivemos

3
4

Você também pode gostar