AEDS2.1 Conceitos Basicos

AEDS2.1 Conceitos Basicos

O que é um algoritmo? Aula 1 – Tipo Abstrato de Dados Luiz Chaimowicz e Raquel O. Prates O que é um programa? Livro “Projeto de Algoritmos” Capítulo 1 © R. O. Prates – 2009-1 © R. O. Prates DCC/UFMG DCC/UFMG Algoritmos Programas • Sequência de ações executáveis para a • Um programa é uma formulação concreta solução de um determinado tipo de de um algoritmo abstrato, baseado em problema representações de dados específicas • Exemplo: “Receita de Bolo” • Os programas são feitos em alguma linguagem que pode ser entendida e seguida pelo computador – Linguagem de máquina – Linguagem de alto nível (uso de compilador) • Aqui vamos utilizar a Linguagem C © R. O. Prates © R. O. Prates DCC/UFMG DCC/UFMG Representação de Dados Representação dos dados • Dados podem estar representados Seleção do que representar (estruturados) de diferentes maneiras • Normalmente, a escolha da representação é determinada pelas operações que serão Seleção de como representar utilizadas sobre eles Definição da estrutura de dados • Exemplo: números inteiros – Representação por palitinhos: II + IIII = IIIIII Limitação de representação • Boa para pequenos números (operação simples) – Representação decimal: 1278 + 321 = 1599 • Boa para números maiores (operação complexa) © R. O. Prates © R. O. Prates DCC/UFMG DCC/UFMG Estrutura de Dados Tipos Abstratos de Dados (TADs) • Estruturas de Dados • Agrupa a estrutura de dados juntamente com as – Conjunto de dados que representa uma operações que podem ser feitas sobre esses situação real dados – Abstração da realidade • O TAD encapsula a estrutura de dados. Os • Estruturas de Dados e Algoritmos usuários do TAD só tem acesso a algumas operações disponibilizadas sobre esses dados estão intimamente ligados • Usuário do TAD x Programador do TAD – Usuário só “enxerga” a interface, não a implementação © R. O. Prates © R. O. Prates DCC/UFMG DCC/UFMG Exemplo: Lista de números inteiros Tipos Abstratos de Dados (TADs) • Dessa forma, o usuário pode abstrair da • Operações do TAD – Faz Lista Vazia implementação específica. – Insere número no começo da lista – Remove de uma posição i Implementação por Vetores: 20 13 02 30 • Qualquer modificação nessa Programa usuário do TAD: implementação fica restrita ao TAD int main() { void Insere(int x, Lista L) { Lista L; for(i=0;...) {...} int x; L[0] = x; } x = 20; Implementação por Listas Encadeadas • A escolha de uma representação específica FazListaVazia(L); Insere(x,L); 20 13 02 30 é fortemente influenciada pelas operações ... } void Insere(int x, Lista L) { a serem executadas p = CriaNovaCelula(x); L->primeiro = p; © R. O. Prates © R. O. Prates ... DCC/UFMG DCC/UFMG } Implementação de TADs Estruturas (Structs) em C / C++ • Em linguagens orientadas por objeto (C++, Java) a • Uma estrutura é uma coleção de uma ou mais variáveis, implementação é feita através de classes possivelmente de tipos diferentes, colocadas juntas sob um • Em linguagens estruturadas (C, pascal) a único nome para manipulação conveniente implementação é feita pela definição de tipos juntamente • Por exemplo, para representar um aluno são necessárias com a implementação de funções as informações nome, matrícula, conceito • Como, apesar de “ter aprendido C++”, vocês não viram • Ao invés de criar três variáveis, é possível criar uma única o conceito de orientação por objetos, vamos utilizar os variável contendo três campos. conceitos de C ( Typedef e Structs ) • Em C, usa-se a construção struct para representar esse • Orientação por objetos (classes, etc) vai ser vista em tipo de dado disciplinas posteriores (POO, Prog. Modular) © R. O. Prates © R. O. Prates DCC/UFMG DCC/UFMG Estruturas (Structs) em C / C++ Declaração de Tipos #include <stdio.h> #include <string.h> using namespace std; • Para simplificar, uma estrutura ou mesmo outros tipos de dados podem ser definidos como um struct Aluno { char nome[50]; nome novo tipo int matricula; mat conc char conceito; • Uso da construção typedef }; int main() { typedef struct Aluno{ int main() { struct Aluno al, aux; Pedro al: string nome; TipoAluno al; 200712 A strcpy(al.nome, "Pedro"); int matricula; Vetor v; al.matricula = 200712; char conceito; al.conceito = 'A'; Pedro } TipoAluno ; ... aux = al; aux: } printf("%s", aux.nome); 200712 A return(0); } typedef int[10] Vetor; © R. O. Prates © R. O. Prates DCC/UFMG DCC/UFMG TADs em C TADs em C • Uma boa técnica de programação é implementar • Para implementar um Tipo Abstrato de Dados em C, usa-se a definição de tipos juntamente os TADs em arquivos separados do programa com a implementação de funções que agem principal sobre aquele tipo • Para isso geralmente separa-se a declaração e a implementação do TAD em dois arquivos: • Como boa regra de programação, evita-se – NomeDoTAD.h : com a declaração acessar o dado diretamente, fazendo o acesso – NomeDoTAD.c : com a implementação só através das funções • O programa ou outros TADs que utilizam o seu – Mas, diferentemente de C++ e Java, não há uma TAD devem dar um #include no arquivo .h forma de proibir o acesso. © R. O. Prates © R. O. Prates DCC/UFMG DCC/UFMG Exemplo ContaBancaria.h // definição do tipo • Implemente um TAD ContaBancaria, com os typedef struct { campos número e saldo onde os clientes podem int numero; double saldo; fazer as seguintes operações: } ContaBancaria; – Iniciar uma conta com um número e saldo inicial // cabeçalho das funções – Depositar um valor void Inicializa (ContaBancaria *, int, double); – Sacar um valor void Deposito (ContaBancaria *, double); void Saque (ContaBancaria *, double); – Imprimir o saldo void Imprime (ContaBancaria); • Faça um pequeno programa para testar o seu TAD © R. O. Prates © R. O. Prates DCC/UFMG DCC/UFMG ContaBancaria.c Main.c #include<stdio.h> #include<stdio.h> #include"Contabancaria.h" #include<stdlib.h> #include "ContaBancaria.h" void Inicializa(ContaBancaria *conta, int numero, double saldo) { conta->numero = numero; int main (void) conta->saldo = saldo; { } ContaBancaria conta1; Inicializa(&conta1, 918556, 300.00); void Deposito (ContaBancaria *conta, double valor) { conta->saldo += valor; printf("\nAntes da movimentacao:\n "); } Imprime(conta1); Deposito(&conta1, 50.00); void Saque (ContaBancaria *conta, double valor) { Saque(&conta1, 70.00); conta->saldo -= valor; printf("\nDepois da movimentacao:\n "); } Imprime (conta1); void Imprime (ContaBancaria conta) { system("PAUSE"); printf("Numero: %d\n", conta.numero); return(0); printf("Saldo: %f\n", conta.saldo); } } © R. O. Prates © R. O. Prates DCC/UFMG DCC/UFMG Exercício 2 Exercício 3 • Implemente um novo TAD Banco que faça uso do TAD Conta Bancária para criar um conjunto de contas bancárias. O tipo do conjunto deve se chamar Contas e deve conter • Implemente um TAD Número Complexo o número de contas existentes e um vetor de contas. • As operações devem ser: – cada número possui os campos real e imaginário – InicializaContas(Contas *cnt) /* Define o número de contas existentes como sendo 0.*/ – Implemente as operações: – CriarNovasContas(Contas *cnt, int n); /* Cria n novas contas no conjunto de contas – solicitando ao usuário o saldo e definindo automaticamente o número da conta. */ • Atribui: atribui valores para os campos – ImprimirContas(Contas *cnt); • Imprime: imprime o número da forma “R + Ci” /* Imprime todas as contas existentes. */ – ZerarSaldoConta(Contas *cnt, int num); • Copia: Copia o valor de um número para outro /* Dado o número num de uma conta, zera seu saldo. */ • Observe que para criar o ZerarSaldoConta você deverá buscar a conta que tem um • Soma: Soma dois números complexos determinado número e retirar todo seu saldo. Para isso você deverá criar no TAD Conta Bancárias duas novas funções: • EhReal: testa se um número é real – VerificaNum (ContaBancaria conta, int num) /* Retorna 1 se a conta tiver o número num, e 0 se não tiver */ – ConsultaSaldo (ContaBancaria conta) /* Retorna o saldo da ContaBancaria Conta */ • Faça um pequeno programa para testar o seu • Explique por que estas funções devem estar no TAD Conta Bancária e não no TAD Banco. TAD © R. O. Prates © R. O. Prates DCC/UFMG DCC/UFMG.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    6 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us