estrutura de dados (dpadf 0056) - cafw.ufsm.brbruno/disciplinas/estrutura_dados/slides/aula1... ·...

38
Estrutura de Dados (DPADF 0056) Aula 1 Motivação e Revisão Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior de Tecnologia em Sistemas para Internet Prof. Bruno B. Boniati www.cafw.ufsm.br/~bruno

Upload: vumien

Post on 10-Nov-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

Estrutura de Dados (DPADF 0056) Aula 1 – Motivação e Revisão

Universidade Federal de Santa Maria

Colégio Agrícola de Frederico Westphalen

Curso Superior de Tecnologia em Sistemas para Internet

Prof. Bruno B. Boniati – www.cafw.ufsm.br/~bruno

Objetivos

• Analisar e projetar tipos de dados abstratos,

estruturas de dados e suas aplicações: listas

lineares, pilhas, filas, árvores. Compreender

métodos e técnicas de classificação de dados.

Programa

• Unidade 1 – Estrutura de Dados

▫ Tipos primitivos, vetores, matrizes;

▫ Tipos abstratos de dados (TADs);

▫ Estruturas estáticas x estruturas dinâmicas;

▫ Estruturas básicas

Pilhas

Filas;

Filas circulares;

Listas ligadas e duplamente ligadas;

Programa (cont.)

• Unidade 2 – Classificação de Dados

▫ Listas Ordenadas

▫ Métodos de Classificação de Dados

Selection Sort;

Insertion Sort;

Bubble Sort;

Merge Sort;

Quick Sort;

Shell Sort;

Material de Aula

• Livro Texto:

• Página da Disciplina: www.cafw.ufsm.br/~bruno/disciplinas/estrutura_dados

• Recomenda-se a utilização de um caderno e um pen-drive

CELES, W.; CERQUEIRA, R.; RANGEL, J. L.

Introdução a Estruturas de Dados.

1ª. Ed. Rio de Janeiro: Campus, 2004.

Avaliação (individual)

• Avaliação 1 (50% do semestre)

▫ Sistematização 1 (Peso 3)

▫ Trabalho 1 (Peso 2)

• Avaliação 2 (50% do semestre)

▫ Sistematização 2 (Peso 3)

▫ Trabalho 2 (Peso 2)

• Pontuação extra de até 10% da nota (pela resolução e

entrega de exercícios desafio).

Estrutura de Dados (DPADF 0056) Aula 1 – Motivação e Revisão

Universidade Federal de Santa Maria

Colégio Agrícola de Frederico Westphalen

Curso Superior de Tecnologia em Sistemas para a Internet

Prof. Bruno B. Boniati – www.cafw.ufsm.br/~bruno

Estrutura de Dados

• A disciplina de “Estrutura de Dados” estuda as

possíveis alternativas que um programador pode

ter na hora de escolher a estrutura de dados

adequada para determinada necessidade,

considerando um melhor gerenciamento de

memória e o acesso mais rápido à informação;

• Trata do armazenamento e manipulação de

dados em memória principal.

O que é?

Algoritmos

• Sequência de instruções organizadas e

sistematizadas utilizadas para resolver um

problema;

• Um algoritmo não representa, necessariamente,

um programa de computador, e sim os passos

necessários para realizar uma tarefa.

Proj. de Algoritmo x Proj. de Software

• Etapas:

▫ Definição do problema;

▫ Análise de requisitos;

▫ Método de desenvolvimento;

▫ Projeto do algoritmo;

▫ Validação;

▫ Otimização;

▫ Implementação;

Proj. de Algoritmo x Proj. de Software

Problema

Método 1 Algoritmo 1

Programa 1

Programa 2

Programa 3 Algoritmo 2

Algoritmo 3

Método 2

Método 3

Projeto do Algoritmo

Projeto do Software

Programa de Computador

• Programa = Algoritmo + Estruturas de Dados (Nicholas Wirth – Criador da Linguagem Pascal)

• Implementação concreta de algoritmos

abstratos em uma determinada linguagem de

programação com a utilização de estruturas

de dados compatíveis ao problema.

Qual é a diferença?

Eficácia x Eficiência

• Eficaz Consegue resolver um problema, consegue

atingir os objetivos propostos, produz resultados corretos;

• Eficiente Além de alcançar um objetivo, consegue

fazê-lo da melhor forma possível (gastando o menor

número de recursos, no menor tempo, etc.)

Sandro alcançou a margem de vendas proposta para o mês. Marta

também, porém gastou 20% a menos de gasolina. Ambos foram

eficazes pois atingiram a quota, mas Marta foi mais eficiente.

Estuda o armazenamento e a manipulação de dados na memória principal

Estruturas de Dados

• Uma estrutura de dados retrata as relações

lógicas existente entre os dados;

Forma de organização dada às informações

de forma a permitir o acesso a elas por

um algoritmo durante as operações de

manipulação que ocorrem na resolução

de um problema.

Estruturas de Dados (cont.)

• O estudo de estrutura de dados é

necessariamente orientado para uma aplicação,

ou seja é um estudo bastante prático;

▫ Programadores precisam de conhecimento profundo

de técnicas de programação;

▫ Usuários precisam reconhecer requisitos dos

softwares nas áreas onde atuam e um conhecimento

adequado de programação lhes permite tirar proveito

do acesso configurável que as aplicações oferecem.

Estruturas de Dados (cont.)

• Ao escolher uma estrutura de dados devemos

considerar alguns elementos importantes:

▫ De que forma essa estrutura de dados será

utilizada?

▫ Que métodos de manipulação essas estruturas nos

oferecem?

▫ Que tipo de alocação de memória ela utiliza?

Tipos de Dados x Estruturas de Dados

• Tipo de dado = conjunto de valores (domínio) que uma

variável pode assumir e conjunto de operações que

podem ser aplicadas sobre ele.

▫ Tipos de dados básicos (tipos primitivos) Inteiro, caractere, decimal, booleano, etc.

Não é possível decompor um tipo primitivo em partes menores

(eles são indivisíveis);

▫ Tipos de dados estruturados Vetores, matrizes, registros ...

Uma variável que pode agregar mais de um valor;

Agregados de valores de tipos primitivos.

Tipos de Dados x Estruturas de Dados

• Tipos Abstratos de Dados

▫ Especificam conceitualmente os dados (sua

organização física e lógica);

▫ Definem operações para manipulação da estrutura;

▫ Geralmente não são fornecidos diretamente pela

linguagem de programação;

▫ Exemplos: Ponto, Data, Fila, Lista, Árvore, etc.

Compilação, Variáveis, Constantes, Subrotinas ...

Hello World

#include <stdio.h>

int main(int argc, char **argv[])

{

printf(“Hello World!!");

return 0;

}

Linguagem de Programação C

Etapas da compilação

• Pré-processamento: pequenas alterações no código (substituição

de símbolos, inclusão de arquivos externos, dependências de

plataforma, etc.);

• Verificação sintática: procura por eventuais erros nos códigos

(parêntesis não fechados, falta de ponto-e-vírgula no final da

instrução, etc.);

• Compilação: transforma o código pré-processado em um

programa-objeto, que está em linguagem de máquina porém não

pronto para ser executado;

• Linkedição (linking, em inglês): agrupa os programas-objeto e

bibliotecas necessárias em um único executável;

Variável e Tipo de Dados • Variável

▫ “Espaços” de memória rotulados para guardar uma

informação de determinado tipo;

• Tipo de Dado

▫ Conjunto de valores que podem ser atribuídos a uma variável.

float area; int lado; lado = 5; area = lado * lado;

char opcao = ‘a’; M e m ó r i a

area lado

25 5 a

opcao

Endereço #2048 #2049 #2050 #2051 #2052 #2053 #2054

Identificador opcao area lado

Valor a 25 5

Tipo de Dados (em linguagem C)

Tipo Tam. Valores válidos

char 1 byte -128 a 127

unsigned char 1 byte 0 a 255

short int 2 bytes -32.768 a 32.767

unsigned short int 2 bytes 0 a 65.535

long int 4 bytes -2.147.483.648 a 2.147.483.647

unsigned long int 4 bytes 0 a 4.294.967.295

float 4 bytes 10-38 a 1038

double 8 bytes 10-308 a 10308

Constantes

• Símbolos definidos no código que são

substituídos na etapa de pré-processamento;

printf(formato, lista de constantes/variáveis/expressões);

Função para saída de valores segundo um determinado formato.

Ex.: printf(“%d %f\n”, 33, 5.3);

printf(“Inteiro = %d Real = %f\n”, 33, 5.3);

scanf(formato, lista de endereços)

Função para capturar e armazenar valores fornecidos via teclado.

Ex.: scanf(“%d”,&n);

scanf(“%d:%d”,&h,&m);

Entrada e Saída

Entrada e Saída (cont.)

• Caracteres especiais:

Código Significado

\n Quebra de linha

\r Retrocede o cursor para o início da linha

\t Insere uma tabulação

\b Retrocede o cursos uma posição (backspace)

\" Escreve o caractere que representa aspas

\\ Escreve a barra invertida

Entrada e Saída (cont.)

• Códigos de Formatação Código Significado

%c Caractere individual

%d ou %i Inteiros com sinais (base decimal)

%e ou %E Notação científica (com “e” minúsculo ou “E” maiúsculo)

%f Ponto flutuante

%g usa %f ou %e, o que for mais curto graficamente

%G usa %f ou %E, o que for mais curto graficamente

%o imprime um número em base octal

%s Cadeia de caracteres

%u Inteiros sem o sinal

%x Imprime um número na base hexadecimal (letras em minúsculas)

%X Imprime um número na base hexadecimal (letras em MAIÚSCULAS)

%p Endereço de memória

Subrotinas: Procedimentos

• Desvios no código da aplicação para códigos de

subrotinas sem um valor de retorno; • Em linguagem C, a palavra void indica que a subrotina não possui

valor de retorno e portanto é considerada um procedimento;

• Chamadas a uma subrotina com valor de retorno; • Em linguagem C, a tipo de retorno da função é colocando antes da

sua declaração e a palavra return é usada para retornar o valor;

Subrotinas: Funções

Variável global: ▫ Pode ser acessada em qualquer parte do programa.

Variável local: ▫ Somente pode ser acessada dentro do bloco que a criou.

Variáveis Locais x Variáveis Globais

A variável local

cont não pode

ser acessada

fora do bloco

onde ela foi

criada

Global

Local Local

Vetores e Matrizes

• Vetor

▫ Variável multivalorada unidimensional

• Matriz

▫ Variável multivalorada multidimensional

int v[10];

v[5] = 8;

int m[5][5];

m[0][3] = 8;

int c[5][5][5];

v[1][4][3] = 8;

Exercícios para fixação

• O que significa a passagem de parâmetros no

contexto de uma subrotina (explique qual a

utilidade de se passar um parâmetro para uma

subrotina seja ela procedimento ou função).

• Qual a diferença de passar um parâmetro por

valor ou passar um parâmetro por referência?

Passagem de parâmetros

• (POSCOMP 2004) Dado o trecho de programa abaixo:

onde T1 e T2 indicam mecanismos de passagem de

parâmetros (por valor ou por referência).

A tabela abaixo deve ser preenchida com os valores a

serem impressos pelo programa para cada

combinação de T1 e T2:

O que é um teste de mesa?

http://www.google.com.br/search?q=teste+de+mesa

Faça um teste de mesa para ...

programa zux;

variaveis a,b : inteiro;

procedimento P (T1 x : inteiro; T2 y : inteiro);

variaveis z : inteiro;

inicio

z:=x+a ;

x:=y+1;

y:=y+z;

fim;

inicio_programa

a := 2;

b := 3;

P (a,b);

escreva(a,b);

fim_programa.