Algoritmos e Estruturas de Dados I
– Registros
Profa. Mercedes Gonzales
Márquez
Registros
Variáveis Compostas Heterogêneas:
 Variáveis compostas homogêneas consistem de
conjuntos de dados do mesmo tipo (inteiros,
reais, literais ou lógicos).
 Quando temos dados de diferentes tipos
(heterogêneos) logicamente agrupados, nós
usamos variáveis compostas heterogêneas
chamadas registros.
Registros


Registros são conjuntos de dados logicamente
relacionados,mas de tipos diferentes.
Exemplo: uma passagem de ônibus formada por um
conjunto de dados logicamente relacionados de tipos
diferentes, tais como número da passagem (inteiro),
origem e destino (literal), data (literal), horário (literal),
poltrona (inteiro), distância (real), que são subdivisões do
registro (elementos do conjunto), também chamadas de
campos.
Registros

Definição do tipo construído registro:
Tipo <identificador> : registro
<tipo do campo>: <campo 1>
<tipo do campo>: <campo 2>
...
<tipo do campo>:<campo n>
Fim_Registro
Exemplo:
Tipo Passagem: registro
inteiro:numero
literal:origem,destino,data,horario
inteiro:poltrona
real:distancia
Fim_Registro
Registros
Exemplo:
Tipo Ficha_academia: registro
inteiro:matricula
literal:Nome
real:Peso
real:Altura
literal:Instrutor
Fim_Registro
Registros

Declaração de variável composta do tipo registro
definido
Tipo-registro : nome_variável
Exemplo:
Ficha_academia:aluno
Registros

O registro Ficha_academia agrupa as informações
referentes a um aluno da academia.

Os registros não podem ser acessados sem especificação
individual dos campos.

Especifica-se o nome do registro e o nome do campo que
se deseja utilizar separado pelo caractere “.” (ponto). Tal
ponto estabelece separação entre o nome do registro e o
nome do campo.
Exemplo;
Leia (aluno); errado
Escreva (aluno); errado
Leia (aluno.matrícula); correto
Escreva (aluno.nome); correto
aluno.peso ← 80.2 correto
Registros
Vejamos
em seguida um algoritmo para armazenar os
dados de um recém nascido
Algoritmo <Registro_criança>
Tipo Ficha_criança:Registro
inteiro:número_vivo
literal:nome
inteiro:dia
inteiro:mês
inteiro:ano
literal:pai
literal:mãe
literal:sexo
inteiro:ddd
inteiro:fone
Fim_Registro
Ficha_criança:criança
Início
criança.número_vivo ←1233
criança.nome ← “Andre Schmitt
Medina”
criança.dia ← 24
criança.mês ← 12
criança.ano ← 2003
criança.pai ←“Aurélio Medina”
criança.mãe ←“Cristina Schmitt”
criança.sexo ←“M”
criança.ddd ← 44
criança.fone ← 2525005
Fim
Registros
Os
registros vistos até agora possuíam em seus
campos apenas informações de tipos primitivos,
entretanto, podemos dispor também de campos
que são compostos, ou seja, formados por outros
tipos construídos.
Uma
outra forma de armazenar os dados visando
facilitar a leitura e interpretação do algoritmo
anterior seria:
Registros
Algoritmo <Registro_criança> Início
Tipo data : Registro
criança.número_vivo ←1233
inteiro:dia
inteiro:mês
criança.nome
“Andre Schmitt
inteiro:ano
Medina”
Fim_Registro
criança.data_nasc.dia ← 24
Tipo telefone : registro
inteiro:ddd
criança.data_nasc.mês ← 12
inteiro:fone
Fim-registro
criança.data_nasc.ano
2003
Tipo Ficha_criança:Registro
criança.pai ←“Aurélio Medina”
inteiro:número_vivo
literal:nome
criança.mãe ←“Cristina Schmitt”
data:data_nasc
criança.sexo ←“M”
literal:pai
literal:mãe
criança.telef.ddd
44
literal:sexo
telefone: telef
criança.telef.fone ← 2525005
Fim_Registro
Fim
Ficha_criança:criança
←
←
←
Registros de conjuntos
Podemos também ter registros com campos vetor ou matriz.
Exemplo de Registro com campo de tipo vetor: Registro
estoque com as baixas de uma semana
Nome: _________________________________
Código: ______________________Preço:_____
1
2
3
4
5
6
Baixa:
Tipo Estoque : Registro
literal:nome
inteiro:código
real:preço
inteiro:Baixa[6]
Fim_Registro
Estoque: produto
Definição do tipo registro
Declaração da variável
Registros de conjuntos
Exemplo de Registro com campo de tipo matriz : Registro
estoque com as baixas de 4 semanas
Nome: _________________________________
Código: ______________________Preço:_____
1
2
3
4
5
6
1
Baixas: 2
3
4
Tipo Estoque2: Registro
literal:nome
inteiro:código
real:preço
inteiro:Baixa[4][6]
Fim_Registro
Estoque2: produto2
Definição do tipo registro
Declaração da variável
Registros de conjuntos

Manipulação
A manipulação de um registro de conjunto deve
obedecer às manipulações próprias de cada
estrutura de dados anteriormente definida.
Exemplo:
a) Para acessar o quanto foi vendido do produto
no terceiro dia da quarta semana, teríamos:
produto2.baixa[4][3]
Registros de conjuntos
b) Construir o trecho de algoritmo que, usando a
definição de produto2, escreva o nome do
produto, o código, o preço e as baixas da
segunda semana.
…
escreva (produto2.nome);
escreva (produto2.codigo);
escreva (produto2.preço);
para j de 1 até 6 repita
escreva (produto.Baixa[2][j]);
fim para;
Registros de conjuntos
c) Construa o trecho do algoritmo que totalize por
dia da semana todos os dias do mês.
…
para j de 1 até 6 repita
aux ← 0;
para i de 1 até 4 repita
aux ← aux + produto2.Baixa[i][j]
fim para
escreva (j, ´totalizou ´, aux, ´ baixas´)
fim para
Conjunto de Registros


Nas estruturas compostas homogêneas (vetores
e matrizes) utilizamos somente tipos de dados
primitivos. Agora utilizaremos não apenas um
tipo primitivo, mas sim os tipos construídos
(registros).
Exemplo: Suponha que queremos informações
relativas à passagens rodoviárias dos 44 lugares
de um ônibus. Criamos um vetor no qual cada
posição é um elemento de tipo registro
(passagem).
Conjunto de Registros
Tipo Passagem: registro
inteiro:numero
literal:origem,destino,data,horario
inteiro:poltrona
real:distancia
Fim_Registro
Passagem:onibus[44]
Conjunto de Registros
Ex. Declare um conjunto de registros que
comporte as informações de estoque de 500
produtos.
Tipo Estoque2: Registro
literal:nome
inteiro:código
real:preço
inteiro:Baixa[4][6]
Fim_Registro
Estoque2: produtos[500]

Conjunto de Registros

Exemplo:
a) Se quisermos saber a baixa do décimo
produto, da terceira semana do mês e do quarto
dia da semana, escreveríamos:
produtos[10].Baixa[3][4]
Conjunto de Registros
b) Elabore o trecho de um algoritmo que imprima o total de
movimentação do estoque para cada um dos 500
produtos:
...
para N de 1 até 500 repita
ACM ← 0;
para i de 1 até 4 repita
para j de 1 até 6 repita
ACM ← ACM + produtos[N].Baixa[i][j]
fim para;
fim para
escreva (produtos[N].nome, ACM);
fim para
Conjunto de Registros
c) Usando o registro de estoque definido nos
exemplos, elabore:
a) um algoritmo que imprima o produto de maior
saída;
b) um algoritmo que imprima a diferença
percentual entre a maior e a menor saída;
c) um relatório com a semana de maior saída de
cada produto.
Registros
(4) Dada a tabela a seguir:
CODIGO
1 001000
2 001050
3 002000
4 002050
5 003000
6 003050
.
.
.
99 198050
100 199000
NOME
ALFAIATE
ALMOXARIFE
ANALISTA
ANTROPÓLOGO
BOMBEIRO
CARPINTEIRO
.
.
.
TORNEIRO
VENDEDOR
Faça um algoritmo que usando a tabela de
profissões acima, escreva o nome da profissão
correspondente após a leitura do código de
profissão (500 códigos devem ser lidos).
Registros
Algoritmo <profissões>
Tipo profissão : Registro
inteiro:codigo
literal:nome
Fim_Registro
profissao:tabela[100]
inteiro:i,k,coddessej
Início
para i de 1 até 100 repita
leia (tabela[i].codigo)
leia (tabela[i].nome)
fim para
k←1
Repita
leia (coddessej)
k←k+1
i ←0
repita
i ←i+1
até que (tabela[i].codigo= coddessej ou i>100)
se (tabela[i].codigo=coddessej) então
escreva (tabela[i].nome)
senão
escreva(“Código Inválido”)
fim se
até que (k>500)
Fim
Download

Registros