Estrutura de Dados (DPADF 0056) Aula 2 TADs Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior de Tecnologia em Sistemas para Internet Prof. Bruno B. Boniati www.cafw.ufsm.br/~bruno
Tipo de dado composto por valores de tipos simples
Tipos Estruturados Agrupam em uma mesma variável um conjunto de outras variáveis (de tipos simples ou compostos) que formam os campos da estrutura; Existe uma relação estrutural intrínseca entre seus valores; Em C, o tipo estrutura é chamado de struct
struct struct data { int dia; int mes; int ano; }; struct data d; d.dia = 19; d.mes = 3; d.ano = 2010;
Definição de novos tipos A maior parte das LP oferecem mecanismos para nomear ou renomear tipos de dados; Isso pode ser útil para abreviar nomes de tipos e tratar tipos complexos; Em C, a definição de um novo tipo é feita através do comando typedef
typedef typedef float Real; typedef int Inteiro; typedef unsigned int UInt; typedef float Vetor[4]; Vetor v; v[0] = 3; Inteiro i = 10;
typedef + struct struct data { int dia; int mes; int ano; }; typedef struct data Data; Data d; d.dia = 19; d.mes = 3; d.ano = 2010;
typedef + struct typedef struct data { int dia; int mes; int ano; } Data; Data d; d.dia = 19; d.mes = 3; d.ano = 2010;
Tipo Abstrato de Dado
TAD - Tipo Abstrato de Dado Importante técnica de programação baseada na definição de tipos estruturados; Especificam conceitualmente os dados (sua organização física e lógica); Definem operações para manipulação da estrutura; TAD(v,o) V = Conjunto de valores (dados) O = Conjunto de operações aplicáveis sobre os valores
TAD Tipo Abstrato de Dado (cont.) A ideia central é encapsular (esconder) de quem usa um determinado tipo e a forma concreta como ele foi implementado. O usuário (programador) utiliza o tipo de dado de forma abstrata, ou seja, baseado apenas nas funcionalidades oferecidas pelo tipo.
TAD Tipo Abstrato de Dado (cont.) Em geral representam tipos não previstos no núcleo das linguagens de programação; Consiste em: definir uma forma de armazenar os dados; e a definição de um conjunto adequado de operações para atuar sobre eles. Caracteriza-se pela separação entre conceito e implementação;
Ponto
Etapa 1 Definição Conceitual No plano cartesiano, cada PONTO está associado a um par ordenado, onde o primeiro e segundo elemento denotam respectivamente a abscissa (ou projeção do ponto no eixo horizontal) e a ordenada (ou projeção do ponto no eixo vertical). De que forma podemos armazenar um ponto? typedef struct ponto { int x; int y; } Ponto;
Etapa 2 Definição das Operações O que posso fazer com um ponto (exemplos): Definir (criar um ponto atribuindo um valor para as coordenadas x e y); Ponto criaponto(int x, int y); Medir a distância entre dois pontos; float distancia(ponto p1, Ponto p2); Responder a qual quadrante do plano um ponto faz parte; int quadrante(ponto p1);
Etapa 3 Implementação e Utilização Em linguagem C podemos implementar um TAD separando a interface da implementação. A interface é um arquivo.h que contém os cabeçalhos (headers) ou protótipos das operações (procedimentos ou funções) que atuam sobre o TAD; A implementação é um arquivo.c que implementa as operações descritas no arquivo.h A utilização de um TAD não exigirá necessariamente acesso ao código do arquivo.c, mas sim do arquivo.h
Interface... superfície de contato, de tradução, de articulação entre dois espaços, duas espécies, duas ordens de realidade diferentes Pierre Lévy int distancia(ponto p1, Ponto p2);
Para entender (considerando a linguagem C) Arquivo.h (com a definição de estruturas e protótipos de subrotinas) Arquivo.c (com a implementação das subrotinas) Compilação Arquivo.o Arquivo.c (com a utilização das subrotinas e uma função de nome main) Compilação Arquivo.o
Para entender (considerando a linguagem C) O arquivo.h (ex. ponto.h) contém apenas a declaração da estrutura (struct + typedef) e as interfaces das subrotinas; O arquivo.c (de mesmo nome do arquivo.h ) importa (include) o arquivo.h e implementa suas subrotinas; Esse arquivo é compilado e pode ser assim distribuído juntamente com o arquivo.h para ser linkado a um outro programa que utiliza do TAD (ex. prog_ponto.c)
Para entender (considerando a linguagem C) gcc -c ponto.c (Compila o TAD) gcc -c prog_ponto.c (Compila o programa que utiliza o TAD) gcc -O prog_ponto.exe ponto.o prog_ponto.o (Realiza a linkedição dos códigos objeto gerando um arquivo executável)
Exercícios para fixação
TAD - Ponto Especifique um TAD para representar um ponto do plano cartesiano. Implemente as seguintes operações: Criar/Inicializar um ponto; Retornar a distância entre dois pontos; Retornar o quadrante ao qual o ponto faz parte no plano cartesiano; Calcular o coeficiente angular de uma reta formada por dois pontos; Retornar o valor da abscissa de um ponto (x); Retornar o valor da ordenada de um ponto (y).
TAD - Data Especifique um TAD para representar uma data, para tanto, implemente as seguintes operações: Criar/Inicializar uma data (não permitindo valores inválidos); Verificar se um ano é ou não bissexto; Acrescentar um determinado número de dias a uma data; Escrever uma data por extenso (Ex. 16 de março de 2010);