Aula 02 – BCC202 Tipo Abstrato de Dados Túlio Toffolo www. decom. ufop

Slides:



Advertisements
Apresentações semelhantes
TIPOS ABSTRATOS DE DADOS
Advertisements

Funções em C Prof. Fabiano Utiyama.
Aula T-09 – BCC202 Listas (Parte 1) Túlio Toffolo www. decom. ufop
1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza O programa é uma sequência de linhas numeradas Cada linha.
Programação em Java Prof. Maurício Braga
Funções em C.
Programação para Engenharia I
TADS – Tipos Abstratos de Dados
Algoritmos e Programação Linguagens de Programação Teoria Aula 7 (19/05) Universidade Federal do Vale do São.
Algoritmos e Programação Linguagens de Programação Teoria Aula (09/06)
Algoritmos e Estrutura de Dados I
Programação Básica em Java
Aula 1 Tipo Abstrato de Dados
INTRODUÇÃO À PROGRAMAÇÃO
Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo II Confecção de Tabelas.
Linguagem C Funções.
Vetores, Matrizes e Funções
Vetores, Matrizes e Funções
Linguagem C.
Estruturas de Dados Homogêneas Multidimensionais – Matrizes
Matrizes e Funções - Continuação
Slides: Prof. SIMÃO Revisão: Prof. João Fabro
Slides: Prof. João Fabro UTFPR - Curitiba
Paradigmas de Linguagens de Programação Paradima da Programação Orientada à Objetos Professor: Armando Hage Belém-2008.
Aula T04 – BCC202 Análise de Algoritmos (Parte 2) Túlio Toffolo www
PROGRAMA DE COMPUTADOR (software)
APRESENTAÇÃO: GIANCARLO DE GUSMÃO GONÇALVES CURSO DE C AULA 08: Tipos Estruturados.
Universidade do Vale do Rio dos Sinos - São Leopoldo -
JAVA: Conceitos Iniciais
Aula 2 - Conceitos Preliminares para Programar em C
Aula prática - análise contextual
PROGRAMAÇÃO ESTRUTURADA II
PROGRAMAÇÃO ESTRUTURADA II
Linguagem de Programação I Parte II
© 2003 Introdução à programaçãoComputadores e programação I Linguagens de programação Introdução ao C (continuação)
Tipos Abstratos de Dados
Conceitos e implementação em C
Aula 03 – BCC202 Análise de Algoritmos (Parte 1) Túlio Toffolo www
PROGRAMAÇÃO I UNIDADE 4.
Programação II Estruturas de Dados Aula 02 - continuação
Aula T05 – BCC202 Análise de Algoritmos (Parte 3) Túlio Toffolo www
Estruturas de Dados Módulo 3 – Controle de Fluxo
Faculdade de Informática e Tecnologia de Pernambuco ESTRUTURA DE DADOS
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014
F UNÇÕES : PASSAGEM DE PARÂMETROS Aluno:Kaynã Vasconcelos Santos Matéria: Estrutura de dados e algoritmos I Turma: Professor: Danilo Silva dos Santos.
Linguagem de Programação
Linguagem de Programação JAVA
Aula P.02 – BCC202 Revisão sobre Ponteiros Túlio Toffolo
Estruturas de Dados Aula 8: Tipos Abstratos de Dados 30/04/2014.
Implementação Orientada a Objetos – Aula 03
Introdução à Linguagem C
Declarando e Chamando Funções
Joaquim José Hangalo  Podemos entender a memória do computador como um conjunto de células que armazenam informações.  Cada célula.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo VII Variáveis Indexadas Numéricas.
Wellington Felix.  Criada por Brian Kernighan e Denis Ritchie, na década de 1970, para uso em um computador DEC PDP-11 em Unix  C++ é uma extensão da.
Revisão Luis Antonio Tavares
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo III Comandos de Controle.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo IX Subprogramação e Recursividade.
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Ponteiros.
FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Algoritmos e linguagens de programação 1 (aula 08) Prof. Alessandro Bernardo.
INTRODUÇÃO THOBER CORADI DETOFENO, MSC. Aula 01 JOINVILLE 2015 Universidade do Estado de Santa Catarina – CCT/UDESC.
Tipos Compostos Heterogêneos e Tipos Abstratos de Dados
Estrutura de Dados Prof. André Cypriano M. Costa
Computação – Informática Aula N. 05 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Matrizes em C”
Fundamentos de Programação1 Aula N. 01 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Introdução e elementos principais”
Fundamentos de Programação 1 Aula N. 02 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Laços de Repetição em C”
1Unidade 04 – Estruturas de Repetição Algoritmos e Linguagens de Programação Estruturas de Repetição Prof.: Guilherme Baião S. Silva
Fundamentos de Programação 1 Slides 21 Prof.ª Fabiany e Prof. SIMÃO Linguagem C “Lista Encadeada”.
Alocação Dinâmica de Memória e Tipo Abstrato de Dados Cristiano Arbex Valle Vinicius Fernandes dos Santos
Transcrição da apresentação:

Aula 02 – BCC202 Tipo Abstrato de Dados Túlio Toffolo www. decom. ufop Aula 02 – BCC202 Tipo Abstrato de Dados Túlio Toffolo www.decom.ufop.br

Qual a diferença entre um algoritmo e um programa?

Algoritmos e Estruturas de Dados Sequência de ações executáveis para a solução de um determinado tipo de problema Exemplo: “Receita de Bolo” Em geral, algoritmos trabalham sobre Estruturas de Dados Conjunto de dados que representa uma situação real Abstração da realidade Estruturas de Dados e Algoritmos estão intimamente ligados

Representação dos Dados Dados podem estar representados (estruturados) de diferentes maneiras Normalmente, a escolha da representação é determinada pelas operações que serão utilizadas sobre eles Exemplo: números inteiros Representação por palitinhos: II + IIII = IIIIII Boa para pequenos números (operação simples) Representação decimal: 1278 + 321 = 1599 Boa para números maiores (operação complexa) O que e como representar Cada representacao tem limitacoes

Programas Um programa é uma formulação concreta de um algoritmo abstrato, baseado em representações de dados específicas 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

Linguagem C Criada no início da década de 70 para a programação do sistema operacional Unix Uma das linguagens mais utilizadas no mundo, e serviu como base para outras como C++, C#, etc Filosofia: “O programador sabe o que está fazendo” Só se aprende a programar PROGRAMANDO

Exemplo int main() { #include<stdio.h> int v[10], cont, aux, i, soma; double media; cont = 0; aux = LeInteiro(); while(aux >= 0) { v[cont] = aux; cont++; } soma = 0; for(i=0;i<cont;i++) soma += v[i]; media = soma / (double) cont; printf("resultado: %lf\n",media); #include<stdio.h> #define MAX 10 int LeInteiro() { int num; printf(“Digite um numero: "); scanf("%d", &num); printf("\n"); return num; }

Tipos Abstratos de Dados (TADs) Agrupa a estrutura de dados juntamente com as operações que podem ser feitas sobre esses dados O TAD encapsula a estrutura de dados. Os usuários do TAD só tem acesso a algumas operações disponibilizadas sobre esses dados Usuário do TAD x Programador do TAD Usuário só “enxerga” a interface, não a implementação

Tipos Abstratos de Dados (TADs) Dessa forma, o usuário pode abstrair da implementação específica. Qualquer modificação nessa implementação fica restrita ao TAD A escolha de uma representação específica é fortemente influenciada pelas operações a serem executadas

Exemplo: lista de números inteiros Faz Lista Vazia Insere número no começo da lista Remove de uma posição i 20 13 02 30 Implementação por Vetores: void Insere(int x, Lista L) { for(i=0;...) {...} L[0] = x; } Programa usuário do TAD: int main() { Lista L; int x; x = 20; FazListaVazia(L); Insere(x,L); ... } 20 13 02 30 Implementação por Listas Encadeadas void Insere(int x, Lista L) { p = CriaNovaCelula(x); L.primeiro = p; ... }

Implementação de TADs Em linguagens orientadas a objeto (C++, Java) a implementação é feita através de classes Em linguagens estruturadas (C, pascal) a implementação é feita pela definição de tipos juntamente com a implementação de funções Conceitos de C (typedef e structs) Orientação a objetos (classes, etc) vai ser vista em outras disciplinas (POO)

Estruturas (Structs) em C / C++ Uma estrutura é uma coleção de uma ou mais variáveis colocadas juntas sob um único nome para manipulação conveniente Por exemplo, para representar um aluno são necessárias as informações nome, matrícula, conceito Ao invés de criar três variáveis, é possível criar uma única variável contendo três campos. Em C, usa-se a construção struct para representar esse tipo de dado

Estruturas (Structs) em C / C++ #include <stdio.h> #include <string.h> struct Aluno { char nome[20]; int matricula; char conceito; }; main() { struct Aluno al, aux; strcpy(al.nome,“Pedro”); al.matricula = 200712; al.conceito = ‘A’; aux = al; printf(“%s”,aux.nome); } Pedro 200712 A al: Pedro 200712 A aux:

Declaração de Tipos Para simplificar, uma estrutura ou mesmo outros tipos de dados podem ser definidos como um novo tipo Uso da construção typedef typedef struct { string nome; int matricula; char conceito; } TipoAluno; typedef int[10] Vetor; int main() { TipoAluno al; Vetor v; ... }

TADs em C Para implementar um Tipo Abstrato de Dados em C, usa-se a definição de tipos juntamente com a implementação de funções que agem sobre aquele tipo Como boa regra de programação, evita-se acessar o dado diretamente, fazendo o acesso só através das funções Mas, diferentemente de C++ e Java, não há uma forma de proibir o acesso.

TADs em C Uma boa técnica de programação é implementar os TADs em arquivos separados do programa principal Para isso geralmente separa-se a declaração e a implementação do TAD em dois arquivos: NomeDoTAD.h : com a declaração NomeDoTAD.c (ou NomeDoTAD.cpp) : com a implementação O programa ou outros TADs que utilizam o seu TAD devem dar um #include no arquivo .h

Exemplo Implemente um TAD ContaBancaria, com os campos número e saldo onde os clientes podem fazer as seguintes operações: Iniciar uma conta com um número e saldo inicial Depositar um valor Sacar um valor Imprimir o saldo Faça um pequeno programa para testar o seu TAD

ContaBancaria.h // definição do tipo typedef struct { int numero; double saldo; } ContaBancaria; // cabeçalho das funções void Inicializa (ContaBancaria*, int, double); void Deposito (ContaBancaria*, double); void Saque (ContaBancaria*, double); void Imprime (ContaBancaria);

ContaBancaria.cpp #include <stdio.h> #include "Contabancaria.h" void Inicializa(ContaBancaria* pconta, int numero, double saldo) { pconta->numero = numero; pconta->saldo = saldo; } void Deposito (ContaBancaria* pconta, double valor) { pconta->saldo += valor; void Saque (ContaBancaria* pconta, double valor) { pconta->saldo -= valor; void Imprime (ContaBancaria conta) { printf("Numero: %d\n", conta.numero); printf("Saldo: %f\n", conta.saldo);

Main.cpp #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); }

Tipos Abstratos de Dados (TADs) Agrupa a estrutura de dados juntamente com as operações que podem ser feitas sobre esses dados O TAD encapsula a estrutura de dados. Os usuários do TAD só tem acesso a algumas operações disponibilizadas sobre esses dados Usuário do TAD x Programador do TAD Usuário só “enxerga” a interface, não a implementação

Tipos Abstratos de Dados (TADs) Dessa forma, o usuário pode abstrair da implementação específica. Qualquer modificação nessa implementação fica restrita ao TAD A escolha de uma representação específica é fortemente influenciada pelas operações a serem executadas

Exercício Implemente um TAD Número Complexo cada número possui os campos real e imaginário Implemente as operações: Atribui: atribui valores para os campos Imprime: imprime o número da forma “R + Ci” Copia: Copia o valor de um número para outro Soma: Soma dois números complexos EhReal: testa se um número é real Faça um pequeno programa para testar o seu TAD