Вы находитесь на странице: 1из 6

O que um algoritmo?

Aula 1 Tipo Abstrato de Dados

Luiz Chaimowicz e Raquel O. Prates Livro Projeto de Algoritmos Captulo 1


R. O. Prates 2009-1 DCC/UFMG R. O. Prates DCC/UFMG

O que um programa?

Algoritmos
Sequncia de aes executveis para a soluo de um determinado tipo de problema Exemplo: Receita de Bolo

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)
Aqui vamos utilizar a Linguagem C

R. O. Prates DCC/UFMG

R. O. Prates DCC/UFMG

Representao de Dados
Seleo do que representar

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)

Seleo de como representar


Definio da estrutura de dados

Limitao de representao

Representao decimal: 1278 + 321 = 1599


Boa para nmeros maiores (operao complexa)

R. O. Prates DCC/UFMG

R. O. Prates DCC/UFMG

Estrutura de Dados
Estruturas de Dados
Conjunto de dados que representa uma situao real Abstrao da realidade

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

Estruturas de Dados e Algoritmos esto intimamente ligados

R. O. Prates DCC/UFMG

R. O. Prates DCC/UFMG

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
R. O. Prates DCC/UFMG

Exemplo: Lista de nmeros inteiros


Operaes do TAD
Faz Lista Vazia Insere nmero no comeo da lista Remove de uma posio i
Programa usurio do TAD: int main() { Lista L; int x; x = 20; FazListaVazia(L); Insere(x,L); ... } Implementao por Vetores:

20 13 02 30

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

R. O. Prates DCC/UFMG

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

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 Como, apesar de ter aprendido C++, vocs no viram o conceito de orientao por objetos, vamos utilizar os conceitos de C (Typedef e Structs) Orientao por objetos (classes, etc) vai ser vista em disciplinas posteriores (POO, Prog. Modular)
R. O. Prates DCC/UFMG

Estruturas (Structs) em C / C++


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, usa-se a construo struct para representar esse tipo de dado

R. O. Prates DCC/UFMG

Estruturas (Structs) em C / C++


#include <stdio.h> #include <string.h> using namespace std; struct Aluno { char nome[50]; int matricula; char conceito; }; int main() { struct Aluno al, aux; strcpy(al.nome, "Pedro"); al.matricula = 200712; al.conceito = 'A'; aux = al; printf("%s", aux.nome); return(0); }
R. O. Prates DCC/UFMG

Declarao de Tipos
Para simplificar, uma estrutura ou mesmo outros tipos de dados podem ser definidos como um novo tipo Uso da construo typedef
typedef struct Aluno{ string nome; int matricula; char conceito; } TipoAluno; int main() { TipoAluno al; Vetor v; ... } typedef int[10] Vetor;
R. O. Prates DCC/UFMG

nome mat conc

al:

Pedro 200712 A Pedro 200712 A

aux:

TADs em C
Para implementar um Tipo Abstrato de Dados em C, 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
Mas, diferentemente de C++ e Java, no h uma forma de proibir o acesso.
R. O. Prates DCC/UFMG

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
R. O. Prates DCC/UFMG

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

ContaBancaria.h
// definio do tipo typedef struct { int numero; double saldo; } ContaBancaria; // cabealho das funes void Inicializa (ContaBancaria *, int, double); void Deposito (ContaBancaria *, double); void Saque (ContaBancaria *, double); void Imprime (ContaBancaria);

Faa um pequeno programa para testar o seu TAD


R. O. Prates DCC/UFMG R. O. Prates DCC/UFMG

ContaBancaria.c
#include<stdio.h> #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); }
R. O. Prates DCC/UFMG

Main.c
#include<stdio.h> #include<stdlib.h> #include "ContaBancaria.h" int main (void) { 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); system("PAUSE"); return(0); }

R. O. Prates DCC/UFMG

Exerccio 2
Implemente um novo TAD Banco que faa uso do TAD Conta Bancria para criar um conjunto de contas bancrias. O tipo do conjunto deve se chamar Contas e deve conter o nmero de contas existentes e um vetor de contas. As operaes devem ser:
InicializaContas(Contas *cnt) /* Define o nmero de contas existentes como sendo 0.*/ CriarNovasContas(Contas *cnt, int n); /* Cria n novas contas no conjunto de contas solicitando ao usurio o saldo e definindo automaticamente o nmero da conta. */ ImprimirContas(Contas *cnt); /* Imprime todas as contas existentes. */ ZerarSaldoConta(Contas *cnt, int num); /* Dado o nmero num de uma conta, zera seu saldo. */

Exerccio 3
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

Observe que para criar o ZerarSaldoConta voc dever buscar a conta que tem um determinado nmero e retirar todo seu saldo. Para isso voc dever criar no TAD Conta Bancrias duas novas funes:
VerificaNum (ContaBancaria conta, int num) /* Retorna 1 se a conta tiver o nmero num, e 0 se no tiver */ ConsultaSaldo (ContaBancaria conta) /* Retorna o saldo da ContaBancaria Conta */

Explique por que estas funes devem estar no TAD Conta Bancria e no no TAD Banco.

Faa um pequeno programa para testar o seu TAD


R. O. Prates DCC/UFMG

R. O. Prates DCC/UFMG