Prévia do material em texto
UNIVERSIDADE ANHANGUERA Kaio Lucas Farinelli de resende IMPLEMENTAÇÃO E OPERAÇÕES SUMÁRIO 1 ATIVIDADE PROPOSTA............................................................................3 1.1 Conceitos para implementação da atividade..........................................3 2 CÓDIGO COMPLETO.................................................................................4 3 EXECUTANDO O CODIGO........................................................................7 REFERÊNCIAS..................................................................................................9 EXPLICAÇÃO VISUAL DA PILHA DINÂMICA A pilha dinâmica cresce e diminui conforme a necessidade do sistema usando a memória Heap por meio da função malloc. Cada nó armazena uma operação e aponta para o elemento anterior na hierarquia da memória. [1, 2, 3] Operação Push (Inserção no Topo) Quando o usuário digita uma nova operação (ex: SOMA), um novo nó é alocado dinamicamente. Esse nó passa a apontar para o antigo topo, e o ponteiro Topo é atualizado para o endereço desse novo nó. [1, 2] Operação Pop (Remoção do Topo / Desfazer) Quando o usuário escolhe "Desfazer", o elemento apontado por Topo é isolado através de um ponteiro auxiliar, o Topo passa a apontar para o elemento de baixo (proximo), e a memória do nó removido é liberada com a função free(). CODIFICAÇÃO COMPLETA EM C Este algoritmo foi desenvolvido para simular o histórico de operações de uma calculadora científica, atendendo aos critérios de alocação dinâmica e tratamento de erros. PRINTS DE EXECUÇÃO (GDBONLINE) Abaixo está a representação exata da saída do console obtida ao compilar e rodar o código acima na ferramenta GDBOnline: AVALIANDO OS RESULTADOS (RESPOSTA À QUESTÃO TEÓRICA) Pergunta do Roteiro: Por que é importante dominar estruturas de dados como pilhas e compreender o tratamento adequado de erros ao desenvolver funcionalidades de histórico e desfazer operações em sistemas computacionais? Resposta: Dominar o conceito de pilhas dinâmicas é vital para construir softwares eficientes porque o padrão LIFO espelha exatamente a lógica cronológica inversa necessária para reverter estados de um sistema. Ao utilizar alocação dinâmica, o desenvolvedor garante otimização no uso da memória RAM, alocando recursos de forma elástica apenas quando novos passos no histórico são computados Tratamento de Underflow (Pilha Vazia): Evita que a aplicação tente ler ou remover ponteiros nulos (NULL), o que resultaria em travamentos do software por Segmentation Fault. [1] Tratamento de Falha de Alocação (malloc == NULL): Garante a resiliência do sistema em cenários de falta de memória real do hardware, impedindo corrupção de dados ou comportamento imprevisível image2.png image3.png image4.png image5.png image6.png image7.png image8.png image1.png