Registros
Computação e Calculo Numérico:
Linguagem Pascal
Guaratinguetá
junho de 2004
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
2
01010101010
10101010101
Registros
Variáveis Compostas Heterogêneas (1/12)
As variáveis vistas até agora eram:
⌦simples: definidas por tipo integer, real, char;
⌦compostas homogêneas: definidas por array.
Registros podem possuir variáveis de tipos
diferentes e são declaradas da seguinte forma:
type reg = record
campo1 : tipo1;
campo2 : tipo2;
...
campon : tipon;
end;
Printed with FinePrint - purchase at www.fineprint.com
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
3
01010101010
10101010101
Registros
Variáveis Compostas Heterogêneas (2/12)
Um registro pode ser visto como uma ficha de
dados. Por exemplo,
Pode ser integer, real, string
Pode ser um vetor de 255 caracteres
INSCRIÇÃO
NOME
RUA
NÚMERO
Integer ou vetor
Pode ser um vetor de 64 caracteres de 4 caracter
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
4
01010101010
10101010101
Registros
Variáveis Compostas Heterogêneas (2/12)
Esta ficha é representada na linguagem
Pascal da seguinte forma:
type ficha = record
inscricao : integer;
nome : array[1..255] of char;
rua : array[1..64] of char;
numero : integer;
end;
Printed with FinePrint - purchase at www.fineprint.com
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
5
01010101010
10101010101
Registros
Variáveis Compostas Heterogêneas (3/12)
Dada uma declaração em Pascal:
type Produto = record
cod
: array[1..8] of char;
nome : array[1..30] of char;
quant : integer;
custo : real;
end;
var prod : Produto;
Como é feito o acesso às variáveis?
prod.cod
prod.nome
prod.quant
prod.custo
:=
:=
:=
:=
‘12345678’;
‘arroz’;
1000;
0.82;
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
6
01010101010
10101010101
Registros
Variáveis Compostas Heterogêneas (4/12)
Comando WITH
⌦permite ao programador omitir a referência da
variável definida pelo RECORD.
with prod do
begin
cod
:= ‘12345678’;
nome := ‘arroz’;
quant := 1000;
custo := 0.82;
end;
Printed with FinePrint - purchase at www.fineprint.com
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
7
01010101010
10101010101
Registros
Variáveis Compostas Heterogêneas (5/12)
Se, ao invés de uma única ficha, quisermos
cadastrar n fichas?
SOLUÇÃO: criar um vetor de registros!
Como seria a declaração de um vetor do tipo
Produto?
var
produtos : array[1 .. 5] of Produto;
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
8
01010101010
10101010101
Registros
Variáveis Compostas Heterogêneas (6/12)
Observações:
⌦Registro (record): define um “conjunto” de variáveis
que podem ser de tipos diferentes;
⌦Vetor (array): é uma “lista” de elementos de mesmo
tipo. Por ex., a seguinte declaração:
var lista : array[1..5] of Produto;
declara uma variável lista contendo elementos do tipo
Produto.
Printed with FinePrint - purchase at www.fineprint.com
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
9
01010101010
10101010101
Registros
Variáveis Compostas Heterogêneas (7/12)
produtos
10547
[1]
JOSÉ DA SILVA
RUA PINDAMONHANGABA
27490
[2]
13859
[3]
9221
[4]
MARIA JOSÉ
RUA ONDE?
8484
MELISSA SOUTO
RUA CADÊ?
4393
VALTER MERCADO
AVENIDA 0900-1010
23784
[5]
1840
2424
JOÃO FIGUEIRA
RUA DAS ANDORINHAS
1234
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
10
01010101010
10101010101
Registros
Variáveis Compostas Heterogêneas (7/12)
produtos
[1]
[2]
[3]
[4]
[5]
10547
JOSÉ DA SILVA
RUA PINDAMONHANGABA
MARIA JOSÉ
RUA ONDE?
referenciar
este campo?
1840
27490
Como
13859
9221
MELISSA SOUTO
RUA CADÊ?
4393
VALTER MERCADO
AVENIDA 0900-1010
23784
JOÃO FIGUEIRA
RUA DAS ANDORINHAS
Printed with FinePrint - purchase at www.fineprint.com
8484
2424
1234
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
11
01010101010
10101010101
Registros
Exercício 1 (8/12)
Faça um programa para ler 10 fichas de
empregados de uma empresa. Cada ficha possui
o seguinte formato:
NUMEMP
NOMEMP
ENDEREÇO DATAEMP SEXO SALÁRIO
Observações:
⌦O campo DATAEMP deve ser dividido em 3 variáveis:
dia, mês, ano;
⌦O campo NUMEMP é do tipo inteiro;
⌦O campo NOMEMP, ENDEREÇO é do tipo string;
⌦O campo SEXO é do tipo caracter;
⌦O campo SALÁRIO é do tipo real.
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
program leia_fichas;
01010101010
10101010101
type ficha = record
01010101010
numemp
: integer;
10101010101
01010101010
nomemp, endereco : string;
10101010101
01010101010
dia, mes, ano : integer;
10101010101
sexo: char; salario : real;
01010101010
10101010101
end;
01010101010
10101010101
vetorfichas = array[1..10] of ficha;
01010101010
var fichas : vetorfichas; i : integer;
10101010101
01010101010
begin
10101010101
01010101010
for i := 1 to 10 do begin
10101010101
readln(fichas[i].numemp); readln(fichas[i].nomemp);
01010101010
10101010101
readln(fichas[i].endereco); readln(fichas[i].dia);
01010101010
readln(fichas[i].mes); readln(fichas[i].ano); 10101010101
01010101010
readln(fichas[i].sexo); readln(fichas[i].salario);
10101010101
01010101010
end;
10101010101
01010101010
end.
10101010101
12
01010101010
10101010101
Registros
Exercício 1 - RESPOSTA (9/12)
Printed with FinePrint - purchase at www.fineprint.com
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
13
01010101010
10101010101
Registros
Exercício 2 (10/12)
Faça o mesmo programa utilizando o comando
WITH para referenciar as variáveis.
Observação:
⌦Cada elemento do vetor fichas é um elemento do tipo
ficha declarado anteriormente.
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
14
01010101010
10101010101
Registros
Exercício 2 - RESPOSTA (11/12)
program leia_fichas2;
type ficha = record
...
end;
vfichas = array[1..10] of ficha;
var fichas : vfichas; i : integer;
begin
for i := 1 to 10 do begin
with fichas[i] do begin
readln(numemp); readln(nomemp);
readln(endereco); readln(dia);
readln(mes); readln(ano);
readln(sexo); readln(salario);
end;
end;
end.
Printed with FinePrint - purchase at www.fineprint.com
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
15
01010101010
10101010101
Registros
Variáveis Compostas Heterogêneas (12/12)
Uma atribuição que tenha a seguinte forma:
for i := 1 to 10 do
fichas2[i] := fichas[i]
pode ser feita? Sendo que fichas2 é do tipo
vfichas?
Atribuições entre registros só podem ser feitas
quando os campos são IGUAIS!
Printed with FinePrint - purchase at www.fineprint.com
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
01010101010
10101010101
16
01010101010
10101010101
Download

CCN_6_Registro