Académique Documents
Professionnel Documents
Culture Documents
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
nome, endereo, valor, tipo, tempo de vida, escopo Usados para verificao de tipos e pelas operaes de alocao e de desalocao
Tipos de Dados
Tipos de Dados Primitivos Tipos Cadeia de Caracteres (Strings) Tipos Ordinais Definidos pelo Usurio Tipos Matriz Matrizes Associativas
Pesquisar
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
Vantagem: faixa simtrica Inconvenincia: 2 representaes para o nmero 0 00000000 (+0) 11111111 (-0)
32 bits = float
+ +2
64 bits = double
57683
+0,57683 10+2
Vantagem:
Preciso
Desvantagens:
Faixa de valores restrita, porque no se permite nenhum expoente
Maior preciso e menor faixa
15
Tabela ASCII
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
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
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
Sintaxe do ndice
FORTRAN, PL/I e Ada usam parnteses
Ex.: A(i)
C, C++, Perl e Fortran no especificam faixa para checagem Pascal, Ada, Java, ML e C# especificam a checagem da faixa
Ex.: Matrizes C e C++ que incluem static so estticas static int buffer[99]; // ndices (0 .. 98)
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;
FORTRAN 77 => at 7 dimenses C, C++, Java => somente uma dimenso, porm elementos podem ser arrays
Ex.: int matriz[5][4]; // array de arrays
Ex. em Fortran:
Utilizao do comando DATA e colocao dos valores entre / ... / na declarao INTEGER LISTA(3) DATA LISTA /0, 5, 5/
C/C++
struct NomeEmpregado { char Primeiro[20]; char Meio[10]; char Ultimo[20]; }; struct Empregado { struct NomeEmpregado NomeE; float taxa_horaria; };
Ada
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
Campo 2
Campo 1