INF 1007 Programação II



Documentos relacionados
Métodos Computacionais. Tipos Abstratos de Dados

INF1007: Programação 2 9 Tipos Abstratos de Dados. (c) Dept. Informática - PUC-Rio 1

INF 1007 Programação II

Programação de Computadores II. Cap. 9 Tipos Abstratos de Dados (TAD)

Programação II. Módulos, Encapsulamento e TADs. Bruno Feijó Dept. de Informática, PUC-Rio

Tipos Abstratos de Dados TADs

INF 1007 Programação II

Tipos de Dados, Tipos Abstratos de Dados Estruturas de Dados

INF1007: Programação 2 10 Árvores Binárias. (c) Dept. Informática - PUC-Rio 1

INF 1620 P1-10/04/02 Questão 1 Nome:

INF PROGRAMAÇÃO II LISTA DE EXERCÍCIOS 15

Linguagem C: Árvores Binarias

SCC 202 Prova 1. 28/9/2010 Resolução e Comentários

INF 1007 Programação II

Tipos Abstratos de Dados (TAD)

Métodos Computacionais. Fila

Guia Rápido: GCC, Makefile e Valgrind.

INF PROGRAMAÇÃO II LISTA DE EXERCÍCIOS 4

INF 1005 Programação I

INF 1007 Programação II

CIÊNCIA DA COMPUTAÇÃO PROVA PARA TRANSFERÊNCIA

Aula 3 Alocação Dinâmica

Introdução a Computação

INF1007: Programação 2. 4 Tipos Estruturados. 10/23/09 (c) Dept. Informática - PUC-Rio 1

INF 1005 Programação I

Filas. Fabrício J. Barth. BandTec - Faculdade de Tecnologia Bandeirantes

Operaçõe õ s c om o Strings Intr oduç ão a o Ponte iros o e Funçõe õ s

Módulo 8 Tipos Estruturados

Métodos Computacionais. Árvores

Aula 1 Tipo Abstrato de Dados

Introdução a Programação de Jogos

Técnicas de Programação I

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Pilhas. Fabrício J. Barth. BandTec - Faculdade de Tecnologia Bandeirantes

Estruturas de Dados. Prof. Gustavo Willam Pereira Créditos: Profa. Juliana Pinheiro Campos

TAD: Tipo Abstrato de Dados (parte 2)

REVISÃO DE C. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

O que é um algoritmo? O que é um programa? Algoritmos. Programas. Aula 1 Tipo Abstrato de Dados

TAD: Tipo Abstrato de Dados (parte 2)

POO Programação Orientada a Objetos. Classes em Java

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

Estruturas de Dados Aula 11: TAD Pilha 09/05/2011

Exemplo Tipos Abstratos de Dados TADs Disciplina: Semestre: Turma: Professor: Renata de Matos Galante matricula nome

Estrutura da linguagem de programação C Prof. Tiago Eugenio de Melo tiago@comunidadesol.org

Busca. Pesquisa sequencial

Registros. Técnicas de Programação. Rafael Silva Guimarães

Referências. Programação de Computadores II. Cap. 6 Matrizes. Tópicos. Alocação Estática versus Dinâmica. Alocação Estática versus Dinâmica

Figura 13.1: Um exemplo de árvore de diretório.

struct LISTA item quant

Gilberto A. S. Segundo. 24 de agosto de 2011

Programação Orientada a Objetos em Java

10. Listas Encadeadas

Trabalho 3: Agenda de Tarefas

Prof. Yandre Maldonado - 1 PONTEIROS. Prof. Yandre Maldonado e Gomes da Costa

17 - Funções e Procedimentos em C Programação Modular

Fundamentos de Programação

BUSCA EM LISTAS LISTAS SEQÜENCIAIS, LISTAS SIMPLESMENTE E DUPLAMENTE ENCADEADAS E LISTAS CIRCULARES

Técnicas de Programação II

INF 1007 Simulado P2 Nome: Instruções

Introdução a POO. Introdução a Linguagem C++ e POO

Linguagem C Funções definidas pelo usuário. Lógica de Programação

Estruturas de Dados Aula 15: Árvores 17/05/2011

Estruturas de Dados. Módulo 11 Pilhas. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

Tipos de Dados Simples

INF1007 Programação 2 9 Pilhas. (c) Dept. Informática - PUC-Rio 1

ESTRUTURAS DE DADOS AVANÇADAS (INF 1010) (a) Seja um TAD definido por uma lista circular implementada em um vetor.

Conceitos de Linguagens de Programação

INF 1620 P2-01/11/03 Questão 1 Nome:

Capítulo 2: Introdução à Linguagem C

Tipo de Dados em Linguagem C

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Programação II. Tipos Estruturados. Bruno Feijó Dept. de Informática, PUC-Rio

DAS5102 Fundamentos da Estrutura da Informação

Programação II. Vetor de Tipo Estruturado e Vetor de Ponteiros. Bruno Feijó Dept. de Informática, PUC-Rio

Introdução à Programação

SSC304 Introdução à Programação Para Engenharias. Alocação Dinâmica. GE4 Bio

INF 1007 Programação II

Módulo 14 - Estruturas genéricas

Filas. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Programação II. Tipos Estruturados

Tipo Abstrato de Dados

Métodos Computacionais. Tipos Estruturados

Introdução à Programação

Estruturas de Dados Aula 10: Listas (parte 2) 19/04/2011

2ª Lista de Exercícios

Pesquisa Sequencial e Binária

Estruturas (registros)

Programação científica C++

Orientação a Objetos com Java

UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO UNIVERSITÁRIO NORTE DO ESPÍRITO SANTO

9. Tipos Abstratos de Dados

INF 1007 Programação II

Exercício 1. Tabela 1: Cadastro de usuários, senhas e privilégios (exemplo). Login Senha Privilégio Armamento

Estruturas de entrada e saída

Transcrição:

INF 1007 Programação II Aula 12 Tipos Abstratos de Dados Edirlei Soares de Lima <elima@inf.puc-rio.br>

Tipo 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; A implementação das operações de TAD não precisa ser conhecida; Para utilizar um TAD é necessário conhecer a sua funcionalidades, mas não a sua implementação; Um TAD possui: Uma interface definindo o nome e as funcionalidades do TAD; Uma implementação contendo a real implementação das funcionalidades do TAD;

Tipo Abstrato de Dados (TAD) Exemplo: TAD Ponto - Tipo de dado para representar um ponto no R 2 com as seguintes operações: cria - cria um ponto com coordenadas x e y; libera - libera a memória alocada por um ponto; acessa - retorna as coordenadas de um ponto; atribui - atribui novos valores às coordenadas de um ponto; distancia - calcula a distância entre dois pontos;

Tipo Abstrato de Dados (TAD) Interface do TAD Ponto: Define o nome do tipo e os nomes das funções exportadas; A composição da estrutura Ponto 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 Ponto: Não poderão acessar diretamente os campos da estrutura Ponto; Só terão acesso aos dados obtidos através das funções exportadas.

/* TAD: Ponto (x,y) */ /* Tipo exportado */ typedef struct ponto Ponto; Arquivo: ponto.h (interface do TAD Ponto) /* Funções exportadas */ /* Função cria - Aloca e retorna um ponto com coordenadas (x,y) */ Ponto* pto_cria(float x, float y); /* Função libera - Libera a memória de um ponto */ void pto_libera(ponto* p); /* Função acessa - Retorna as coordenadas de um ponto */ void pto_acessa(ponto* p, float* x, float* y); /* Função atribui - Atribui valores às coordenadas do ponto */ void pto_atribui(ponto* p, float x, float y); /* Função distancia - Retorna a distância entre dois pontos */ float pto_distancia(ponto* p1, Ponto* p2);

Tipo Abstrato de Dados (TAD) Implementação do TAD Ponto: Inclui o arquivo de interface de Ponto; Define a composição da estrutura Ponto; Inclui a implementação das funções externas;

#include <stdlib.h> #include <stdio.h> #include <math.h> #include "ponto.h" Arquivo: ponto.c (implementação do TAD Ponto) struct ponto float x; float y; ; Ponto* pto_cria(float x, float y) Ponto* p = (Ponto*) malloc(sizeof(ponto)); if (p == NULL) printf("memória insuficiente!\n"); exit(1); p->x = x; p->y = y; return p;

void pto_libera(ponto* p) free(p); void pto_acessa(ponto* p, float* x, float* y) *x = p->x; *y = p->y; void pto_atribui(ponto* p, float x, float y) p->x = x; p->y = y; float pto_distancia(ponto* p1, Ponto* p2) float dx = p2->x - p1->x; float dy = p2->y - p1->y; return sqrt(dx*dx + dy*dy);

Tipo Abstrato de Dados (TAD) Exemplo de utilização do TAD Ponto: #include <stdio.h> #include "ponto.h" int main(void) float x, y; Ponto* p = pto_cria(2.0,1.0); Ponto* q = pto_cria(3.4,2.1); float d = pto_distancia(p,q); printf("distancia entre pontos: %f\n",d); pto_libera(q); pto_libera(p); return 0;

Tipo Abstrato de Dados (TAD) Exemplo: TAD Circulo - Tipo de dado para representar um circulo com as seguintes operações: cria - cria um círculo com centro (x,y) e raio r; libera - libera a memória alocada por um círculo; area - calcula a área do círculo; interior - verifica se um dado ponto está dentro do círculo;

/* TAD: Círculo */ /* Dependência de módulos */ #include "ponto.h" Arquivo: circulo.h (interface do TAD Circulo) /* Tipo exportado */ typedef struct circulo Circulo; /* Funções exportadas */ /* cria - Aloca e retorna um círculo com centro(x,y) e raio r */ Circulo* circ_cria(float x, float y, float r); /* libera - Libera a memória de um círculo previamente criado */ void circ_libera(circulo* c); /* area - Retorna o valor da área do círculo */ float circ_area(circulo* c); /* interior - Verifica se um ponto p está dentro do círculo */ int circ_interior(circulo* c, Ponto* p);

#include <stdlib.h> #include "circulo.h Arquivo: circulo.c (implementação do TAD Circulo) #define PI 3.14159 struct circulo Ponto* p; float r; ; Circulo* circ_cria(float x, float y, float r) Circulo* c = (Circulo*)malloc(sizeof(Circulo)); c->p = pto_cria(x,y); c->r = r;...

void circ_libera(circulo* c) pto_libera(c->p); free(c); float circ_area(circulo* c) return PI*c->r*c->r; int circ_interior(circulo* c, Ponto* p) float d = pto_distancia(c->p,p); return (d<c->r);

Tipo Abstrato de Dados (TAD) Podemos utilizar um TAD sem precisarmos conhecer a sua implementação. Exemplo: TAD Matriz - Tipo de dado para representar matrizes com as seguintes operações: cria: operação que cria uma matriz de dimensão m por n; libera: operação que libera a memória alocada para a matriz; acessa: operação que acessa o elemento da linha i e da coluna j da matriz; atribui: operação que atribui o elemento da linha i e da coluna j da matriz; linhas: operação que devolve o número de linhas da matriz; colunas: operação que devolve o número de colunas da matriz.

/* TAD: matriz m por n */ Arquivo: matriz.h (interface do TAD Matriz) /* Tipo exportado */ typedef struct matriz Matriz; /* Funções exportadas */ /* cria - Aloca e retorna uma matriz de dimensão m por n */ Matriz* mat_cria(int m, int n); /* libera - Libera a memória de uma matriz previamente criada. */ void mat_libera(matriz* mat); /* acessa - Retorna o valor do elemento da linha i e coluna j */ float mat_acessa(matriz* mat, int i, int j); /* atribui - atribui o valor ao elemento da linha i e coluna j */ void mat_atribui(matriz* mat, int i, int j, float v); /* linhas - Retorna o número de linhas da matriz */ int mat_linhas(matriz* mat); /* colunas - Retorna o número de colunas da matriz */ int mat_linhas(matriz* mat);

Tipo Abstrato de Dados (TAD) Verificar se uma matriz é simétrica: retorna 1 se verdadeiro e 0 se falso: Uma matriz é simétrica se ela for igual a sua transposta; Uma matriz transposta é o resultado da troca de linhas por colunas da matriz original; int simetrica(matriz *mat) int i, j; for (i=0; i<mat_linhas(mat); i++) for (j=0; j<mat_colunas(mat); j++) if (mat_acessa(mat,i,j)!= mat_acessa(mat,j,i)) return 0; return 1;

Tipo Abstrato de Dados (TAD) Multiplicar uma matriz por um escalar: Matriz *mult_matriz_escalar(matriz *mat_a, float s) int i, j; Matriz *mat_b = mat_cria(mat_linhas(mat_a), mat_colunas(mat_a)) for (i=0; i<mat_linhas(mat_a); i++) for (j=0; j<mat_colunas(mat_a); j++) mat_atribui(mat_b, i, j, s * mat_acessa(mat_a,i,j)); return mat_b;

Leitura Complementar Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora Campus (2004). Capítulo 9 Tipos Abstratos de Dados

Exercícios Lista de Exercícios 11 Tipos Abstratos de Dados http://www.inf.puc-rio.br/~elima/prog2/