Vous êtes sur la page 1sur 9

Tipos de Dados

Introduo
Um tipo de dado define uma coleo de dados e um conjunto de operaes prdefinidas sobre esses dados Um descritor o conjunto dos atributos de uma varivel

Fac. de Informtica de Presidente Prudente Disciplina de Linguagens de Programao I


Cssia Alves Perego
Material gentilmente cedido pela professora Ana Paula Fabrin

nome, endereo, valor, tipo, tempo de vida, escopo Usados para verificao de tipos e pelas operaes de alocao e de desalocao

Uma questo fundamental de projeto:


2011

Quais operaes so fornecidas para variveis do tipo e como elas so especificadas?

Tipos de Dados
Tipos de Dados Primitivos Tipos Cadeia de Caracteres (Strings) Tipos Ordinais Definidos pelo Usurio Tipos Matriz Matrizes Associativas
Pesquisar

Tipos de Dados Primitivos


Tipos de dados no-definidos em termos de outros tipos so chamados tipos de dados primitivos Praticamente todas as linguagens de programao oferecem um conjunto de tipos de dados primitivos So usados, juntamente com um ou mais construtores de tipos, para fornecer os tipos estruturados Tipos numricos (inteiros, ponto-flutuante, decimais), booleano e caractere

Tipos Registro Tipos Unio


Pesquisar

Tipos Conjunto Tipos Ponteiro

Tipos de Dados Primitivos Inteiros


Representado em um computador por uma string de bits, com um dos bits, tipicamente da extrema esquerda, representando o sinal So suportados diretamente pelo hardware Existem vrios tipos de nmeros inteiros numa linguagem: inteiro com/sem sinal, inteiro base decimal, inteiro base binria, preciso simples, etc.

Tipos de Dados Primitivos Inteiros


Um inteiro pode ser armazenado de trs formas:
Notao de sinal-magnitude (A)
Problema da representao est na necessidade de dois mdulos de hardware diferentes para realizar a soma e a subtrao Bit da extrema esquerda representa o sinal e os demais o valor absoluto (magnitude)
Vantagem: faixa simtrica Inconvenincia: 2 representaes para o nmero 0 00000000 (+0) 10000000 (-0)

0=+/1=+10 = 0 0001010 -10 = 1 0001010 Faixa de Representao -2N-1+1<=X<=+2N-1-1, N=bits 8 bits: -127<=X<=+127 28 = 256 representaes e 255 valores

Tipos de Dados Primitivos Inteiros


Um inteiro pode ser armazenado de trs formas:
Notao de sinal-magnitude (A)
Problema da representao est na necessidade de dois mdulos Inconvenincia: de hardware diferentes para realizar a 2 representaes para o nmero 0 soma e a subtrao
0=+/1=Bit da extrema esquerda representa o sinal e os +10 = 0 0001010 Isto acaba gerando um demais o valor absoluto (magnitude) problema, pois -10 = 1 0001010 constantemente fazemos verificaes em Vantagem: faixa simtrica Faixa de Representao programas seInconvenincia: um determinado valor igual -2N-1+1<=X<=+2N-1-1, N=bits a zero. Nesta 2 representaessomos nmero 0 representao para o obrigados a realizar dois testes 00000000 (+0) 8 bits: -127<=X<=+127 10000000 (-0) 28 = 256 representaes e 255 valores

Tipos de Dados Primitivos Inteiros


Um inteiro pode ser armazenado de trs formas:
Complemento de um (B)
O valor negativo de um nmero inteiro armazenado como o complemento lgico de seu valor absoluto Utilizado ainda em alguns computadores

Tipos de Dados Primitivos Inteiros


Um inteiro pode ser armazenado de trs formas:
Complemento de um (B)
0=+ / 1=+10 = 0 0001010 -10 = 1 1110101 Faixa de Representao -2N-1+1<=X<=+2N-1-1, N=bits 8 bits: -127<=X<=+127 28 = 256 representaes e 255 valores

Tipos de Dados Primitivos Inteiros


Um inteiro pode ser armazenado de trs formas:
Complemento de dois (C)
Conveniente para a adio e subtrao O nmero negativo formado tomando-se o complementos lgico da verso positiva e adicionando-se um Utilizado pela maioria dos computadores

Vantagem: faixa simtrica Inconvenincia: 2 representaes para o nmero 0 00000000 (+0) 11111111 (-0)

Tipos de Dados Primitivos Inteiros


Um inteiro pode ser armazenado de trs formas:
Complemento de dois (C)
0=+/1=Faixa de Representao +10 = 0 0001010 -2N-1<=X<=+2N-1-1, N=bits -10 = 1 passo (complemento) 8 bits: -256<=X<=+256 1 1110101 28 = 256 representaes e 256 2 passo (adio 1) valores 11110101 1 -----------11110110 (se houver, o ltimo carry desprezado)

Tipos de Dados Primitivos Inteiros


Um inteiro pode ser armazenado de trs formas:
Complemento de dois (C)
Inconvenincia: faixa assimtrica Vantagem: Mesmas regras para soma e subtrao nica representao para o nmero 0 00000000 (+0) 11111111 1 -------------1 00000000 (carry desprezado) (-0)

Tipos de Dados Primitivos Inteiros


Um inteiro pode ser armazenado de trs formas:
Complemento de dois (C)
Complemento de um (B) Soma: 00001010 (10) 11111100 (-3) -----------1 00000110 1 (soma carry) --------------00000111 (7)

Tipos de Dados Primitivos Ponto-flutuante


Modelam os nmeros reais, mas so aproximaes So representados como fraes e expoentes (notao cientfica) Linguagens para fins cientficos suportam pelo menos dois tipos de ponto-flutuante (float e double)

Tipos de Dados Primitivos Ponto-flutuante

Tipos de Dados Primitivos Ponto-flutuante


57,683 = 0,57683 102 0,M B e (B = base; e = expoente; M = mantissa) B = 10; e = 2; M = 57683

32 bits = float

+ +2
64 bits = double

57683

IEEE Floating-Point Standard 754

+0,57683 10+2

Tipos de Dados Primitivos Decimais


Armazenam um nmero fixo de dgitos decimais (codificado na base binria) Para aplicaes comerciais (moeda)
Essencial para COBOL C# oferece um tipo de dado decimal

Tipos de Dados Primitivos Decimais


BCD (Binary Coded Decimal)
1 dgito por byte (unpacked BCD) 2 dgitos por byte (packed BCD)
Decimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Binrio Puro 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 BCD 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 0001 0000 0001 0001 0001 0010 0001 0011 0001 0100 0001 0101

Vantagem:
Preciso

Desvantagens:
Faixa de valores restrita, porque no se permite nenhum expoente
Maior preciso e menor faixa

Grande gasto de memria


0110 0010 1000.1001 0101 0100 = 628,954

15

Tipos de Dados Primitivos Decimais


Menos eficiente que o cdigo binrio puro Usam-se mais bits para representar um dado nmero decimal em BCD que em notao binria pura
83 = 1000 0011 em BCD (8 bits) Com quatro bits de informao binria, possvel representar um total de 24 = 16 estados diferentes ou os nmeros decimais equivalentes desde o 0 at o 15 No sistema BCD, seis destes estados (10-15) so desperdiados

Tipos de Dados Primitivos Booleano


S permite dois valores: verdadeiro ou falso (true or false) Pode ser implementado num bit, mas geralmente implementado num byte
Um bit difcil de ser acessado com eficincia Byte = menor clula de memria eficientemente enderevel

Tipos de Dados Primitivos Caractere


Armazenados como codificaes numricas O cdigo mais usado: ASCII
Codifica 128 caracteres diferentes (27 = 128; 7 bits + 1 paridade; 0..127) ASCII estendida: 8 bits = 28 = 256 caracteres (0..255)

Tipos de Dados Primitivos Caractere

Tabela ASCII

Globalizao: codificao de 16 bits: Unicode


Inclui caracteres da maioria das linguagens naturais Usado em Java C# e JavaScript tambm suportam Unicode

Tipos de Dados Cadeia de Caracteres (Strings)


Valores so seqncias de caracteres Consideraes de Projeto:
Tipo primitivo ou tipo especial de seqncia? Dimenso esttica ou dinmica?

Tipos de Dados Cadeia de Caracteres (Strings)


Consideraes de Projeto:
Tipo primitivo ou tipo especial de seqncia?
Seqncia:
Pascal C, C++ (string.h) Ada

Operaes:
Atribuio e cpia Comparao (=, >, <, etc.) Concatenao (juno ao fim da string) Referncia a substring Correspondncia de padro (ASCII, UNICODE,...)

Primitivo:
SNOBOL4 Java (classe String) valores so strings constantes

Tipos de Dados Cadeia de Caracteres (Strings)


Consideraes de Projeto:
Dimenso esttica ou dinmica?
Esttico
COBOL, FORTRAN 90, Ada So sempre cheias Os caracteres vazios so preenchidos com espaos

Tipos de Dados Cadeia de Caracteres (Strings)


Implementao
Tamanho esttico
Descritor definido e utilizado em tempo de compilao Esttico nome tamanho endereo (1 caractere)

Tamanho dinmico limitado


Podem exigir um descritor em tempo de execuo para armazenar tanto o tamanho mximo como o tamanho atual
C e C++ no utilizam, pois: Final da string marcado com um caractere nulo Tamanho mximo no necessrio uma vez que no h verificao quanto faixa (ndices)

Tamanho dinmico limitado (com mximo): C e C++


Um caractere especial usado para indicar o final da cadeia, em vez de manter seu tamanho

Dinmico Limitado nome tamanho mximo tamanho atual endereo (1 caractere)

Dinmico (sem mximo): SNOBOL4, Perl, JavaScript

Tipos de Dados Cadeia de Caracteres (Strings)


Implementao
Tamanho dinmico
precisa de um descritor em tempo de execuo
Somente o tamanho atual precisa ser armazenado

Tipos de Dados
Tipos Ordinais Definidos pelo Usurio
Um tipo ordinal aquele cuja faixa de valores possveis pode ser associada ao conjunto dos nmeros inteiros positivos Em muitas linguagens os programadores podem definir os seguintes tipos ordinais:
Tipo Enumerado Tipo Subfaixa

Reserva/liberao de memria o grande problema da implementao


O tamanho da string pode crescer ou reduzir Armazenadas como lista encadeada, por exemplo

Tipos de Dados
Tipos Ordinais Definidos pelo Usurio
Tipos enumerados
Tipo onde o programador enumera todos os possveis valores atravs de constantes simblicas Exemplo em Pascal:
type cor = (vermelho, azul, branco, preto);

Tipos de Dados
Tipos Ordinais Definidos pelo Usurio
Tipos enumerados
Exemplos do Pascal:
Constantes no podem ser reutilizadas Podem ser usadas em subscritos de arrays, como varivel de ciclo (for e case), podem ser comparadas
type tipocor = (Vermelho, Azul, Verde, Amarelo); Var cor : tipocor; ... cor := Azul; if (cor > Vermelho) ...

Exemplo em C e C++:
enum cor {vermelho, azul, branco, preto};

Consideraes de Projeto:
Pode uma constante simblica pertencer a mais de uma definio de tipo?

Tipos de Dados
Tipos Ordinais Definidos pelo Usurio
Tipos enumerados
Avaliao:
Melhora a legibilidade, uma vez que, no necessrio modelar cor como um nmero inteiro Melhora a confiabilidade, dado que o compilador pode verificar a validade das operaes e amplitude dos valores em tempo de compilao

Tipos de Dados
Tipos Ordinais Definidos pelo Usurio
Tipos Subfaixa (Subrange)
uma subseqncia de um ordinal Exemplo: 12..18 uma subfaixa dos inteiros O tipo subfaixa foi introduzido pelo Pascal, e posteriormente, foi includo tambm em Ada e Modula-2 Utilizados, mais comumente, para os ndices de arrays e variveis de lao Exemplo Pascal: Type indice = 1..100;

Tipos de Dados
Tipos Ordinais Definidos pelo Usurio
Tipos Subfaixa (Subrange)
Avaliao
Legibilidade
Informam ao leitor que as variveis podem armazenar apenas uma faixa de valores

Tipos de Dados
Tipos Ordinais Definidos pelo Usurio
Implementao
Tipos enumerados geralmente so implementados associando nmeros inteiros a cada constante simblica Subfaixas so implementadas da mesma forma que os tipos pais

Confiabilidade
A atribuio de um valor a uma varivel fora de sua faixa pode ser detectado pelo compilador como sendo um erro

Tipos de Dados Tipos Matriz (Array)


Uma matriz um agregado homogneo de dados cujo elemento individual identificado por sua posio no agregado em relao ao primeiro

Tipos de Dados Tipos Matriz (Array)


Consideraes de Projeto:
Que tipo correto para ndices? Haver verificao de ndices? Quando as amplitudes (faixa) dos ndices so vinculadas? Quando reservar espao? Qual o nmero mximo de elementos? Seqncias podem ser inicializadas? Arrays podem ser divididos em subfaixas (fatias)?

Tipos de Dados Tipos Matriz (Array)


ndices (ou subscritos) fazem mapeamento para elementos
nome_do_array(lista_de_valores_ndice) elemento

Tipos de Dados Tipos Matriz (Array)


Tipos dos ndices
FORTRAN, C: apenas inteiros Pascal: qualquer tipo ordinrio (inteiro, boolean, char, enumerao) Ada: inteiro ou enumerao (incluindo boolean e char) Java: apenas inteiros

Sintaxe do ndice
FORTRAN, PL/I e Ada usam parnteses
Ex.: A(i)

Limite inferior dos ndices:


C/C++ e Java = 0 Fortran, Basic = 1 Outras linguagens = deve ser especificado

Maioria das outras linguagens usam colchetes


ex.:A[i]

C, C++, Perl e Fortran no especificam faixa para checagem Pascal, Ada, Java, ML e C# especificam a checagem da faixa

Tipos de Dados Tipos Matriz (Array)


Categorias de Arrays
Os arrays podem ser classificados segundo o tipo de vinculao de ndices (subscritos) e armazenamento:
Array Esttico Array Pilha-dinmico Fixo Array Pilha-dinmico Array Monte-dinmico pilha=stack; monte=heap

Tipos de Dados Tipos Matriz (Array)


Categorias de Arrays
Array Esttico
As faixas de subscrito esto estaticamente vinculadas e a alocao de armazenamento esttica (feita antes da execuo) Vantagem: eficincia (no h reserva nem liberao de memria) Ex. em FORTRAN 77:
INTEGER INTLISTA(99) // ndices (1 .. 99)

Ex.: Matrizes C e C++ que incluem static so estticas static int buffer[99]; // ndices (0 .. 98)

Tipos de Dados Tipos Matriz (Array)


Categorias de Arrays
Array Pilha-dinmico Fixo
Faixas de subscrito so estaticamente vinculadas, mas a alocao feita no momento da declarao durante a execuo Vantagem: eficincia de espao Ex.: matrizes C e C++ sem static

Tipos de Dados Tipos Matriz (Array)


Categorias de Arrays
Array Pilha-dinmico
Faixas de subscritos esto dinamicamente vinculadas e a alocao de armazenamento dinmica (feita durante a execuo)
Dimenso e armazenamento so dinmicos, porm assim que forem definidos so fixos durante o tempo de vida do array

int vet[10];

Vantagem: flexibilidade (o tamanho de uma matriz no precisa ser conhecido antes da sua utilizao) Ex. em Ada: (declare blocks)
declare STUFF : array (1..N) of FLOAT; begin ... end;

Tipos de Dados Tipos Matriz (Array)


Categorias de Arrays
Array Monte-dinmico
A vinculao das faixas dos ndices e a alocao so dinmicas e podem mudar vrias vezes Vantagem: flexibilidade (matrizes podem crescer ou encolher durante a execuo do programa) Perl e JavaScript suportam matrizes dinmicas C e C++ tambm oferecem matrizes dinmicas (malloc/new e free/delete)

Tipos de Dados Tipos Matriz (Array)


Nmero de ndices:
FORTRAN I => 1 a 3 dimenses
Ex.: buffer(5)(3)(1)

FORTRAN 77 => at 7 dimenses C, C++, Java => somente uma dimenso, porm elementos podem ser arrays
Ex.: int matriz[5][4]; // array de arrays

Outras Linguagens => sem limite

Tipos de Dados Tipos Matriz (Array)


Algumas linguagens permitem a inicializao no momento em que o armazenamento alocado
Exemplos: C, C++, Java
int list [] = {4, 5, 7, 83}

Tipos de Dados Tipos Matriz (Array)


Implementao
Matriz multidimensionais
Duas maneiras comumente usadas
Ordem da linha maior (por linhas) Usado na maioria das linguagens Ordem da coluna maior (por colunas) Usando em Fortran Ordem da linha maior (por linhas) 3,4,7,6,2,5,1,3,8 Ordem da coluna maior (por colunas) 3,6,1,4,2,3,7,5,8

Ex. em Fortran:
Utilizao do comando DATA e colocao dos valores entre / ... / na declarao INTEGER LISTA(3) DATA LISTA /0, 5, 5/

Ex. em Pascal e Modula-2


No permitem inicializao de arrays

Tipos de Dados Tipos Registro


Um registro um agregado possivelmente heterogneo de elementos de dados Cada elemento individual identificado por seu nome Questes de projeto
Qual a forma sinttica das referncias a campos? So permitidas referncias elpticas?

Tipos de Dados Tipos Registro


COBOL

C/C++
struct NomeEmpregado { char Primeiro[20]; char Meio[10]; char Ultimo[20]; }; struct Empregado { struct NomeEmpregado NomeE; float taxa_horaria; };

Ada

Tipos de Dados Tipos Registro


Referncias a Campos do Registro
A maioria das linguagens usam um ponto na notao
empregado.nome_empregado.primeiro
Referncia amplamente qualificada

Tipos de Dados Tipos Registro


Implementao
Os campos so armazenados em localizaes de memria adjacentes Entretanto, uma vez que os campos possuem tamanhos diferentes seu mtodo de acesso diferente dos arrays Assim, necessrio armazenar o endereo de deslocamento de cada campo em relao ao seu incio

Referncias elpticas (referncia parcialmente qualificada)


with empregado do begin nome := Bob; idade := 42; salario := 23750.0; end; (Pascal)

empregado.nome := Bob; empregado.idade := 42; empregado.salario := 23750.0;

Registro Nome Tipo Deslocamento ... Nome Tipo Deslocamento Endereo

Tipos de Dados Tipos Conjunto


Um conjunto um tipo de dados cujas variveis podem armazenar uma coleo no ordenada de valores distintos de algum tipo ordinal, designado de tipo bsico Consideraes de projeto:
Qual o mximo nmero de elementos? Quais as operaes disponveis sobre o conjunto?

Tipos de Dados Tipos Conjunto


Conjuntos no Pascal
Sem tamanho mximo na definio da linguagem; porm, implementaes geralmente impe um limite Operaes sobre conjuntos:
unio '+', interseco '*', diferena '-', comparao '=, superconjunto '>=', subconjunto '<=', pertinncia 'in

Exemplo
type cores = (azul, verde, amarelo, branco); conjcores = set of cores; var c1, c2 : conjcores; if azul in c1 then if ch in ['a', 'e', 'i', 'o', 'u'] then

Tipos de Dados Tipos Ponteiro


Um tipo ponteiro aquele em que as variveis tm uma faixa de valores que consistem em endereos de memria e um valor especial, nil (ou null) Principais utilidades:
Flexibilidade de endereamento Reserva dinmica de memria int k = 2;

int *ptr; ptr = &k; *ptr = 7; ( k = 7;)

Campo 2

Campo 1

Vous aimerez peut-être aussi