PARADIGMAS DE LINGUAGENS
TIPOS DE DADOS
Prof. Thiago Pereira Rique
[email protected]
http://thiagorique.wordpress.com/
AGENDA
Introdução
 Tipos de dados primitivos
 Tipos String de caracteres
 Tipos ordinais definidos pelo usuário
 Tipos matriz (array)
 Tipos registro
 Tipos ponteiro

INTRODUÇÃO


Os programas de computador
resultados manipulando dados.
Que tipos de dados podemos ter?
produzem
TIPOS DE DADOS PRIMITIVOS


Tipos de dados primitivos são aqueles não
definidos em termos de outros tipos.
Tipos numéricos
Inteiro
 Ponto-flutuante
 Decimais


Tipos booleanos

Tipos caractere
TIPOS DE DADOS PRIMITIVOS

Tipos numéricos – Inteiro:

Muitos computadores suportam diversos tamanhos
de inteiros.

Linguagem de programação Ada

SHORT INTEGER, INTEGER, LONG INTEGER

Representado por uma cadeia de bits (bit de sinal na
extrema esquerda)

Notação complemento de 2 para números negativos.
TIPOS DE DADOS PRIMITIVOS

Tipos numéricos – Ponto-flutuante (ou vírgulaflutuante):

Modelam os números reais (aproximação – π:3,14...)

Os valores de ponto-flutuante são representados como
frações e como expoentes (notação científica)
TIPOS DE DADOS PRIMITIVOS

Tipos numéricos – Ponto-flutuante (ou vírgulaflutuante):

São armazenados na forma normalizada.

A maioria das linguagens inclui dois tipos de pontoflutuante: float e double.
TIPOS DE DADOS PRIMITIVOS

Tipos numéricos – Decimais:

São armazenados usando códigos binários para os
dígitos decimais.

Representação BCD (Binary-Coded Decimal)

São necessários pelo menos 4 bits para codificar um
dígito decimal.

123 (decimal) = 000100100011 (BCD)
TIPOS DE DADOS PRIMITIVOS

Tipos booleanos:

Sua faixa de valores tem somente dois elementos.

Uma exceção popular é o C, no qual expressões
numéricas podem ser usadas como condicionais.
TIPOS DE DADOS PRIMITIVOS

Tipos caractere:

Os dados de caracteres são armazenados nos
computadores como codificações numéricas;

A codificação mais comumente usada é a ASCII
(American
Standard
Code
for
Information
Interchange)

Codificação Unicode (Java)
TIPOS STRING DE CARACTERES


Um tipo cadeia de caracteres (String) é aquele
cujos valores consistem em sequências de
caracteres.
Os dados das cadeias normalmente são
armazenados em vetores de caracteres únicos e
referenciados como tal na linguagem (Pascal, C,
C++, Ada).
TIPOS STRING DE CARACTERES

Ada

STRING é um
CHARACTER.
tipo
formado
por
elementos

Referência a subcadeias, concatenação, operadores
relacionais e atribuição são operações oferecidas para
os tipos STRING.

NAME1(2:4)

NAME1 := NAME1 & NAME2;
TIPOS STRING DE CARACTERES

C e C++

Vetores char para armazenar cadeias de caracteres.

Biblioteca padrão (string.h)

As cadeias de caracteres são finalizadas com um
caractere especial nulo (zero).

Ex: char *str = “apples”;

Funções de biblioteca: strcpy, strcat, strcmp, strlen.
TIPOS STRING DE CARACTERES

Opções de tamanho da cadeia

Cadeia de tamanho estático: FORTRAN 90,
COBOL, Pascal e Ada.

Exemplo
de
instrução
FORTRAN
CHARACTER(LEN=15) NAME1, NAME2
90:
TIPOS STRING DE CARACTERES

Opções de tamanho da cadeia

Cadeias de tamanho dinâmico limitado: C e C++

Cadeias de tamanho
JavaScript e Perl.
dinâmico:
SNOBOL4,
TIPOS ORDINAIS DEFINIDOS PELO USUÁRIO



Tipo ordinal: faixa de valores associada aos
inteiros positivos.
Pascal e Ada: inteiro, caractere e booleano como
tipos ordinais primitivos.
Em muitas linguagens, os usuários podem definir
dois tipos de ordinais:


Enumerações
Subfaixa
TIPOS ORDINAIS DEFINIDOS PELO USUÁRIO

Tipos Enumeração

São aqueles em que todos os valores possíveis são
enumerados na definição.

Exemplo Ada: type DIAS is (Seg, Ter, Qua, Qui, Sex,
Sab, Dom)
TIPOS ORDINAIS DEFINIDOS PELO USUÁRIO

Tipos Enumeração

Dependendo de questões de projeto, duas variáveis do
tipo enumeração e/ou literais do mesmo tipo podem
ser comparadas com os operadores relacionais.

Ex:
type tipocor = (vermelho, azul, verde, amarelo);
var cor: tipocor;
...
cor:= azul;
if cor > vermelho...
TIPOS ORDINAIS DEFINIDOS PELO USUÁRIO

Tipos Subfaixa

Um tipo subfaixa (subrange) é uma subsequencia de
um ordinal.

Ex: 12...14 (subfaixa de inteiro)

Na Ada, as subfaixas são incluídas na classe de tipos,
chamada subtipos.

Ex: subtype DIASSEMANA is DIAS range Seg..Sex;
TIPOS ORDINAIS DEFINIDOS PELO USUÁRIO

Tipos Subfaixa

Todas as operações para o tipo pai também são
definidas para o subtipo, exceto atribuição fora da
faixa de valores.

Ex:
DIA1:DIAS;
DIA2:DIASSEMANA;
...
DIA2:=DIA1;

A atribuição é válida, a menos que o valor de DIA1
seja Sab ou Dom.
TIPOS MATRIZ (ARRAY)

Uma matriz é um agregado homogêneo de
elementos de dados

Cada elemento é identificado por sua posição em
relação ao primeiro.

Os elementos são de algum tipo previamente
definido.
TIPOS MATRIZ (ARRAY)

Matrizes e índices

Elementos são referenciados através do nome do
agregado mais subscritos (ou índices).

Se todos os índices em uma referência forem
constantes, o seletor será estático; caso contrário,
será dinâmico.

Mapeamento finito

nome_da_matriz(lista_de_valores_indice) → elemento
TIPOS MATRIZ (ARRAY)

Matrizes e índices

Sintaxe de referência mais ou menos universal: ao
nome da matriz segue-se a lista de índices entre
parênteses ou colchetes.

Problema com parênteses (também usados em listas
de parâmetros)

Exemplo FORTRAN:
SOMA = SOMA + B(I)
 Subscrito de matriz ou parâmetro de subprograma?

TIPOS MATRIZ (ARRAY)

Matrizes e índices

Dois tipos distintos são envolvidos em tipo de matriz:
o do elemento e o do subscrito.

As primeiras linguagens de programação não
especificavam que as faixas de subscrito deveriam ser
implicitamente verificadas.

O C, o C++ e o FORTRAN não especificam a
verificação de faixa de subscritos.

O Pascal, a Ada e o Java especificam.
TIPOS MATRIZ (ARRAY)

Vinculações de subscrito

Vinculação
estática.
do
tipo
do
subscrito:
normalmente

Vinculação das faixas de valor de subscrito: às vezes
dinâmica.

Em algumas linguagens, o limite inferior da faixa de
subscrito é implícito.
No C, no C++ e no Java, o limite inferior é fixado em zero
(0).
 No FORTRAN I, II e IV, o limite inferior foi fixado em um
(1).
 No FORTRAN 77 e no FORTRAN 90, o padrão é um (1).

TIPOS MATRIZ (ARRAY)

Inicialização de matrizes

No FORTRAN 77, todo o armazenamento de dados é
alocado estaticamente.

Assim, é permitida a inicialização no momento de
execução usando-se a instrução DATA.

Por exemplo:
INTEGER LISTA(3)
DATA LISTA /0, 5, 5/
TIPOS MATRIZ (ARRAY)

Inicialização de matrizes

O ANSI C, o C++ e o Java também permitem
inicialização de suas matrizes

Exemplo:
int lista[] = {4, 5, 7, 83};

O compilador define o tamanho do vetor.
TIPOS MATRIZ (ARRAY)

Inicialização de matrizes

As cadeias de caracteres no C e no C++ são
implementadas como vetores de char.

Exemplo:

char nome[] = “freddie”;

O vetor terá oito elementos

Caractere nulo (zero – ‘0’ ou ‘\0’)
TIPOS MATRIZ (ARRAY)

Inicialização de matrizes

Vetores de cadeias no C e no C++ também podem ser
inicializados com literais de cadeira (vetor de
ponteiros para caracteres).

Exemplo:


char *nomes[] = {“Bob”, “Jake”, “Darcie”};
As literais são consideradas ponteiros para os
caracteres.

nomes[0] é um ponteiro para a letra ‘B’.
TIPOS MATRIZ (ARRAY)

Inicialização de matrizes

A Ada fornece dois mecanismos para inicializar matrizes
na instrução de declaração

Primeiro mecanismo (exemplo):


LISTA: array (1..5) of INTEGER := (1, 3, 5, 7, 9);
Segundo mecanismo (exemplo):
GRUPO: array (1..5) of INTEGER := (1 => 3, 3 => 4, others =>
0);
 Operador seta (=>).

TIPOS REGISTRO

Definições de registros

Um registro é um agregado
heterogêneo de elementos de dados.

Cada elemento possui um nome.

Exemplo: informações sobre um estudante
Nome
 Número do estudante
 Média das notas

possivelmente
TIPOS REGISTRO

Definições de registros

Os elementos (ou campos) do registro
referenciados utilizando-se seus identificadores.

Considere a forma COBOL de uma declaração de
registro:
01 REGISTRO-EMPREGADO.
02 NOME-EMPREGADO.
05 PRIMEIRO
PICTURE IS X(20).
05 MEIO
PICTURE IS X(10).
05 ULTIMO
PICTURE IS X(20).
02 TAXA-HORARIA
PICTURE IS 99V99.
são
TIPOS REGISTRO

Definições de registros

O Pascal e a Ada usam uma sintaxe diferente para os
registros.
 Considere a seguinte declaração
REGISTRO_EMPREGADO:
record
NOME_EMPREGADO:
record
PRIMEIRO: STRING (1..20);
MEIO: STRING (1..10);
ULTIMO: STRING (1..20);
end record;
TAXA_HORARIA: FLOAT;
end record;
Ada:
TIPOS REGISTRO

Referências a campos do registro

As referências aos campos individuais são
sintaticamente especificadas por diversos métodos
diferentes.

As referências a campos do COBOL têm a forma:


Nome_do_campo OF
nome_do_registro_n
nome_do_registro_1
MEIO OF NOME-EMPREGADO
EMPREGADO
OF
OF
...
OF
REGISTRO-
TIPOS REGISTRO

Referências a campos do registro

A referência ao campo MEIO da Ada tem a forma a
seguir (notação de pontos)

REGISTRO_EMPREGADO.NOME_EMPREGADO.MEIO
TIPOS PONTEIRO

Definição

Um tipo ponteiro é aquele em que as variáveis têm
uma faixa de valores que consiste em endereços de
memória e um valor especial, o nil.

Os ponteiros, ao contrário das matrizes e dos
registros, não são tipos estruturados (* no C e no
C++, access na Ada e ^ no Pascal).

São usados para referenciar alguma outra variável.
TIPOS PONTEIRO

Operações com ponteiros

Atribuição

Desreferenciamento
TIPOS PONTEIRO

Ponteiros em C e C++

Operação de desreferenciamento (*)

Endereço de uma variável (&)

Exemplo:
int *ptr;
int cont, init;
...
ptr = &init;
cont = *ptr;
TIPOS PONTEIRO

Ponteiros em C e C++

Ponteiros podem receber o valor de endereço de
qualquer objeto do tipo de domínio correto e a
constante zero, usada para nil.

A aritmética de ponteiros também é possível, embora
restrita.

Exemplo: ptr + indice
TIPOS PONTEIRO

Ponteiros em C e C++

Os nomes de vetores sem subscritos sempre se
referem ao endereço do primeiro elemento.

Exemplo:
int list[10];
int *ptr;
 Considere a atribuição de inicialização:
ptr = list; //atribui o endereço de list[0] a ptr
TIPOS PONTEIRO

Ponteiros em C e C++

Podemos concluir que:
*(ptr + 1) equivale a list[1]
 *(ptr + indice) equivale a list[indice]
 ptr[indice] equivale a list[indice]

REFERÊNCIA

SEBESTA, R. W. Conceitos de Linguagens
Programação. 5a. Edição. São Paulo: Bookman, 2003.
de
Download

Tipos de Dados - Thiago Rique