18
Tipos Abstratos de Dados Prof. Jussara Almeida Derivado das transparências do Prof. Luiz Chaimowicz

TADs Structs Jussara

Embed Size (px)

DESCRIPTION

TADs Structs Jussara C/C++ Vetores Ponteiros

Citation preview

  • Tipos Abstratos de Dados

    Prof. Jussara Almeida

    Derivado das transparncias do Prof. Luiz Chaimowicz

  • Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz

    Algoritmos e Estrutura de Dados Algoritmo:

    Sequncia de aes executveis para a soluo de um determinado tipo de problema

    Exemplo: Receita de Bolo

    Em geral, algoritmos trabalham sobre Estruturas de Dados Conjunto de dados que representa uma situao real Abstrao da realidade

    Estruturas de Dados e Algoritmos esto intimamente ligados

  • Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz

    Representao dos dados Dados podem estar representados

    (estruturados) de diferentes maneiras Normalmente, a escolha da representao

    determinada pelas operaes que sero utilizadas sobre eles

    Exemplo: nmeros inteiros Representao por palitinhos: II + IIII = IIIIII

    Boa para pequenos nmeros (operao simples) Representao decimal: 1278 + 321 = 1599

    Boa para nmeros maiores (operao complexa)

  • Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz

    Programas Um programa uma formulao concreta

    de um algoritmo abstrato, baseado em representaes de dados especficas

    Os programas so feitos em alguma linguagem que pode ser entendida e seguida pelo computador Linguagem de mquina Linguagem de alto nvel (uso de compilador)

  • Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz

    Tipos Abstratos de Dados (TADs) Agrupa a estrutura de dados juntamente com

    as operaes que podem ser feitas sobre esses dados

    O TAD encapsula a estrutura de dados. Os usurios do TAD s tem acesso a algumas operaes disponibilizadas sobre esses dados

    Usurio do TAD x Programador do TAD Usurio s enxerga a interface, no a

    implementao

  • Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz

    Tipos Abstratos de Dados (TADs) Dessa forma, o usurio pode abstrair da

    implementao especfica.

    Qualquer modificao nessa implementao fica restrita ao TAD

    A escolha de uma representao especfica fortemente influenciada pelas operaes a serem executadas

  • Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz

    Exemplo: Lista de nmeros inteiros Operaes

    Faz Lista Vazia Insere nmero no comeo da lista Remove de uma posio i

    20 13 02 30Implementao por Vetores:void Insere(int x, Lista L) { for(i=0;...) {...} L[0] = x;}

    20 13 02 30

    Implementao por Listas Encadeadas

    void Insere(int x, Lista L) { p = CriaNovaCelula(x); L^.primeiro = p; ...}

    Programa usurio do TAD:

    int main() { Lista L; int x;

    x = 20; FazListaVazia(L); Insere(x,L); ...}

  • Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz

    Implementao de TADs Em linguagens orientadas por objeto (C++, Java) a

    implementao feita atravs de classes Em linguagens estruturadas (C, pascal) a

    implementao feita pela definio de tipos juntamente com a implementao de funes

    Nesta disciplina, vamos utilizar os conceitos de linguagens estruturadas C (typedef e structs) e Pascal (type, record)

    Orientao por objetos (classes, etc) vai ser vista em disciplinas posteriores (POO, Prog. Modular)

  • Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz

    Estruturas Uma estrutura uma coleo de uma ou mais

    variveis, possivelmente de tipos diferentes, colocadas juntas sob um nico nome para manipulao conveniente

    Por exemplo, para representar um aluno so necessrias as informaes nome, matrcula, conceito

    Ao invs de criar trs variveis, possvel criar uma nica varivel contendo trs campos.

    Em C: struct Em Pascal: record

  • Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz

    Estruturas (structs) em C

    struct Aluno { char nome[100]; int matricula; char conceito;};main() { struct Aluno al, aux;

    al.nome = Luiz al.matricula = 200712; al.conceito = A; aux = al; printf(%s, aux.nome);}

    Luiz200712 A

    al:

    Luiz200712 A

    aux:

  • Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz

    Declarao de Tipos Para simplificar, uma estrutura ou mesmo

    outros tipos de dados podem ser definidos como um novo tipo

    Uso da construo typedeftypedef struct { char nome[100]; int matricula; char conceito;} TipoAluno;

    typedef int[10] Vetor;

    int main() { TipoAluno al; Vetor v;

    ...}

  • Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz

    TADs Para implementar um Tipo Abstrato de Dados,

    usa-se a definio de tipos juntamente com a implementao de funes que agem sobre aquele tipo

    Como boa regra de programao, evita-se acessar o dado diretamente, fazendo o acesso s atravs das funes Note que no h uma forma de proibir o acesso.

  • Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz

    TADs em C Uma boa tcnica de programao

    implementar os TADs em arquivos separados do programa principal

    Para isso geralmente separa-se a declarao e a implementao do TAD em dois arquivos: NomeDoTAD.h : com a declarao NomeDoTAD.c : com a implementao

    O programa ou outros TADs que utilizam o seu TAD devem dar um #include no arquivo .h

  • Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz

    Exemplo Implemente um TAD ContaBancaria, com os

    campos nmero e saldo onde os clientes podem fazer as seguintes operaes: Iniciar uma conta com um nmero e saldo inicial Depositar um valor Sacar um valor Imprimir o saldo

    Faa um pequeno programa para testar o seu TAD

  • Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz

    ContaBancaria.h

    // definio do tipotypedef struct { int numero; double saldo;} ContaBancaria;

    // cabealho das funesvoid Inicializa(ContaBancaria* conta, int numero, double saldo);void Deposito (ContaBancaria* conta, double valor);void Saque (ContaBancaria* conta, double valor);void Imprime (ContaBancaria conta);

  • Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz

    ContaBancaria.c#include #include "Contabancaria.h"

    void Inicializa(ContaBancaria* conta, int numero, double saldo) { (*conta).numero = numero; (*conta).saldo = saldo;}

    void Deposito (ContaBancaria* conta, double valor) { (*conta).saldo += valor;}

    void Saque (ContaBancaria* conta, double valor) { (*conta).saldo -= valor;}

    void Imprime (ContaBancaria conta) { printf("Numero: %d\n", conta.numero); printf("Saldo: %f\n", conta.saldo);}

  • Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz

    Main.c#include #include #include "ContaBancaria.h"

    int main (int argc, char **argv) { ContaBancaria conta1; Inicializa(&conta1, 918556, 300.00); printf("\nAntes da movimentacao:\n "); Imprime(conta1); Deposito(&conta1, 50.00); Saque(&conta1, 70.00); printf("\nDepois da movimentacao:\n "); Imprime (conta1); }

  • Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz

    Exerccio (foco nos algoritmos) Implemente um TAD Nmero Complexo

    cada nmero possui os campos real e imaginrio Implemente as operaes:

    Atribui: atribui valores para os campos Imprime: imprime o nmero da forma R + Ci Copia: Copia o valor de um nmero para outro Soma: Soma dois nmeros complexos EhReal: testa se um nmero real

    Faa uma pequena aplicao para testar o seu TAD.