Apresentação do PowerPointjeiks.net/wp-content/uploads/2013/07/Slides_LTP_12.pdfdefinidos em...

30
Departamento de Engenharia Rural Centro de Ciências Agrárias Programação I

Transcript of Apresentação do PowerPointjeiks.net/wp-content/uploads/2013/07/Slides_LTP_12.pdfdefinidos em...

Departamento de Engenharia Rural

Centro de Ciências Agrárias

Programação I

Tipos definidos pelo programador

Variáveis compostas heterogêneas

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

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;

Variáveis Compostas Heterogêneas

Exemplos Notação ponto separador:

Instrução with

meu_registro

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.