Escolar Documentos
Profissional Documentos
Cultura Documentos
Tipo de Dados
Linguagens e Paradigmas de Programação
2
Introdução
● Podemos ter então:
○ Primitivos (Exemplo: ???)
○ Estruturados (Exemplo: ???)
3
Introdução
● Podemos ter então:
○ Primitivos (integer, real, boolean, ...)
○ Estruturados (array, struct, union, object, ...)
4
Tipos Primitivos
5
Tipos Primitivos
6
● Inteiro
● Ponto-flutuante
Tipos
Primitivos ● Booleano
● Caractere
● Decimal
● Complexo
7
Tipos Primitivos de C
Tipo Tamanho Faixa de Valor
char 1 byte -128 a 127 ou 0 a 255
unsigned char 1 byte 0 a 255
signed char 1 byte -128 a 127
short 2 bytes -32.768 a 32.767
unsigned short 2 bytes 0 a 65.535
int 4 bytes -2.147.483.648 a 2.147.483.647
unsigned int 4 bytes 0 a 4.294.967.295
long 4 ou 8 bytes
unsigned long 4 ou 8 bytes
-9.223.372.036.854.775.808 a
long long 8 bytes
9.223.372.036.854.775.807
unsigned long long 8 bytes 0 a 18.446.744.073.709.551.615
float 4 byte 1.2E-38 a 3.4E+38
double 8 byte 2.3E-308 a 1.7E+308
8
Tipo String
9
Tipo String
10
Tipo String
● Java tem a classe String imutável e StringBuffer mutável
● Em Python, string é tipo primitivo (imutável), mas pode-se
usar a notação “[ ]” para acessar caracteres (visão de array
de caracteres)
# ERRO!
str[3] = ","
11
Operações com Strings
● Operações comuns: concatenação, atribuição, substring,
comparação e casamento de padrão
● Substrings → slices
● Problema geralmente com atribuição e comparação
○ Comparação varre toda a string?
○ Atribuição copia uma string sobre a outra?
■ E se as strings são de tamanhos diferentes?
12
Operações com Strings
● Exemplo:
○ /\d+\.?\d*|\.\d+/
○ /^[\w][\w\.-]*[\w]@[\w][\w\.-]*[\w]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/
13
Operações com Strings
sub valid
{
my $digit = @_[0];
if ($digit =~ /\d+\.?\d*|\.\d+/) {
print "Valid digit: $digit \n";
}
}
valid("8.847");
valid(".9843");
valid("84737");
valid("8.8.47");
14
Padrão?
(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \
000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\
["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:
[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\
n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\
n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\
031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:
[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \
t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:
(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|
(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:
(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+
(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\
r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:
[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\
["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.
(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\
n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\
r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \
t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)(?:,\s*(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \
t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|
(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:
[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:
[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\
n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[\t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \
t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \
t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\]
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\
["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:
(?:\r\n)?[ \t])*))*)?;\s*)
15
Tamanho da String
● Tamanho estático
○ Tamanho é especificado na criação e não muda
○ Exemplo: C
● Tamanho dinâmico
○ Sem limite
○ “a.equals(b)” VS “a == b”
17
Tipos Ordinais
18
Tipos Ordinais Definidos pelo Usuário
19
Enumeração
20
Enumeração
● Contribuem para legibilidade e confiabilidade
○ int red = 0, blue = 1; // Não fazer!
○ enum colors {red, blue, green};
21
Enumeração
● Enumerações em Java são subclasses de Enum
● Por ser uma classe:
public enum Fruta {
○ Pode ter construtor Banana, Maca, Pera;
○ Pode ter métodos
○ Pode ter atributos private int value;
23
Array
24
Tipo Array
● Agregado homogêneo de elementos de dados
● Todo elemento de um array é do mesmo tipo
○ int vet[10];
○ Person people[20];
...
25
Array e Índices
● Uma referência a um elemento de array em um programa inclui
um ou mais subscritos, os quais determinam a localização
26
Array e Índices
● Índices geralmente são faixas de inteiros
● Ada permite qualquer tipo ordinal como índice
○ boolean, caractere, enumeração
○ Permite definir o intervalo do índice (além do tipo)
27
Array e Índices
if ( $list[-2] == $list[3] ) {
print 'ok';
}
28
Categorias de Arrays
● Array estático
● Array pilha-dinâmico fixo
● Array pilha-dinâmico
● Array heap-dinâmico fixo
● Array heap-dinâmico
29
Layout
de
Memória
30
Array Estático
● Faixas de subscrito são estaticamente amarradas e a
alocação de armazenamento é estática.
int main() {
...
}
31
Array Pilha-dinâmico Fixo
● Faixas de subscrito são estaticamente amarradas e a
alocação de armazenamento é feita na execução
32
Array Pilha-dinâmico (1)
● Faixas de subscrito são dinamicamente amarradas e a alocação de
armazenamento é dinâmica
Pascal C99
procedure MyArray (N : Integer) is void myarray(int n) {
Vals : array (1 .. N) of Integer; int i;
begin int vet[n];
end MyArray; }
33
Array Pilha-dinâmico (2)
● Faixas de subscrito são dinamicamente amarradas e a alocação de
armazenamento é dinâmica
C#
void DeclareStackBasedArraySafe(int size) {
Span<int> stackArray = stackalloc int[size];
stackArray[0] = 123;
}
34
Array Heap-dinâmico Fixo
● Amarração das faixas de subscrito e de
alocação de armazenamento é dinâmica,
// C
mas não podem variar durante a int *vet = (int*) malloc(size);
execução
// C++
● Vantagem: flexibilidade de criar arrays int *vet = new int[size];
não temporários
35
Array Heap-dinâmico
● Amarração das faixas de subscrito e de
alocação de armazenamento é dinâmica e
pode mudar qualquer número de vezes
durante o seu tempo de vida // Java
ArrayList a = new ArrayList();
● Vantagem: possibilidade de variar o a.add(obj);
tamanho do array
36
Quem é Quem?
● Array estático int main() {
int vet[10];
● Array pilha-dinâmico fixo }
● Array pilha-dinâmico
ArrayList a = new ArrayList();
● Array heap-dinâmico fixo
● Array heap-dinâmico int vet[10];
int main() { ... }
void func(int n) {
int *vet = (int*) malloc(size);
char str[n];
} 37
Inicialização de Arrays
● Linguagens permitem a inicialização durante a alocação
38
Inicialização de Arrays
● Python: list comprehensions
○ [ expr for var in array ]
○ [ expr for var in array if condition ]
● Exemplo
○ v = [0,1,2,3,4,5,6,7,8,9]
○ w = [x*x for x in v if x%3 == 0]
○ Resultado → w = [0, 9, 36, 81]
39
Inicialização de Arrays
● Exemplo
○ v = [9, 36, 81, 121]
○ w=[ expressão? ]
○ Resultado → w = [3, 6, 9, 11]
40
Array: Implementação
● Compilador deve gerar código para acesso em tempo de
execução
○ list[k] → deve ser gerado endereço de memória
41
Array: Implementação
● Array multidimensionais 3 4 7
○ Ordem de linhas: C 6 2 5
1 3 8
○ Ordem de colunas: Fortran
42
Array: Ordem de Linha
● Armazenamento na memória é linear
● Endereço do array multidimensional em ordem de linha,
com índice começando em zero
○ Exemplo: matriz de int em C
0 1 2
Memória
0 3 4 7
100 104 108 112 116 120 124 128 132
1 6 2 5 3 4 7 6 2 5 1 3 8
2 1 3 8
43
Array: Cálculo da Posição
● Ordem de linha (estilo C)
addr(m[i,j]) = addr(m[0,0])
+ (i * ncols * sizeof(tipo))
+ (j * sizeof(tipo))
0 1 2
Memória
0 3 4 7
100 104 108 112 116 120 124 128 132
1 6 2 5 3 4 7 6 2 5 1 3 8
2 1 3 8
44
Array: Ordem de Coluna
● Armazenamento na memória é linear
● Endereço do array multidimensional em ordem de coluna,
com índice começando em zero
○ Exemplo: matriz de inteiro em Fortran
0 1 2
Memória
0 3 4 7
100 104 108 112 116 120 124 128 132
1 6 2 5 3 6 1 4 2 3 7 5 8
2 1 3 8
45
Array Associativo
● Um conjunto não-ordenado de dados acessado por uma chave
○ Perl → hashes
○ Lua → tabelas
○ Python → dicionários
46
Array Associativo
● Um conjunto não-ordenado de dados acessado por uma chave
○ Perl → hashes
○ Lua → tabelas
○ Python → dicionários
● Exemplo:
○ person = { name = “Joao”, age = 45, address = { street = “Av Xyz” } }
○ age = person[“age”]
○ name = person[“name”]
47
Resumo
● Introdução
● Tipos primitivos
○ Inteiros, FP, booleanos, caractere, string, complexo, decimal
● Tipos Ordinais
● Array
48