Baixe o app para aproveitar ainda mais
Prévia do material em texto
Estruturas de dados I Universidade Federal de Ouro Preto DECEA – Departamento de Ciências Exatas e Aplicadas João Monlevade – Minas Gerais Larissa Camila Papa 1 Tipos estruturados de dados Aula 04 Universidade Federal de Ouro Preto DECEA – Departamento de Ciências Exatas e Aplicadas João Monlevade – Minas Gerais 2 Arquivo contendo apenas: os protótipos das funções oferecidas pelo módulo; os tipos de dados exportados pelo módulo (typedef’s, struct’s, etc). Em geral possui: nome: igual ao do módulo ao qual está associado; extensão: .h Módulos de compilação em separado Universidade Federal de Ouro Preto DECEA – Departamento de Ciências Exatas e Aplicadas João Monlevade – Minas Gerais 3 Módulos de compilação em separado Inclusão de arquivos de interface no código. Protótipos das funções da biblioteca padrão de C: #include <arquivo.h> Protótipos de módulos do usuário: #include "arquivo.h" Universidade Federal de Ouro Preto DECEA – Departamento de Ciências Exatas e Aplicadas João Monlevade – Minas Gerais 4 Tipos abstrato de dados - TAD Um TAD define: um novo tipo de dado; o conjunto de operações para manipular dados desse tipo. Um TAD facilita: a manutenção e a reutilização de código; abstrato = “forma de implementação não precisa ser conhecida”. Para utilizar um TAD é necessário conhecer a sua funcionalidade, mas não a sua implementação. Universidade Federal de Ouro Preto DECEA – Departamento de Ciências Exatas e Aplicadas João Monlevade – Minas Gerais 5 Interface de um TAD Define: Nome do tipo; Os nomes das funções exportadas: Os nomes das funções devem ser prefixada pelo nome do tipo, evitando conflitos quando tipos distintos são usados em conjunto Exemplo: aluno - função para criar um tipo Aluno Universidade Federal de Ouro Preto DECEA – Departamento de Ciências Exatas e Aplicadas João Monlevade – Minas Gerais 6 Implementação de um TAD O arquivo de implementação de um TAD deve: incluir o arquivo de interface do TAD: permite utilizar as definições da interface, que são necessárias na implementação; garante que as funções implementadas correspondem às funções da interface. O compilador verifica se os parâmetros das funções implementadas equivalem aos parâmetros dos protótipos Universidade Federal de Ouro Preto DECEA – Departamento de Ciências Exatas e Aplicadas João Monlevade – Minas Gerais 7 Implementação de um TAD O arquivo de implementação de um TAD deve: incluir as variáveis globais e funções auxiliares: devem ser declaradas como estáticas visíveis apenas dentro do arquivo de implementação Universidade Federal de Ouro Preto DECEA – Departamento de Ciências Exatas e Aplicadas João Monlevade – Minas Gerais 8 TAD Aluno Tipo de dados para representar um aluno com as seguintes operações: cria – cria um aluno com o nome e a nota final; libera – libera a memória alocada para um aluno; imprime – imprime os dados do aluno; diferença – calcula a diferença entre duas notas. Universidade Federal de Ouro Preto DECEA – Departamento de Ciências Exatas e Aplicadas João Monlevade – Minas Gerais 9 Interface Aluno Define o nome do tipo e os nomes das funções exportadas A composição da estrutura Aluno não faz parte da interface: não é exportada pelo módulo; não faz parte da interface do módulo; não é visível para outros módulos. Os módulos que utilizarem o TAD Aluno: não poderão acessar diretamente os campos da estrutura Aluno; só terão acesso aos dados obtidos através das funções exportadas. Universidade Federal de Ouro Preto DECEA – Departamento de Ciências Exatas e Aplicadas João Monlevade – Minas Gerais 10 Aluno.h – arquivo com a interface de Aluno typedef struct Aluno Aluno; Aluno* aluno_cria (char nome, float nota); void aluno_libera (Aluno* p); void aluno_imprime (Aluno* p); float aluno_diferenca (Aluno* p, Aluno* q); Universidade Federal de Ouro Preto DECEA – Departamento de Ciências Exatas e Aplicadas João Monlevade – Minas Gerais 11 Implementação de Aluno Implementação de Aluno: inclui o arquivo de interface de Aluno; define a composição da estrutura Aluno; inclui a implementação das funções externas; Universidade Federal de Ouro Preto DECEA – Departamento de Ciências Exatas e Aplicadas João Monlevade – Minas Gerais 12 Aluno.c – arquivo com o TAD Aluno #include <stdlib.h> #include “ponto.h“ struct aluno{ char nome[30]; float nota; } Universidade Federal de Ouro Preto DECEA – Departamento de Ciências Exatas e Aplicadas João Monlevade – Minas Gerais 13 Aluno.c – arquivo com o TAD Aluno Função para criar um aluno dinamicamente: aloca a estrutura que representa o aluno; inicializa os seus campos. Universidade Federal de Ouro Preto DECEA – Departamento de Ciências Exatas e Aplicadas João Monlevade – Minas Gerais 14 Aluno.c – arquivo com o TAD Aluno Aluno* aluno_cria (char nome[30], float nota){ Aluno* p = (Aluno*) malloc(sizeof(Aluno)); if (p == NULL) { printf("Memória insuficiente!\n"); exit(1); } p->nome = nome; p->nota = nota; return p; } Universidade Federal de Ouro Preto DECEA – Departamento de Ciências Exatas e Aplicadas João Monlevade – Minas Gerais 15 Aluno.c – arquivo com o TAD Aluno Função para liberar um Aluno: deve apenas liberar a estrutura criada dinamicamente através da função cria. void aluno_libera (Aluno* p){ free(p); } Universidade Federal de Ouro Preto DECEA – Departamento de Ciências Exatas e Aplicadas João Monlevade – Minas Gerais 16 Aluno.c – arquivo com o TAD Aluno Função para imprimir um Aluno. void aluno_imprime (Aluno* p){ printf (“O nome e: %s\n”, p->nome); printf (“A nota e: %f\n”, p->nota); } Universidade Federal de Ouro Preto DECEA – Departamento de Ciências Exatas e Aplicadas João Monlevade – Minas Gerais 17 Aluno.c – arquivo com o TAD Aluno Função para calcular a diferença entre duas notas. float aluno_diferenca (Aluno* p, Aluno* q){ float nota1 = p->nota; float nota2 = q->nota; return nota1 – nota2; } Universidade Federal de Ouro Preto DECEA – Departamento de Ciências Exatas e Aplicadas João Monlevade – Minas Gerais 18 main.c #include <stdio.h> #include “aluno.h" int main (void){ Aluno* p = aluno_cria(‘joão’,8.0); Aluno* q = aluno_cria(‘carlos’,7.1); float diferenca = aluno_diferenca(p,q); printf(“Diferenca entre notas: %f\n", diferenca); aluno_libera(q); aluno_libera(p); return 0; }
Compartilhar