Algoritmos e Estruturas de Dados [LEEC] (2024/2025)

Aulas teóricas

Artur Miguel Dias



Teórica 01 (07/mar/2025)

Apresentação da disciplina.
Revisão dos apontadores em C. As seis situações práticas em que se usam apontadores em C.
Discussão inicial sobre a metodologia de programação baseada em TADs.



Apresentação da disciplina

Outros aspetos:

Revisão dos apontadores

Em AED, precisaremos de explorar o uso de apontadores em C até ao limite.

Por isso, aqui vai uma revisão do tema dos apontadores:


Slides


Problema da nota final

Pretende-se um programa que implemente a parte da avaliação contínua das notas de AED.

O programa deve ser desenvolvido usando a nossa Metodologia de programação Baseada em TADs

O programa recebe as notas do projeto e dos testes dum aluno. Depois de receber o input, o programa pode dar duas respostas diferentes: (1) se o aluno foi aprovado, o programa mostra a nota final; (2) se o aluno reprovou, o programa diz isso, e neste caso não há nota.


Aluno.h

O programa introduz o conceito de Aluno, através do TAD Aluno, que é definido neste ficheiro ".h".

Cada TAD é implementado num módulo, que é constituído por dois ficheiros, neste caso "Aluno.h" e "Aluno.c".

O nome dum TAD deve ser sempre um substantivo que começa por letra maiúscula, por exemplo "Aluno".

Este ficheiro "Aluno.h" apresenta a visão pública do TAD Aluno. Declara o tipo público Aluno, assim como todas as funções públicas.

Para se conseguir definir publicamente um TAD ao mesmo tempo escondendo a sua representação interna, usamos sempre a técnica nº 6, descrita na secção dos apontadores.

    
    


Aluno.c

O ficheiro "Aluno.c" apresenta a visão privada do TAD Aluno e implementa este TAD.

Define a representação interna do tipo Aluno, e implementa todas as suas funções.

Neste exemplo aparecem algumas constantes privadas e algumas funções privadas, que ajudam a organizar a implementação.

Em C, as funções privadas dum módulo são anotadas com a palavra static. Ficam indisponíveis no exterior, mesmo que façamos o erro grave de divulgar os seus protótipos no ficheiro ".h".

    
    






MainNotaFinal.c

Este ficheiro contém o programa principal. Usa-se o TAD Aluno, como se vê pode observar no include inicial.

Seria perfeitamente legítimo incluir outros ficheiros ".h", por exemplo "stdio.h" e "stdlib.h". Mas também é legítimo aproveitar o facto de "Aluno.h" já ter precisado de incluir esses ficheiros e de não valer a pena repetir a inclusão. Note que o ficheiro "Aluno.h" inclui o ficheiro "Util.h", que por sua vez inclui os ".h" dos módulos mais importantes da biblioteca do C.

Os módulos de biblioteca e os TADs são criados para poderem ser reutilizados em programas diversos. Por isso devem ser escritos com bastante ambição, seguindo algumas regras rígidas: por exemplo os protótipos nos ficheiros ".h" devem estar perfeitamente documentados, e as funções privadas nos ficheiros ".c" devem ter anotadas com static.

Pelo contrário, o programa principal não se destina a ser reutilizado. Neste caso, é normal a nossa atitude ser um pouco menos rígida: por exemplo, apesar das funções auxiliares do programa principal serem tecnicamente privadas, é comum omitir a anotação static.

    
    


Util.h

Nas aulas de AED, irá sendo desenvolvida, a pouco e pouco, uma biblioteca de software que depois será usada no projeto final.

O módulo mais básico da biblioteca chama-se Util e contém um pequeno número de funcionalidades básicas úteis.

O TAD aluno usa a função "semMemoria" para tratar a situação em que o resultado de malloc indica que a memória se esgotou.

    
    


Util.c

Eis a implementação do módulo Util. Por acaso, as funções são todas públicas. Se existisse alguma função privada, ela seria anotada com a palavra static.

    
    



#80