1 aula 5 tipos de dados universidade do vale do rio dos sinos barbosa barbosa@exatas.unisinos.br

Post on 17-Apr-2015

109 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1

Aula 5Aula 5Tipos de DadosTipos de Dados

Universidade do Vale do Rio dos Sinos

< Página da Disciplina >

www.inf.unisinos.br/~barbosawww.inf.unisinos.br/~barbosa

<Endereço do Professor >

barbosa@exatas.unisinos.brbarbosa@exatas.unisinos.br

2

SumárioSumário

1 – Introdução

3

1 – Introdução2 – Tipos de dados primitivos

SumárioSumário

4

1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres

SumárioSumário

5

1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário

SumárioSumário

6

1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array

SumárioSumário

7

1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array6 – Arrays associativos

SumárioSumário

8

1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array6 – Arrays associativos7 – Tipos Registro

SumárioSumário

9

1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array6 – Arrays associativos7 – Tipos Registro8 – Tipos União

SumárioSumário

10

1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array6 – Arrays associativos7 – Tipos Registro8 – Tipos União9 – Tipos Conjunto

SumárioSumário

11

1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array6 – Arrays associativos7 – Tipos Registro8 – Tipos União9 – Tipos Conjunto10 – Tipos Ponteiro (referências)

SumárioSumário

12

IntroduçãoIntrodução

1 – Introdução - Relação Tipos x Espaço do Problema - Descritor (estático ou dinâmico) - Tabela de Símbolos

13

1 – Introdução2 – Tipos de dados primitivos - Tipos básicos - Primitivos + Construtores => Estruturados - Tipos de dados primitivos

Tipos de dados primitivosTipos de dados primitivos

14

1 – Introdução2 – Tipos de dados primitivos - Tipos básicos - Primitivos + Construtores => Estruturados - Tipos de dados primitivos (esquema)

Tipos de dados primitivosTipos de dados primitivos

15

Tipos de dados primitivosTipos de dados primitivos

Primitivos

16

Tipos de dados primitivosTipos de dados primitivos

Primitivos

Numéricos

Booleanos

Caracterere

17

Tipos de dados primitivosTipos de dados primitivos

Primitivos

Numéricos

Booleanos

Caracterere

Inteiros

Ponto-flutuante

Decimais

18

Tipos de dados primitivosTipos de dados primitivos

Primitivos

Numéricos

Booleanos

Caracterere

Inteiros

Ponto-flutuante

Decimais

– Grupo de bits com sinal - Signal magnitude - Complemento de dois

19

Tipos de dados primitivosTipos de dados primitivos

Primitivos

Numéricos

Booleanos

Caracterere

Inteiros

Ponto-flutuante

– Frações e expoentes– Padronizado: IEEE Floating Point Standard 754 (1985)

Decimais

20

Tipos de dados primitivosTipos de dados primitivos

Primitivos

Numéricos

Booleanos

Caracterere

Inteiros

Ponto-flutuante

– Frações e expoentes– Padronizado: IEEE Floating Point Standard 754 (1985)

Tanenbaum (1990)Organização Estruturada de ComputadoresApêndice B (p. 448 – 454)

Decimais

21

Tipos de dados primitivosTipos de dados primitivos

Primitivos

Numéricos

Booleanos

Caracterere

Inteiros

Ponto-flutuante

Decimais

– BCD (Binary Coded Decimal)– Pelo menos 4 bits para um decimal

22

Tipos de dados primitivosTipos de dados primitivos

Primitivos

Numéricos

Booleanos

Caracterere

Inteiros

Ponto-flutuante

Decimais

– Introduzidos por ALGOL 60– Menor célula de memória (normalmente um byte)

23

– ASCII– Unicode (16 bites): Utilizada no Java

Tipos de dados primitivosTipos de dados primitivos

Primitivos

Numéricos

Booleanos

Caracterere

Inteiros

Ponto-flutuante

Decimais

24

1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres - Strings como tipos primitivos?

Tipos Tipos StringsStrings de caracteres de caracteres

25

1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres - Strings como tipos primitivos? - Tamanho da string => Estático => Dinâmico Limitado => Dinâmico

Tipos Tipos StringsStrings de caracteres de caracteres

26

1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres - Strings como tipos primitivos? - Tamanho da string => Estático => Dinâmico Limitado => Dinâmico - Implementação (Pascal e C)

Tipos Tipos StringsStrings de caracteres de caracteres

27

1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário - Enumeração Constantes enumeradas na definição

Tipos ordinais definidos pelo usuárioTipos ordinais definidos pelo usuário

28

1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário - Enumeração Constantes enumeradas na definição - Subfaixa Subseqüência de um ordinal Introduzidos pelo Pascal Herdam todas as operações do pai Implementação: Verificação de faixa

Tipos ordinais definidos pelo usuárioTipos ordinais definidos pelo usuário

29

1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array - Referência a elementos: Nome e Seletor - Seletor estático ou dinâmico - Categorias: Onde e quando é alocado

Tipos Tipos ArrayArray

30

1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array - Referência a elementos: Nome e Seletor - Seletor estático ou dinâmico - Categorias (esquema): Onde e quando é alocado

Tipos Tipos ArrayArray

31

Tipos Tipos Array: CategoriasArray: Categorias

Categorias

Estático

Stack Dinâmico

Heap Dinâmico

Stack Dinâmico Fixo

32

Tipos Tipos Array: CategoriasArray: Categorias

Categorias

Estático

Stack Dinâmico

Heap Dinâmico

Stack Dinâmico FixoCódigo

DadosEstáticos

Heap

Pilha

33

Tipos Tipos Array: CategoriasArray: Categorias

Categorias

Estático

Stack Dinâmico

Heap Dinâmico

Stack Dinâmico FixoCódigo

DadosEstáticos

Heap

Pilha

34

Tipos Tipos Array: CategoriasArray: Categorias

Categorias

Estático

Stack Dinâmico

Heap Dinâmico

Stack Dinâmico FixoCódigo

DadosEstáticos

Heap

Pilha

35

Tipos Tipos Array: CategoriasArray: Categorias

Categorias

Estático

Stack Dinâmico

Heap Dinâmico

Stack Dinâmico FixoCódigo

DadosEstáticos

Heap

Pilha

36

Tipos Tipos Array: CategoriasArray: Categorias

Categorias

Estático

Stack Dinâmico

Heap Dinâmico

Stack Dinâmico FixoCódigo

DadosEstáticos

Heap

Pilha

37

Tipos Tipos Array: CategoriasArray: Categorias

Categorias

Estático

Stack Dinâmico

Heap Dinâmico

Stack Dinâmico FixoCódigo

DadosEstáticos

Heap

Pilha

– Tudo estático– Altamente eficiente

38

Tipos Tipos Array: CategoriasArray: Categorias

Categorias

Estático

Stack Dinâmico

Heap Dinâmico

Stack Dinâmico FixoCódigo

DadosEstáticos

Heap

Pilha

– Faixas de índice estáticas– Alocação durante execução

39

Tipos Tipos Array: CategoriasArray: Categorias

Categorias

Estático

Stack Dinâmico

Heap Dinâmico

Stack Dinâmico FixoCódigo

DadosEstáticos

Heap

Pilha

– Faixas de índices dinâmicas– Não são alteradas durante execução– Alocação durante execução

40

Tipos Tipos Array: CategoriasArray: Categorias

Categorias

Estático

Stack Dinâmico

Heap Dinâmico

Stack Dinâmico FixoCódigo

DadosEstáticos

Heap

Pilha

– Faixas de índices dinâmica– – Alocação durante execução

– Faixas de índices dinâmicas– Podem ser alteradas na execução– Alocação durante execução– Resumo: Tudo dinâmico

41

1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array - Referência a elementos: Nome e Seletor - Seletor estático ou dinâmico - Categorias

Tipos Tipos ArrayArray

42

1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array - Referência a elementos: Nome e Seletor - Seletor estático ou dinâmico - Categorias - Operações com Arrays (array é uma unidade)

Tipos Tipos ArrayArray

43

1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array - Referência a elementos: Nome e Seletor - Seletor estático ou dinâmico - Categorias - Operações com Arrays (array é uma unidade) - Implementação: Alocação: Linha ou Coluna Acesso: Função de acesso

Tipos Tipos ArrayArray

44

1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array6 – Arrays associativos - Hash como suporte à associatividade - Registradores associativos

Arrays associativosArrays associativos

45

1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array6 – Arrays associativos7 – Tipos Registro - Referências: Amplamente Qualificada Elípticas (with do Pascal)

Tipos RegistroTipos Registro

46

1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array6 – Arrays associativos7 – Tipos Registro - Referências: Amplamente Qualificada Elípticas (with do Pascal) - Operações com registros (comparação, atribuição, etc)

Tipos RegistroTipos Registro

47

1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array6 – Arrays associativos7 – Tipos Registro - Referências: Amplamente Qualificada Elípticas (with do Pascal) - Operações com registros (comparação, atribuição, etc) - Implementação: Campos diferentes

Tipos RegistroTipos Registro

48

1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array6 – Arrays associativos7 – Tipos Registro8 – Tipos União - Verificação de tipos é sempre dinâmica (tag) - Registros variantes em Pascal - Verificação: Trocar tag sem trocar variante - Elimina a tipificação forte (Pascal, Fortran, etc)

Tipos UniãoTipos União

49

1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array6 – Arrays associativos7 – Tipos Registro8 – Tipos União9 – Tipos Conjunto - Coleções não ordenadas de tipos ordinais - Modelagem de conjuntos matemáticos - Implementação: Strings de bits indicando elementos

Tipos ConjuntoTipos Conjunto

50

1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array6 – Arrays associativos7 – Tipos Registro8 – Tipos União9 – Tipos Conjunto10 – Tipos Ponteiro (referências)

Tipos PonteiroTipos Ponteiro

51

1 – Introdução2 – Tipos de dados primitivos3 – Tipos Strings de caracteres4 – Tipos ordinais definidos pelo usuário5 – Tipos Array6 – Arrays associativos7 – Tipos Registro8 – Tipos União9 – Tipos Conjunto10 – Tipos Ponteiro (referências)

Tipos PonteiroTipos Ponteiro

52

Tipos PonteiroTipos Ponteiro

- Usos

53

Tipos PonteiroTipos Ponteiro

- UsosPoder de endereçamento direto (assembly)

Gerenciamento de Heap

54

Tipos PonteiroTipos Ponteiro

- UsosPoder de endereçamento direto (assembly)

Gerenciamento de Heap

Código

DadosEstáticos

Heap

Pilha

55

Tipos PonteiroTipos Ponteiro

- Usos- Operações com ponteiros

Poder de endereçamento direto (assembly)

Gerenciamento de Heap

56

Tipos PonteiroTipos Ponteiro

- Usos- Operações com ponteiros- Aritmética de ponteiros

Poder de endereçamento direto (assembly)

Gerenciamento de Heap

57

Tipos PonteiroTipos Ponteiro

- Usos- Operações com ponteiros- Aritmética de ponteiros- Ponteiros oscilantes

Poder de endereçamento direto (assembly)

Gerenciamento de Heap

58

Tipos PonteiroTipos Ponteiro

- Usos- Operações com ponteiros- Aritmética de ponteiros- Ponteiros oscilantes- Vazamento de memória

Poder de endereçamento direto (assembly)

Gerenciamento de Heap

59

Tipos PonteiroTipos Ponteiro

- Usos- Operações com ponteiros- Aritmética de ponteiros- Ponteiros oscilantes- Vazamento de memória- Variável de referência Ponteiro constante inicializado Sem aritmética

Poder de endereçamento direto (assembly)

Gerenciamento de Heap

60

Tipos PonteiroTipos Ponteiro

- Usos- Operações com ponteiros- Aritmética de ponteiros- Ponteiros oscilantes- Vazamento de memória- Variável de referência Ponteiro constante inicializado Sem aritmética- Java: Não possibilita ponteiros oscilante

Poder de endereçamento direto (assembly)

Gerenciamento de Heap

61

Tipos PonteiroTipos Ponteiro

- Usos- Operações com ponteiros- Aritmética de ponteiros- Ponteiros oscilantes- Vazamento de memória- Variável de referência Ponteiro constante inicializado Sem aritmética- Java: Não possibilita ponteiros oscilante- Implementação (2 ou 4 bytes): - Soluções para ponteiros oscilantes - Gerenciamento do Heap (Garbage Collection)

Poder de endereçamento direto (assembly)

Gerenciamento de Heap

62

Exercícios Práticos: Exercícios Práticos: Estudo de caso Turbo PascalEstudo de caso Turbo Pascal

1 – Strings em Pascal

63

Exercícios Práticos: Exercícios Práticos: Estudo de caso Turbo PascalEstudo de caso Turbo Pascal

1 – Strings em Pascal - Tamanho da String?

=> Estático ?

=> Dinâmico Limitado ?

=> Dinâmico ?

64

Exercícios Práticos: Exercícios Práticos: Estudo de caso Turbo PascalEstudo de caso Turbo Pascal

1 – Strings em Pascal - Tamanho da String?

- Como é controlado o tamanho?

=> Estático ?

=> Dinâmico Limitado ?

=> Dinâmico ?

65

Exercícios Práticos: Exercícios Práticos: Estudo de caso Turbo PascalEstudo de caso Turbo Pascal

1 – Strings em Pascal - Tamanho da String?

- Como é controlado o tamanho?

=> Estático ?

=> Dinâmico Limitado ?

=> Dinâmico ?

program teste; var x : string[10]; begin x := ‘teste’; x[0] := 3; write(x); end.

66

Exercícios Práticos: Exercícios Práticos: Estudo de caso Turbo PascalEstudo de caso Turbo Pascal

1 – Strings em Pascal - Tamanho da String?

- Como é controlado o tamanho?

=> Estático ?

=> Dinâmico Limitado ?

=> Dinâmico ?

program teste; var x : string[10]; begin x := ‘teste’; x[0] := ‘3’; write(x); end.

67

Exercícios Práticos: Exercícios Práticos: Estudo de caso Turbo PascalEstudo de caso Turbo Pascal

1 – Strings em Pascal - Tamanho da String?

- Como é controlado o tamanho?

=> Estático ?

=> Dinâmico Limitado ?

=> Dinâmico ?

program teste; var x : string[10]; begin x := ‘teste’; x[0] := chr(3); write(x); end.

68

Exercícios Práticos: Exercícios Práticos: Estudo de caso Turbo PascalEstudo de caso Turbo Pascal

2 – Tamanho máximo de conjuntos (sets) - Qual é o tamanho máximo ?

69

Exercícios Práticos: Exercícios Práticos: Estudo de caso Turbo PascalEstudo de caso Turbo Pascal

2 – Tamanho máximo de conjuntos (sets) - Qual é o tamanho máximo ?

program teste; type dias = (seg,ter,quar,quin,sex,sab,dom); conj_dias = set of dias; conj_bytes = set of bytes; conj_int = set of integer;

70

Exercícios Práticos: Exercícios Práticos: Estudo de caso Turbo PascalEstudo de caso Turbo Pascal

2 – Tamanho máximo de conjuntos (sets) - Qual é o tamanho máximo ?

program teste; type dias = (seg,ter,quar,quin,sex,sab,dom); conj_dias = set of dias; conj_bytes = set of bytes; conj_int = set of integer;

Acima do limite

71

Exercícios Práticos: Exercícios Práticos: Estudo de caso Turbo PascalEstudo de caso Turbo Pascal

2 – Tamanho máximo de conjuntos (sets) - Qual é o tamanho máximo ?

program teste; type dias = (seg,ter,quar,quin,sex,sab,dom); conj_dias = set of dias; conj_bytes = set of bytes;

var var_conj : conj_dias; begin if seg in var_conj then write(‘Esta no conjunto’) else write(‘Não esta no conjunto’);; end.

72

Exercícios Práticos: Exercícios Práticos: Estudo de caso Turbo PascalEstudo de caso Turbo Pascal

2 – Tamanho máximo de conjuntos (sets) - Qual é o tamanho máximo ?

program teste; type dias = (seg,ter,quar,quin,sex,sab,dom); conj_dias = set of dias; conj_bytes = set of bytes;

var var_conj : conj_dias; begin var_conj := [seg]; if seg in var_conj then write(‘Esta no conjunto’) else write(‘Não esta no conjunto’);; end.

73

Exercícios Práticos: Exercícios Práticos: Estudo de caso Turbo PascalEstudo de caso Turbo Pascal

3 – Diretivas de compilação:

74

Exercícios Práticos: Exercícios Práticos: Estudo de caso Turbo PascalEstudo de caso Turbo Pascal

3 – Diretivas de compilação:

- Dimensionamento de memória: Diretiva $M

75

Exercícios Práticos: Exercícios Práticos: Estudo de caso Turbo PascalEstudo de caso Turbo Pascal

3 – Diretivas de compilação:

- Dimensionamento de memória: Diretiva $M

- Verificação de faixas: Diretiva $R

76

Exercícios Práticos: Exercícios Práticos: Estudo de caso Turbo PascalEstudo de caso Turbo Pascal

3 – Diretivas de compilação:

- Dimensionamento de memória: Diretiva $M

- Verificação de faixas: Diretiva $R

- Curto-circuito em expressões booleadas $B

top related