Sunteți pe pagina 1din 45

ESCOLA SECUNDRIA DAMIO DE GOES

CURSO PROFISSIONAL DE TCNICO DE GESTO E


PROGRAMAO DE SISTEMAS INFORMTICOS

PROGRAMAO DE SISTEMAS
INFORMTICOS

Modulo 5

Estrutura de Dados compostos

Record (ou Registo)


Em Pascal, a combinao de vrias informaes (podendo
ser de tipos diferentes) numa mesma estrutura ocorre
atravs de Records (Registos).
Um
record uma estrutura com as seguintes
caractersticas:
contm um nmero fixo de elementos chamados campos,
os campos podem ser de tipos diferentes,
cada campo tem um nome prprio, denominado "identificador
do campo"

Record

Pessoa
Nome

Idade
Altura

Record (ou Registo)


Registos ou Records:
So outro tipo de dados estruturados que permitem
agrupar elementos de vrios tipos diferentes, sob a
forma de campos, numa mesma estrutura.
Principal diferena 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 tambm so diferentes.

Exemplo tpico de dados organizveis sob a forma de


registos ou records o que se relaciona com
informaes sobre uma ou vrias pessoas.
Exemplo os seguintes dados poderiam ser os campos
de um registo :
Nome;
Morada;
Telefone;
Data

de nascimento, etc.

Diferenas entre arrays e records


Os arrays agrupam informaes do mesmo tipo, e o
seu acesso feito atravs de ndices.
Exemplo: Um vetor de strings armazena os nomes dos
empregados de uma firma, mas esse mesmo vetor ou
array no pode armazenar o vencimento desses
funcionrios, para isso cria-se outro array.
Os records ou registos agrupam vrios tipos de
informao, no necessitando esses serem todos do
mesmo tipo, e o seu acesso feito fazendo referncia
ao nome que os identifica.

Um registo um conjunto de vrios campos e podem


ser utilizados em vrias situaes, exemplo, artigos de
uma empresa, livros de uma biblioteca, dados
estatsticos sobre pases, etc.
Os registos podem ser definidos de 2 formas:
Diretamente

como varivel
Como tipo de dados

Definir um registo como varivel:


Var <identificador> : Record
<lista_campos>
end;

Exemplo: var pessoa: record


nome:string [20];
idade:integer;
altura,peso:real;
end;

Num registo, os campos so de vrios 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
Representao de uma pessoa:
type
Pessoa = record
Nome : String;
Idade: Integer;
Altura: Real
end;
var
X, Y: Pessoa;

As variveis X e Y so do tipo record Pessoa.


X e Y so formadas, cada uma, por um campo do tipo
String, outro integer e ainda outro real.

Exemplos

Representao 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

Representao de informaes sobre


um brinquedo

type
Brinquedo = record
Tipo : (Bola, Jogo, Boneca);
Custo : real;
Estado : (Bom, Avariado);
end;

Exemplos
Informaes de um funcionrio
type
Ficha = record
Nome : string [20];
Codigo : 1..999;
Salario : real;
end;
var
Funcionario1 : Ficha;

Record - Denotao

Um campo de uma varivel do tipo record


referenciada pelo nome da varivel seguida de um
ponto (".") e do nome do campo.
Exemplos:
Funcionario.Nome

refere-se ao campo Nome da


varivel Funcionario;
X.Idade refere-se ao campo Idade da varivel que
representa uma pessoa X.

Acesso

Para aceder aos campos primeiro precisamos de


entrar na entidade principal e depois no campo
respectivo:

Var Aluno: Pessoa;


Aluno.Nome:=Joo;
Aluno.Altura:=1.85;
Aluno.Idade:=57;
A entidade Aluno ficou
com os atributos acima.

Pessoa
Nome

Idade

Altura

Record Acesso simples


var Funcionario : ficha;
begin
write (Qual o nome do Funcionrio: );
readln (Funcionario.Nome);
write (Qual o cdigo do Funcionrio: );
readln (Funcionario.Codigo);
write (Qual o salrio do Funcionrio: );
readln (Funcionario.Salario);
end;

Record - Abreviao

Os campos de um registro podem ser referenciados


sem que seja necessria a prefixao com o nome da
varivel. Para tanto, utiliza-se o comando with.
Exemplo:

with Funcionario do
begin
write (Qual o nome do Funcionrio: );
readln (Nome);
write (Qual o cdigo do Funcionrio: );
readln (Codigo);
write (Qual o salrio do Funcionrio: );
readln (Salario);
end;

Comparao:
Normal:

var Funcionario : ficha;

Abreviado:

begin
with Funcionario do
write (Qual o nome do
begin
Funcionrio: );
write (Qual o nome do
readln (Funcionario.Nome);
Funcionrio: );
write (Qual o cdigo do
readln (Nome);
Funcionrio: );
write (Qual o cdigo do
readln
Funcionrio: );
(Funcionario.Codigo);
write (Qual o salrio do
readln (Codigo);
Funcionrio: );
write (Qual o salrio do
readln
Funcionrio: );
(Funcionario.Salario);
readln (Salario);
end;
end;

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 Abreviao

Outro exemplo

var Stock: array [1 . . 1000] of Brinquedo;


begin
. . .
with Stock[1] do
begin
Tipo := Bola;
Custo := 500.0;
Estado := Bom
end;
. . .
end.

Definio Hierrquica de Records (Registos)

Em Pascal, o campo de um registo pode ter como tipo


um outro registo (esta composio pode ocorrer em
vrios nveis).
Por exemplo, um funcionrio pode ser caracterizado por
um tipo record que contm: cdigo, nome, data de
nascimento, salrio e endereo.
A data de nascimento pode ser do tipo record contendo dia,
ms e ano.
O endereo pode tambm ser do tipo record contendo os
campos : rua, nmero, cidade e CP.

Definio Hierrquica 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 contm
os seguintes campos:
Nmero do cliente que do tipo integer;
Uma designao 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 variveis 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 so o nome, morada e telemvel.

O mesmo programa mas com a instruo with .do

2 - Elaborar um programa que pede ao utilizador a


introduo 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.

O mesmo programa com with.do

3 Pretende-se que elabore um programa que pede


ao utilizador o nome, o preo e a quantidade em
stock de 2 artigos.
Defina o registo como varivel.
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
atravs do produto dos preos com a quantidade.

Estruturas record com estruturas arrays

Uma varivel do tipo record, no permite


armazenar mais do que o conjunto de dados
correspondentes aos respectivos campos. Por
exemplo uma varivel como aluno, s permite
registar os dados (campos) relativos a um aluno de
cada vez. Se pretendemos registar de vrios alunos
teremos de criar vrias variveis conforme o n de
alunos (a1,a2,a3..)

Ento uma maneira para facilitar essa introduo de


dados criar um array com records.
Por exemplo para armazenar dados de 10 alunos
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)

Exerccio:

Pretende-se registar os dados (sexo e idade) de um


grupo de 4 alunos. Por fim o programa calcula a
mdia 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
mdia.

Rotina de entrada de dados

Begin
writeln (Introduo dos nomes);
for i:=1 to 10 do
begin
writeln (Digite o ,i, nome);
readln (nome[i]);
end;

Ordenao de uma matriz


1

122

Abel Simes

12:00

134

102

Rodrigo Vidal

13:30

123

905

Margarida Soares

01:45

1234

45

Tiago Aveiro

17:30

43

234

Isabel Marques

22:10

56

34

Rui Quintas

15:00

672

Tab

Temp

Temp
3

Tab [1]
Tab[2]

Rotina de ordenao 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;

Exerccio
Elabore um programa que pede 4 notas de 8 alunos,
no final apresenta os dados ordenados. A ordenao
ser feita com base no nome do aluno.
Nota: Utilize registos com arrays
Crie um procedimento para entrada de dados, outro
para ordenao dos dados e por ultimo um para
mostrar os dados.

S-ar putea să vă placă și