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
Limitao de representao
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
R. O. Prates DCC/UFMG
R. O. Prates DCC/UFMG
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
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
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
al:
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);
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.
R. O. Prates DCC/UFMG