Apresentação do PowerPointjeiks.net/wp-content/uploads/2013/07/Slides_LTP_12.pdfdefinidos em...
Transcript of Apresentação do PowerPointjeiks.net/wp-content/uploads/2013/07/Slides_LTP_12.pdfdefinidos em...
Tipos definidos pelo usuário
Os tipos integer, real, boolean, char, etc são pré-definidos em Pascal e constituem conjunto de valores inteiros, reais, lógicos, caractere, etc.
O Pascal permite a definição de “novos tipos”.
Um novo tipo é criado através de uma definição que determina um conjunto de valores associados a um identificador.
O tipo definido pelo programador poderá ser usado nas declarações de variáveis.
Tipos definidos pelo usuário - Enumerados
Um tipo enumerado é uma sequência ordenada de identificadores definidos pelo programador, que forma um tipo ordinal.
Os tipos enumerados constituem ferramentas extremamente úteis na criação de programas limpos e auto-documentados, podendo ser referenciados em qualquer parte do programa.
Os identificadores (valores) criados para um tipo enumerado não representam mais nenhum valor, exceto seus próprios.
Tipos definidos pelo usuário - Enumerados
No Pascal, a palavra reservada para criação de tipos é type.
Exemplo - definição de um tipo enumerado:
type semana = (segunda, terca, quarta, quinta, sexta, sabado, domingo);
Tipos definidos pelo usuário - Enumerados
Uma das mais importantes características de um tipo enumerado é a ordem na qual os valores são ordenados.
Além de estabelecer os próprios identificadores, a declaração define a ordem dos identificadores no tipo.
Diversas operações são válidas usando os tipos enumerados.
Tipos definidos pelo usuário - Enumerados
Observações: As variáveis de tipos enumerados não podem ser lidas ou
escritas.
Não é válida nenhuma operação aritmética com os elementos de um tipo enumerado, como somar 1, diminuir 2 ou somar duas constantes ou mais constantes do tipo.
Pode-se usar os valores dos tipos enumerados como de índice de arrays e como faixa de iteração na estrutura for.
A ordem do primeiro elemento do tipo é sempre 0.
Tipos definidos pelo usuário - Enumerados
program cores;
uses crt;
type
cores = (preto, azul, vermelho, amarelo, verde, rosa, branco, roxo, lilas);
var
uma_cor: cores;
begin
clrscr;
uma_cor := roxo; {atribuir um identificador a variável de tipo}
uma_cor := succ(uma_cor); {receber lilás, o sucessor}
uma_cor := pred(uma_cor); {receber roxo novamente, o antecessor}
uma_cor := succ(azul); {receber vermelho, sucessor de azul}
if succ(uma_cor) >= lilas then
uma_cor := preto;
writeln(ord(uma_cor)); {escrever 2, a ordem do vermelho}
uma_cor := preto;
writeln(ord(uma_cor)); {escrever 0, a ordem do preto}
for uma_cor := preto to rosa do
writeln(ord(uma_cor)); {escrever as posições (ordens), do preto ao rosa}
end.
Tipos definidos pelo usuário - Sub-faixa
Pode-se definir novos tipos como uma parte de um determinado tipo ordinal (ou escalar).
O intervalo de valores (parte ou faixa) determina o domínio de um tipo ordinal já existente que será associado ao novo tipo.
Tipos definidos pelo usuário - Sub-faixa
A definição de uma faixa (subrange) indica quais os valores mínimo e máximo que podem ser assumidos.
A descrição de uma faixa se faz com a indicação dos seus limites separados por dois pontos consecutivos (..), onde o limite inferior deve ser menor que o limite superior.
Tipos definidos pelo usuário - Sub-faixa
program dias; uses crt; type
semana = (seg, ter, qua, qui, sex, sab, dom); {tipo enumerado} coluna = 1..80; {tipo ordinal associado: byte} maius = ‘A’..’Z’; {tipo ordinal associado: char} d_util = seg..sex; {tipo ordinal associado: semana} num = -128..130; {tipo ordinal associado: integer} var letra: maius; dia: d_util; begin
clrscr; for letra := ‘J’ to ‘P’ do
write(letra:2); for dia := seg to sex do
case dia of seg: writeln(‘Segunda’); ter: writeln(‘Terça’); qua: writeln(‘Quarta’); qui: writeln(‘Quinta’); else
writeln(‘Sexta’); end; readkey; end.
Tipos definidos pelo usuário - Outros
Além dos tipos enumerados e do tipo sub-faixa pode-se definir tipos conjuntos (set type) e também a partir de estruturas de dados e outros recursos.
Tipos definidos pelo usuário - Outros
Outras definições de tipos: const
n = 1; m = 20;
type Tfaixa = 1..31; Tnome = string[40]; Tvetor1= array [n..m] of Tnome; {array de strings} Tvetor2 = array [1..5] of Tvetor1; {array de array de strings} Tvetor3 = array [1..10] of Tfaixa; {array de inteiros}
Tvetor4 = array [1..6] of Tvetor3; {array de array de inteiros}
Tipos definidos pelo usuário - Outros
Exemplos de variáveis declaradas a partir dos tipos definidos anteriormente:
var a: Tfaixa; b: Tnome; c: Tvetor1; d: Tvetor2; e: Tvetor3; f: Tvetor4;
type Tfaixa = 1..31; Tnome = string[40]; Tvetor1= array [n..m] of Tnome; {array de strings} Tvetor2 = array [1..5] of Tvetor1; {array de array de strings} Tvetor3 = array [1..10] of Tfaixa; {array de inteiros} Tvetor4 = array [1..6] of Tvetor3; {array de array de inteiros}
Tipos definidos pelo usuário - Outros
Exemplos (abstração): var
a: Tfaixa; b: Tnome; c: Tvetor1; d: Tvetor2; e: Tvetor3; f: Tvetor4;
type Tfaixa = 1..31; Tnome = string[40]; Tvetor1= array [n..m] of Tnome; {array de strings} Tvetor2 = array [1..5] of Tvetor1; {array de array de strings} Tvetor3 = array [1..10] of Tfaixa; {array de inteiros} Tvetor4 = array [1..6] of Tvetor3; {array de array de inteiros}
2
a
fulano
b
c 1 2 3 ... 20
Ivi José Paulo ... XXXXXX
1 2 ... 5
...
d
1 2 ... 10
23 3 ... 9
e 1 2 ... 6
...
f
Variáveis Compostas Heterogêneas
São variáveis que podem armazenar conjuntos de dados logicamente relacionados, mas de tipos diferentes (numéricos, lógicos, literais, etc).
São também chamadas registros.
Variáveis Compostas Heterogêneas
Pode-se imaginar uma variável do tipo registro como se fosse um formulário que possui um nome (o identificador principal declarado para a variável) e um certo número de campos (também identificado por nomes) representando os valores que esta variável pode armazenar.
esta encomenda possui alguns
detalhes importantes que devem ser exibidos na tela!
Variáveis Compostas Heterogêneas
Cabe ao programador (levando em conta os dados que ele deseja representar em seu programa) definir o número de campos e o tipo de dado que cada campo irá armazenar.
Variáveis Compostas Heterogêneas
Exemplos: Registro_Funcionario
Campos:
Nome: Literal Idade: Numérico (inteiro) Função: Literal Salário: Numérico (real) Endereço: Tipo_Endereco
Registro_Inscricao
Campos:
Nome_Candidato: Literal Opcao_curso: Numérico (inteiro) RG: Literal
Registro_Produto
Campos:
Nome: Literal Codigo: Numérico (inteiro) Peso: Numérico (real) QTD_em_Estoque: Numérico (Inteiro)
Registro_Endereço
Campos:
Rua: Literal Cidade: Literal Estado: Literal CEP: Literal
Variáveis Compostas Heterogêneas
Exemplos:
FuncionarioUFES
Campos:
Nome: Ciclano Idade: 29 Função: Contador Salário: 2327.00 Endereço:
Rua: R. Busca-pé, 60 Cidade: Carangola Estado: MG CEP: 36800-000
Inscricao_1
Campos:
Nome_Candidato: Fulano Opcao_curso: Letras RG: 000.000.000
Produto_1
Campos:
Nome: Azeitona Roxa Codigo: 234123412345 Peso: 200.0 QTD_em_Estoque: 500
Endereco_1
Campos:
Rua: R. Olímpio Teixeira, 17 Cidade: Carangola Estado: MG CEP: 36800-000
Variáveis Compostas Heterogêneas
Pode-se definir registros em Pascal na sessão type ou diretamente declarar variáveis do tipo record.
Declaração na seção Type: type <nome_novo_tipo> = record
campo 1: tipo 1; campo 2: tipo 2; … campo n: tipo n;
end; var <identificador_variavel>: <nome_novo_tipo>;
Variáveis Compostas Heterogêneas
Exemplo:
type funcionario = record nome: string[40]; {string com 40 caracteres} idade: integer; funcao: string[30]; {string com 40 caracteres} salario: real; end;
var funcionarioUFES: funcionario;
Variáveis Compostas Heterogêneas
Declaração na sessão VAR:
var <identificador_registro>: record
campo 1: tipo 1; campo 2: tipo 2; … campo n: tipo n;
end;
Variáveis Compostas Heterogêneas
Exemplo:
var funcionarioUFES: record
nome: string[40]; {string com 40 caracteres} idade: integer; funcao: string[30]; {string com 40 caracteres} salario: real;
end;
Variáveis Compostas Heterogêneas
Os campos dos registros podem ser de tipos simples ou estruturados (array, registros, etc.):
Exemplo:
type estadosBrasil = (AC, AL, AM, AP, BA, CE, DF, ES, GO, MA, MG, MS, MT, PA, PB, PE, PI, PR, RJ, RN, RO, RR, RS, SC, SE, SP, TO); var cliente: record nome: string[50]; endereco: record
rua: string [30]; numero: integer; complemento: string [40]; cep: string [10]; cidade: string[20]; estado: estadosBrasil;
end; valoresUltimasCompras: array [1..10] of real; end;
FuncionarioUFES
Campos:
Nome: Ciclano Idade: 29 Função: Contador Salário: 2327.00 Endereço:
Rua: R. Busca-pé, 60 Cidade: Carangola Estado: MG CEP: 36800-000
Variáveis Compostas Heterogêneas
Acesso aos campos:
Produto_1
Campos:
Nome: Azeitona Roxa Codigo: 234123412345 Peso: 200.0 QTD_em_Estoque: 500
Produto 1
Codigo = 234123412345
FuncionarioUFES
Endereço Cidade = Carangola
Variáveis Compostas Heterogêneas
Em Pascal, o acesso aos campos de um registro pode ocorrer de duas formas:
Variável e campo separados por ponto separador (.);
Instrução with ... do com o identificador da variável;
Referências
FARRER, H.; BECKER, C. G.; FARIA, E. C.; MATOS, H. F.; et al. Algoritmos estruturados. 3ed, Ed. LTC, 1999. ISBN: 9788521611806.
GUIMARÃES, A. M.; LAGES, N. A. C.; Algoritmos e estruturas de dados. 1ed, Ed. LTC, 1994. ISBN: 9788521603788.
FARRER, H.; BECKER, C. G.; FARIA, E. C.; MATOS, H. F.; et al. Pascal estruturado. 3ed, Ed. LTC, 1999. ISBN: 9788521611745.
Velloso, F. C.; Informática: Conceitos Básicos. 7ed, Ed. Campus, 2004. ISBN: 9788535215366.
http://www.hkbu.edu.hk/~bba_ism/ISM2110/index.htmj
MAURI, G. R.; Notas de aula de Programação I. 2010.