45
PROGRAMAÇÃO DE SISTEMAS INFORMÁTICOS Estrutura de Dados compostos ESCOLA SECUNDÁRIA D AMIÃO DE GOES CURSO PROFISSIONAL DE TÉCNICO DE GESTÃO E PROGRAMAÇÃO DE SISTEMAS INFORMÁTICOS Modulo 5

Psi_mod_5- Estruturas de Dados Compostas

Embed Size (px)

DESCRIPTION

Registos

Citation preview

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

Pessoa

Nome Idade

Altura

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.

O mesmo programa mas com a instrução with ….do

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.

O mesmo programa com with….do

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.