PROGRAMAÇÃO DE SISTEMAS
INFORMÁTICOS
Estrutura de Dados compostos
ESCOLA SECUNDÁRIA DAMIÃO DE GOES
CURSO PROFISSIONAL DE TÉCNICO DE GESTÃO E
PROGRAMAÇÃO DE SISTEMAS INFORMÁTICOS
Modulo 5
Record (ou Registo)
Em Pascal, a combinação de várias informações (podendo
ser de tipos diferentes) numa mesma estrutura ocorre
através de Records (Registos).
Um record é uma estrutura com as seguintes
características:
contém um número fixo de elementos chamados campos,
os campos podem ser de tipos diferentes,
cada campo tem um nome próprio, denominado "identificador
do campo"
Record (ou Registo)
Registos ou Records:
São outro tipo de dados estruturados que permitem agrupar elementos de vários tipos diferentes, sob a forma de campos, numa mesma estrutura.
Principal diferença entre um array e um record:
um array agrupa um conjunto de dados do mesmo tipo;
um record pode juntar diferentes tipos de dados na mesma estrutura.
O modo de acesso aos elementos de um record e de um array também são diferentes.
Exemplo típico de dados organizáveis sob a forma de
registos ou records é o que se relaciona com
informações sobre uma ou várias pessoas.
Exemplo os seguintes dados poderiam ser os campos
de um registo :
Nome;
Morada;
Telefone;
Data de nascimento, etc.
Diferenças entre arrays e records
Os arrays agrupam informações do mesmo tipo, e o seu acesso é feito através de índices.
Exemplo: Um vetor de strings armazena os nomes dos empregados de uma firma, mas esse mesmo vetor ou array não pode armazenar o vencimento desses funcionários, para isso cria-se outro array.
Os records ou registos agrupam vários tipos de informação, não necessitando esses serem todos do mesmo tipo, e o seu acesso é feito fazendo referência ao nome que os identifica.
Um registo é um conjunto de vários campos e podem
ser utilizados em várias situações, exemplo, artigos de
uma empresa, livros de uma biblioteca, dados
estatísticos sobre países, etc.
Os registos podem ser definidos de 2 formas:
Diretamente como variável
Como tipo de dados
Definir um registo como variável:
Var <identificador> : Record
<lista_campos>
end;
Exemplo: var pessoa: record
nome:string [20];
idade:integer;
altura,peso:real;
end;
Num registo, os campos são de vários tipos de dados, isto é, podem ser inteiros, reais, vectores, matrizes, etc.
No nosso exemplo NOME é do tipo string com 20 caracteres, o que funciona como um array de 20 elementos char.
Quando temos dois ou mais campos com o mesmo tipo de dados, esses podem incluir-se no mesmo grupo, separados por virgulas.
Definir um registo como tipo de dados
Type <identificador> = record
<lista_campos>
end;
Exemplo: type pessoa = record
nome: string[20];
idade: integer;
altura, peso: real;
end;
Exemplos
Representação de uma pessoa: type
Pessoa = record
Nome : String;
Idade: Integer;
Altura: Real
end;
var
X, Y: Pessoa;
As variáveis X e Y são do tipo record Pessoa.
X e Y são formadas, cada uma, por um campo do tipo
String, outro integer e ainda outro real.
Exemplos
Representação de uma data
type
Data = record
Dia : 1 . . 31;
Mes : (Jan,Fev,Mar,Abr,Mai,Jun,
Jul,Ago,Set,Out,Nov,Dez);
Ano : integer
end;
Exemplo
Representação de informações sobre
um brinquedo
type
Brinquedo = record
Tipo : (Bola, Jogo, Boneca);
Custo : real;
Estado : (Bom, Avariado);
end;
Exemplos
Informações de um funcionário
type
Ficha = record
Nome : string [20];
Codigo : 1..999;
Salario : real;
end;
var
Funcionario1 : Ficha;
Record - Denotação
Um campo de uma variável do tipo record é
referenciada pelo nome da variável seguida de um
ponto (".") e do nome do campo.
Exemplos:
Funcionario.Nome refere-se ao campo Nome da
variável Funcionario;
X.Idade refere-se ao campo Idade da variável que
representa uma pessoa X.
Acesso
Para aceder aos campos primeiro precisamos de
“entrar” na entidade principal e depois no campo
respectivo:
Pessoa
Nome Idade
Altura
Var Aluno: Pessoa;
Aluno.Nome:=„João‟;
Aluno.Altura:=1.85;
Aluno.Idade:=57;
A entidade Aluno ficou
com os atributos acima.
Record – Acesso simples var Funcionario : ficha;
begin
write (‘Qual o nome do Funcionário: ‘);
readln (Funcionario.Nome);
write (‘Qual o código do Funcionário: ’);
readln (Funcionario.Codigo);
write (‘Qual o salário do Funcionário: ‘);
readln (Funcionario.Salario);
end;
Record - Abreviação
Os campos de um registro podem ser referenciados sem que seja necessária a prefixação com o nome da variável. Para tanto, utiliza-se o comando with. Exemplo:
with Funcionario do
begin
write (‘Qual o nome do Funcionário: ‘);
readln (Nome);
write (‘Qual o código do Funcionário: ’);
readln (Codigo);
write (‘Qual o salário do Funcionário: ‘);
readln (Salario);
end;
Comparação:
Abreviado:
with Funcionario do
begin
write (‘Qual o nome do Funcionário: ‘);
readln (Nome);
write (‘Qual o código do Funcionário: ’);
readln (Codigo);
write (‘Qual o salário do Funcionário: ‘);
readln (Salario);
end;
Normal:
begin
write (‘Qual o nome do Funcionário: ‘);
readln (Funcionario.Nome);
write (‘Qual o código do Funcionário: ’);
readln (Funcionario.Codigo);
write (‘Qual o salário do Funcionário: ‘);
readln (Funcionario.Salario);
end;
var Funcionario : ficha;
Record com arrays
var Stock: array [1 . . 1000] of Brinquedo;
begin
Stock[1].Tipo := Bola;
Stock[1].Custo := 500.0;
Stock[1].Estado := Bom
end;
. . .
end.
Record Abreviação
Outro exemplo
var Stock: array [1 . . 1000] of Brinquedo;
begin
. . .
with Stock[1] do
begin
Tipo := Bola;
Custo := 500.0;
Estado := Bom
end;
. . .
end.
Definição Hierárquica de Records (Registos)
Em Pascal, o campo de um registo pode ter como tipo um outro registo (esta composição pode ocorrer em vários níveis).
Por exemplo, um funcionário pode ser caracterizado por um tipo record que contém: código, nome, data de nascimento, salário e endereço.
A data de nascimento pode ser do tipo record contendo dia, mês e ano.
O endereço pode também ser do tipo record contendo os campos : rua, número, cidade e CP.
Definição Hierárquica de Records (Registos) - Exemplo Type
TData = record
Dia : 1 . . 31;
Mes : 1 . . 12;
Ano : integer;
end;
TEnder = record
Rua : string [30];
Numero : integer;
Apto : integer;
Cidade : string [20];
CP : string [8];
end;
Registo = record
Codigo : 1 . . 1000;
Nome : string [40];
DtNasc : TData;
Salario : real;
Endereco : TEnder;
end;
Hierarquia de Registro
Acesso aos Campos
Type
. . .
Registo = record
Codigo : 1 . . 1000;
Nome : string [40];
DtNasc : TData;
Salario : real;
Endereco : TEnder;
end;
Var
R, S: Registo;
Begin
R.Codigo:= 5;
R.DtNasc.dia:= 13;
R.Salario:= 3333.33;
R.Endereco.Rua:= ’Rua de baixo da ponte da barra’;
R.Endereco.Cidade:= ’Aveiro’;
S:= R;
End.
Outros exemplos:
Crie um registo de cliente, sabendo que esse contém
os seguintes campos:
Número do cliente que é do tipo integer;
Uma designação do tipo de conta do cliente que é do
tipo char;
O saldo do cliente que é do tipo Real.
Com base nesses dados crie o registo de cliente?
Este pode ser feito das duas maneiras declaradas
anteriormente:
var cliente : record
numcliente:integer;
tipoconta:char;
saldo:real;
end;
type conta = record
numcliente:integer;
tipoconta:char;
saldo:real;
end;
VAR cliente : conta;
Ambas tem o mesmo resultado, só que esta última
abordagem é mais geral, porque nos permite
introduzir variáveis se assim o entendermos.
EXERCICIOS
1 – Elaborar um programa que solicita os dados de
um aluno e no final mostra os dados introduzidos.
Os dados a pedir são o nome, morada e telemóvel.
2 - Elaborar um programa que pede ao utilizador a
introdução dos dados pessoais de duas pessoas,
depois de introduzidos os dados, o programa indica
o nome da pessoa mais nova.
Como dados pessoais, temos o nome e a idade.
3 – Pretende-se que elabore um programa que pede
ao utilizador o nome, o preço e a quantidade em
stock de 2 artigos.
Defina o registo como variável.
Depois dos dados introduzidos o programa irá
escrever os nomes dos dois artigos, seguido dos
valores em stock de cada um deles. Esse calcula-se
através do produto dos preços com a quantidade.
Estruturas record com estruturas arrays
Uma variável do tipo record, não permite
armazenar mais do que o conjunto de dados
correspondentes aos respectivos campos. Por
exemplo uma variável como aluno, só permite
registar os dados (campos) relativos a um aluno de
cada vez. Se pretendemos registar de vários alunos
teremos de criar várias variáveis conforme o nº de
alunos (a1,a2,a3…..)
type dados = record
nome:string[20];
morada:string[30];
end;
Var alunos : array [1..10] of dados;
Para ler um nome escreve-se:
Read (alunos [i].nome)
Então uma maneira para facilitar essa introdução de
dados é criar um array com records.
Por exemplo para armazenar dados de 10 alunos
Exercício:
Pretende-se registar os dados (sexo e idade) de um grupo de 4 alunos. Por fim o programa calcula a média das idades introduzidas, separadamente, por sexos.
Necessitamos de:
• Introduzir os dados dos 4 elementos
• Verificar se é masculino ou feminino
• Somar as idades por sexo e por fim calcular a sua média.
Rotina de entrada de dados
Begin
writeln („Introdução dos nomes‟);
for i:=1 to 10 do
begin
writeln („Digite o „,i,‟ º nome‟);
readln (nome[i]);
end;
1 122 Abel Simões 12:00 134
2 102 Rodrigo Vidal 13:30 123
3 905 Margarida Soares 01:45 1234
4 45 Tiago Aveiro 17:30 43
5 234 Isabel Marques 22:10 56
6 34 Rui Quintas 15:00 672
Temp
Tab
Tab [1]
Temp
Tab[2]
1
2
3
Ordenação de uma matriz
Rotina de ordenação de dados:
For i:=1 to 9 do
Begin
for j:=i+1 to 10 do
begin
if (tab[i].cod>tab[j].cod) then
begin
temp:=tab[i];
tab[i]:=tab[j];
tab[j]:=temp;
end;
end;
End;
Exercício
Elabore um programa que pede 4 notas de 8 alunos,
no final apresenta os dados ordenados. A ordenação
será feita com base no nome do aluno.
Nota: Utilize registos com arrays
Crie um procedimento para entrada de dados, outro
para ordenação dos dados e por ultimo um para
mostrar os dados.
Top Related