Valores e Tipos de Dados Prof. Hudson Costa

Documentos relacionados
Linguagens de Programação Conceitos e Técnicas. Valores e Tipos de Dados Prof. Tiago Alves de Oliveira

Linguagens de Programação Tipos de Dados

Linguagens de Programação Conceitos e Técnicas. Valores e Tipos de Dados

Paradigmas de Linguagens

Paradigmas de Linguagens de Programação. Tipos de Dados

Linguagens de Programação Conceitos e Técnicas. Amarrações

Introdução. Paradigmas de Linguagens. Introdução. Tipos de Dados Primitivos. Prof. Ms. Luiz Alberto Contato:

Linguagens de Programação Conceitos e Técnicas. Expressões e Comandos Prof. Tiago Alves de Oliveira

Linguagens de Programação Conceitos e Técnicas. Amarrações Prof. Tiago Alves de Oliveira

Linguagens de Programação Conceitos e Técnicas. Expressões e Comandos

Paradigmas de Linguagem de Programação. Paradigma Imperativo

Conceitos de Linguagens de Programação

Tipos. O Conceito de Tipo

Espaço de Tipos. Amarração Tipo. Amarração Valor. Amarração Localização. Amarração Nome. Objeto de Dado

Tipos de Dados. George Darmiton da Cunha Cavalcanti

Linguagens de Programação. Tipos. Carlos Bazilio

Algoritmos e Estruturas de Dados I

Programação Estruturada

ALOCAÇÃO DINÂMICA DE MEMÓRIA

Variáveis, Comandos de Atribuição e Comando de Entrada e Saída

Trabalho Linguagem e Programação de Compiladores

02. [Sebesta, 2000] Quais são as vantagens e as desvantagens dos tipos de dados decimais?

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Capítulo 6. Tipos de Dados

LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES

Linguagem C. IF61A/IF71A - Computação 1 Prof. Leonelo Almeida. Universidade Tecnológica Federal do Paraná

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica

PROGRAMAÇÃO I E N T R A DA E S A Í DA D E DA D O S

Estudos de Linguagens de Programação - Revisão

Nomes, vinculações e escopos

Nomes, vinculações e escopos

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

Variáveis. Prof. Alberto Costa Neto Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe

Paradigmas de Linguagem de. Programação Profª. Roberta B Tôrres de programação referem-se a:

3. Linguagem de Programação C

ALGORITMOS E ESTRUTURAS DE DADOS CES-11

Estruturas de Dados. Profa. Juliana Pinheiro Campos

Estruturas de Dados. Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C

Linguagens de Programação 3 Valores e Tipos de Dados

Programação científica C++

Introdução à Computação

Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores

Linguagens de Programação 2 Amarrações

Estrutura de Dados Conceitos Iniciais

Algoritmos e Estruturas de dados

Tipos, Literais, Operadores

Tipos, Literais, Operadores

Algoritmos II prof. Daniel Oliveira

Estruturas de Dados Aulas 3 e 4: Uso da. 14/03/2011 e 16/03/2011

4. Estruturas Fundamentais de Programação em C

Bits e operações. Sistemas de Computação

Hello World. Linguagem C. Tipos de Dados. Palavras Reservadas. Operadores Aritméticos. Pré e pós incremento e pré e pós decremento

Persistência. Prof. Alberto Costa Neto Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe

Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Alocação Dinâmica de Memória

Métodos Computacionais. Tipos Estruturados

Universidade de Mogi das Cruzes Implementação Orientada a Objetos - Profª. Danielle Martin. Guia da Sintaxe do Java

Variáveis, Comandos de Atribuição e Comando de Entrada e Saída

Linguagem C Princípios Básicos (parte 1)

Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Alocação Dinâmica de Memória

Variáveis, Comandos de Atribuição e Comando de Entrada e Saída

Nomes, Amarração, Verificação de Tipos, e Escopo

Ponteiros e alocação dinâmica de memória. Disciplina de Programação de Computadores I Universidade Federal de Ouro Preto

Linguagem de Programação C. Prof. Fabrício Olivetti de França

PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS

Programação com Acesso a BD. Programação com OO Acesso em Java

- Mapa de memória de um processo - Ponteiros

K&R: Capitulo 2 IAED, 2012/2013

Algoritmos e Programação

Módulo Lógica Programação com aplicações em Java. Projeto khouse Profissionalizante Profª Larissa Brandão

Ponteiros. Embora o programador não tenha acesso ao endereço de uma variável, existem algumas situações onde é necessário a utilização deste endereço.

Aula 24 Ponteiros, vetores e structs

Alocação Estática e Dinâmica. Prof. M.Sc. Mariella Berger

Representação de Dados

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

PONTEIROS E LISTAS. Kalinka Regina Lucas Jaquie Castelo Branco

Instituto Federal de Educação, Ciência e Tecnologia do RN Câmpus Currais Novos. LINGUAGEM C++ VARIÁVEIS COMPOSTAS Arrays Aula I

Introdução à Ciência da Computação. Prof. Dr. Rogério Vargas

Lista de Erratas. 1) Exemplo 2.13 (Página 36): há um espaço em branco após a virgula que está sendo atribuída. Como está no livro:

Entender o problema Encontrar um algoritmo para resolvê-lo. Implementar o algoritmo numa linguagem de programação

Exercícios. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Disciplina: Introdução à Engenharia da Computação

Linguagens de Programação

Exercício. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal

Mais sobre Ponteiros em C

Orientação a Objetos e Java

PLANO DE UNIDADE DIDÁTICA- PUD

Prof. A. G. Silva. 25 de abril de Prof. A. G. Silva INE5231 Computação Científica I 25 de abril de / 68

Referências. Linguagem C. Tipos de variáveis em XC8. Tipos de variáveis. Tipos de variáveis em XC 8 Exemplo. Radicais numéricos em C

Representação de Dados Arrays e Structs

FACULDADE BATISTA MINEIRA - CST Banco de Dados Estruturas de Dados - Variáveis

LINGUAGEM C: VARIÁVEIS E EXPRESSÕES

Sumário. Introdução à Ciência da Computação. Ponteiros em C. Introdução. Definição. Por quê ponteiros são importantes?

Alocação Dinâmica em C

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra

Implementação da programação modular I

Estruturas de Dados Aula 2: Estruturas Estáticas. Tipos Básicos. Quantos valores distintos podemos representar com o tipo char?

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas. Aula Tópico 2

Transcrição:

Valores e Tipos de Dados Prof. Hudson Costa Valor 3 2.5 'a' Paulo 0x1F 026 Tipo {true, 25, 'b', azul não corresponde a um tipo { true, false corresponde a um tipo Linguagens de Programação Valores e Tipos de Dados 2 1

Não podem ser decompostos em valores mais simples Costumam ser definidos na implementação da LP Sofrem influência direta do hardware Linguagens de Programação Valores e Tipos de Dados 3 Corresponde a um intervalo do conjunto dos números inteiros Vários tipos inteiros numa mesma LP Normalmente, intervalos são definidos na implementação do compilador Em JAVA, o intervalo de cada tipo inteiro é estabelecido na definição da própria LP Linguagens de Programação Valores e Tipos de Dados 4 2

Tipo Tamanho (bits) Intervalo Início Fim byte 8-128 127 short 16-32768 32767 int 32-2.147.483.648 2.147.483.647 long 64-9223372036854775808 9223372036854775807 Linguagens de Programação Valores e Tipos de Dados 5 Armazenados como códigos numéricos Tabelas EBCDIC, ASCII e UNICODE PASCAL e MODULA 2 oferecem o tipo char Em C, o tipo primitivo char é classificado como um tipo inteiro char d; char *p, *q; d = 'a' + 3; while (*p) *q++ = *p++; Linguagens de Programação Valores e Tipos de Dados 6 3

Tipo mais simples Possui apenas dois valores C não possui o tipo de dado booleano, mas qualquer expressão numérica pode ser usada como condicional Valores zero verdadeiro Valores = zero falso Abordagem de C pode provocar erros if (c += 1) x = 10; JAVA inclui o tipo de dado boolean Linguagens de Programação Valores e Tipos de Dados 7 Armazena um número fixo de dígitos decimais COBOL possui 0000 0010 0010 0011 0011 0000 1000 0110 0111 1001 1000 0011 sinal 4 bytes 7 casas inteiras 1 sinal 2 bytes 4 casas decimais Linguagens de Programação Valores e Tipos de Dados 8 4

O tipo primitivo ponto flutuante modela os números reais LPs normalmente incluem dois tipos de ponto flutuante: float e double expoente fração Padrão IEEE 754 - Precisão Simples bit de sinal 8 bits 23 bits expoente fração bit de sinal 11 bits 52 bits Padrão IEEE 754 - Precisão Dupla Linguagens de Programação Valores e Tipos de Dados 9 PASCAL, ADA, C e C++ permitem que o programador defina novos tipos primitivos através da enumeração de identificadores dos valores do novo tipo enum mes_letivo { mar, abr, mai, jun, ago, set, out, nov ; enum mes_letivo m1, m2; Possuem correspondência direta com intervalos de tipos inteiros e podem ser usados para indexar vetores e para contadores de repetições Aumentam a legibilidade e confiabilidade do código Java não inclui o tipo enumerado de C e C++ Linguagens de Programação Valores e Tipos de Dados 10 5

Em PASCAL e ADA, também é possível definir tipos intervalo de inteiros type meses = 1.. 12; Tipos intervalos herdam as operações dos inteiros Linguagens de Programação Valores e Tipos de Dados 11 Tipos compostos são aqueles que podem ser criados a partir de tipos mais simples registros, vetores, listas, arquivos Entendidos em termos dos conceitos produto cartesiano, uniões, mapeamentos, conjuntos potência e tipos recursivos Cardinalidade número de valores distintos que fazem parte do tipo Linguagens de Programação Valores e Tipos de Dados 12 6

Combinação de valores de tipos diferentes em tuplas x= a b c d e S T (b,c) (b,d) (b,e) (a,c) (a,d) (a,e) S x T Linguagens de Programação Valores e Tipos de Dados 13 São produtos cartesiano os registros de PASCAL, MODULA 2, ADA e COBOL e as estruturas de C struct nome { char primeiro [20]; char meio [10]; char sobrenome [20]; struct empregado { struct nome nfunc; float salario; emp; Linguagens de Programação Valores e Tipos de Dados 14 7

Uso de seletores emp.nfunc.meio Inicialização em C struct data { int d, m, a; ; struct data d = { 7, 9, 1999 ; Em LPs orientadas a objetos, produtos cartesianos são definidos a partir do conceito de classe JAVA só tem class Cardinalidade #(S1 x S2 x... x Sn) = #S1x #S2x...x #Sn Linguagens de Programação Valores e Tipos de Dados 15 Consiste na união de valores de tipos distintos para formar um novo tipo de dados a b c b c d a b c d S T S + T Linguagens de Programação Valores e Tipos de Dados 16 8

Uniões Livres Pode haver interseção entre o conjunto de valores dos tipos que formam a união Há possibilidade de violação no sistema de tipos union medida { int centimetros; float metros; ; union medida medicao; float altura; medicao.centimetros=180; altura = medicao.metros; printf("\n altura : %f metros\n", f); Linguagens de Programação Valores e Tipos de Dados 17 Uniões Disjuntas não há interseção entre o conjunto de valores dos tipos que formam a união registros variantes de PASCAL, MODULA 2 e ADA e a union de ALGOL 68 TYPE Representacao = (decimal, fracionaria); Numero = RECORD CASE Tag: Representacao OF decimal: (val: REAL); fracionaria: (numerador, denominador: INTEGER); END; Cardinalidade #(S 1 + S 2 +... + S n ) = #S 1 + #S 2... + #S n Linguagens de Programação Valores e Tipos de Dados 18 9

Tipos de dados cujo conjunto de valores corresponde a todos os possíveis mapeamentos de um tipo de dados S em outro T u a u a b b v S c T v S c T Cardinalidade: #(S T) = (#T) #S Linguagens de Programação Valores e Tipos de Dados 19 O conjunto domínio é finito Vetores e matrizes array S OF T; (S T) A: array [1.50] of char; A: ([1,50] char) a z d r s f h w o 1 2 3 4 5 47 48 49 50 O conjunto índice deve ser finito e discreto Verificação de Índices em C e JAVA int v[7]; V[13] = 198; Linguagens de Programação Valores e Tipos de Dados 20 10

Categoria de Vetor Tamanho Tempo de Definição Alocação Local de Alocação Exemplos Estáticos Fixo Compilação Estática Base FORTRAN 77 Semi- Estáticos Semi- Dinâmicos Fixo Compilação Dinâmica Pilha PASCAL, C, MODULA 2 Fixo Execução Dinâmica Pilha ALGOL 68, ADA, C Dinâmicos Variável Execução Dinâmica Monte APL, PERL Linguagens de Programação Valores e Tipos de Dados 21 Estáticos (C) void f () { static int x[10]; Semi-Estáticos (C) void f () { int x[10]; Semidinâmicos (Padrão ISO - 1999) void f (int n) { int x[n]; Dinâmicos (APL) A (2 3 4) A (2 3 4 15 ) Linguagens de Programação Valores e Tipos de Dados 22 11

Podem ser implementados em C, C++ e JAVA através do monte Necessário alocar nova memória e copiar conteúdo quando vetor aumenta de tamanho É encargo do programador controlar alocação e cópia. Em C e C++, o programador deve controlar desalocação também. Isso torna a programação mais complexa e suscetível a erros Linguagens de Programação Valores e Tipos de Dados 23 Elementos são acessados através da aplicação de fórmulas posição mat [i] [j] = endereço de mat [0][0] + i tamanho da linha + j tamanho do elemento = endereço de mat [0][0] + (i número de colunas + j) tamanho do elemento Linguagens de Programação Valores e Tipos de Dados 24 12

Em JAVA vetores multidimensionais são vetores unidimensionais cujos elementos são outros vetores int [] [] a = new int [5] []; for (int i = 0; i < a.length; i++) { a [i] = new int [i + 1]; O mesmo efeito pode ser obtido em C com o uso de ponteiros para ponteiros Linguagens de Programação Valores e Tipos de Dados 25 Cardinalidade int mat [5][4]; Conjunto de valores {0,, 4 x {0,, 3 int (#int) # ({0,, 4 x {0,.., 3) = (#int) (# {0,, 4 x #{0,.., 3) = (#int) 5 x 4 = (#int) 20 Linguagens de Programação Valores e Tipos de Dados 26 13

Uma função implementa um mapeamento S T através de um algoritmo O conjunto S não necessita ser finito O conjunto de valores do tipo mapeamento S T são todas as funções que mapeiam o conjunto S no conjunto T Valores do mapeamento [int boolean] em JAVA boolean positivo (int n) { return n > 0; Outros valores do mapeamento: palindromo, impar, par, primo Linguagens de Programação Valores e Tipos de Dados 27 C utiliza o conceito de ponteiros para manipular endereços de funções como valores int impar (int n){ return n%2; int negativo (int n) { return n < 0; int multiplo7 (int n) { return!(n%7); int conta (int x[], int n, int (*p) (int) ) { int j, s = 0; for (j = 0; j < n; j++) if ( (*p) (x[j]) ) s++; return s; Linguagens de Programação Valores e Tipos de Dados 28 14

main() { int vet [10]; printf ("%d\n", conta (vet, 10, impar)); printf ("%d\n", conta (vet, 10, negativo)); printf ("%d\n", conta (vet, 10, multiplo7)); JAVA não trata funções (métodos) como valores Pode-se empregar algoritmos diferentes para implementar um mesmo mapeamento Algumas vezes, vetores e funções podem ser usados para implementar o mesmo mapeamento finito Linguagens de Programação Valores e Tipos de Dados 29 Tipos de dados cujo conjunto de valores corresponde a todos os possíveis subconjuntos que podem ser definidos a partir de um tipo base S S = {s s S a b c S { {a {b {c {a, b {a, c {b, c {a, b, c S Linguagens de Programação Valores e Tipos de Dados 30 15

Cardinalidade # S = 2 #S Operações básicas Pertinência Contém Está contido União Diferença Diferença simétrica Interseção Linguagens de Programação Valores e Tipos de Dados 31 Poucas LPs oferecem. Muitas vezes de forma restrita PASCAL TYPE Carros = (corsa, palio, gol); ConjuntoCarros = SET OF Carros; VAR Carro: Carros; CarrosPequenos: ConjuntoCarros; BEGIN Carro:= corsa; CarrosPequenos := [palio, gol]; /*atribuicao*/ CarrosPequenos:= CarrosPequenos + [corsa]; /*uniao*/ Linguagens de Programação Valores e Tipos de Dados 32 16

CarrosPequenos:= CarrosPequenos * [gol]; /*intersecao*/ if Carro in CarrosPequenos THEN /*pertinencia*/ if CarrosPequenos >= [gol, corsa] THEN /*contem*/ Restrições de PASCAL visam permitir implementação eficiente VAR S: SET OF [ 'a.. 'h' ]; BEGIN S ['a', := 'c','d', ['a', 'c','h' 'h'] ] + ['a', ['d']; 'c', 'h' ] [ 'd' ] END; S 1 0 1 1 0 0 0 1 = 1 0 1 0 0 0 0 1 OR 0 0 0 1 0 0 0 0 Linguagens de Programação Valores e Tipos de Dados 33 Tipos recursivos são tipos de dados cujos valores são compostos por valores do mesmo tipo R < parte inicial > R < parte final > Tipo Lista Tipo Lista Vazia (Tipo Elemento x Tipo Lista) A cardinalidade de um tipo recursivo é infinita Isto é verdade mesmo quando o tipo do elemento da lista é finito O conjunto de valores do tipo listas é infinitamente grande (não podendo ser enumerado) embora toda lista individual seja finita Linguagens de Programação Valores e Tipos de Dados 34 17

Tipos recursivos podem ser definidos a partir de ponteiros ou diretamente Em C struct no { int elem; struct no* prox; ; Em C++ class no { int elem; no* prox; ; Em JAVA class no { int elem; no prox; ; Linguagens de Programação Valores e Tipos de Dados 35 Não se restringe a implementação de tipos recursivos embora seja seu uso principal Ponteiro é um conceito de baixo nível relacionado com a arquitetura dos computadores O conjunto de valores de um tipo ponteiro são os endereços de memória e o valor nil Considerados o goto das estruturas de dados Linguagens de Programação Valores e Tipos de Dados 36 18

#define nil 0 typedef struct no* listaint; struct no { int cabeca; listaint cauda; ; listaint anexa (int cb, listaint cd) { listaint l; l = (listaint) malloc (sizeof (struct no)); l->cabeca = cb; l->cauda = cd; return l; Linguagens de Programação Valores e Tipos de Dados 37 void imprime (listaint l) { printf("\nlista: "); while (l) { printf("%d ",l->cabeca); l = l->cauda; main() { listaint palindromos, soma10, aux; palindromos = anexa(343, anexa(262, anexa(181, nil))); soma10 = anexa(1234, palindromos); imprime (palindromos); imprime (soma10); Linguagens de Programação Valores e Tipos de Dados 38 19

aux = palindromos ->cauda; palindromos ->cauda = palindromos ->cauda->cauda; free(aux); imprime (palindromos); imprime (soma10); Atribuição int *p, *q, r; // dois ponteiros para int e um int q = &r; // atribui endereco de r a q p = q; // atribui endereco armazenado em q a p Alocação int* p = (int*) malloc (sizeof(int)); Linguagens de Programação Valores e Tipos de Dados 39 Desalocação free(p); Derreferenciamento explícito INTEGER, POINTER :: PTR PTR = 10 PTR = PTR + 10 Derreferenciamento implícito int *p; *p = 10; *p = *p + 10; Linguagens de Programação Valores e Tipos de Dados 40 20

Aritmética (C) p++; ++p; p = p + 1; p--; --p; p = p - 3; Indexação (C) x = p[3]; Linguagens de Programação Valores e Tipos de Dados 41 Podem apontar para qualquer tipo int f, g; void* p; f = 10; p = &f; g = *p; // erro: ilegal derreferenciar ponteiro p/ void Servem para criação de funções genéricas para gerenciar memória Servem para criação de estruturas de dados heterogêneas (aquelas cujos elementos são de tipos distintos) Linguagens de Programação Valores e Tipos de Dados 42 21

Baixa Legibilidade p->cauda = q; Inspeção simples não permite determinar qual estrutura está sendo atualizada e qual o efeito Possibilitam violar o sistema de tipos int i, j = 10; int* p = &j; // p aponta para a variavel inteira j p++; // p pode nao apontar mais para um inteiro i = *p + 5; // valor imprevisivel atribuido a i Linguagens de Programação Valores e Tipos de Dados 43 Objetos Pendentes int* p = (int*) malloc (10*sizeof(int)); int* q = (int*) malloc (5*sizeof(int)); p = q; // area apontada por p torna-se inacessivel Provoca vazamento de memória Referências Pendentes int* p = (int*) malloc(10*sizeof(int)); int* q = p; free(p); // q aponta agora para area de memoria desalocada int* p; *p = 0; Linguagens de Programação Valores e Tipos de Dados 44 22

Referências Pendentes main() { int *p, x; x = 10; if (x) { int i; p = &i; // p continua apontando para i, que nao existe mais Linguagens de Programação Valores e Tipos de Dados 45 O conjunto de valores desse tipo é formado pelos endereços das células de memória Todas as variáveis que não são de tipos primitivos em JAVA são do tipo referência int res = 0; int& ref = res; // ref passa a referenciar res ref = 100; // res passa a valer 100 Linguagens de Programação Valores e Tipos de Dados 46 23

Valores correspondem a uma seqüência de caracteres Não existe consenso sobre como devem ser tratadas Podem ser consideradas tipos primitivos, mapeamentos finitos ou tipo recursivo lista Três formas comuns de implementação Estática Semi-Estática Dinâmica Linguagens de Programação Valores e Tipos de Dados 47 Tipos Primitivos Compostos Inteiros Enumerados Recursivos Strings Caracteres Ponto Flutuantes Uniões Conjuntos Potência Booleanos Decimais Mapeamentos Produtos Cartesianos Intervalos Ponteiros Finitos Funções Livres Disjuntas Linguagens de Programação Valores e Tipos de Dados 48 24