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ão
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-se 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 ter 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
Escreva um algoritmo que, dados 500 CODIGOS
DE PROFISSÃO (fornecidos em 500 linhas),
emita o NOME das profissões correspondentes.
A tabela acima também deve ser lida.
Início
para i de 1 até 100 repita
leia (tabela[i].codigo)
Registros
leia (tabela[i].nome)
fim para
Algoritmo <profissões>
k←1
Tipo profissão : Registro
Repita
inteiro:codigo
leia (coddessej)
literal:nome
Fim_Registro
k←k+1
profissao:tabela[100]
achou←0
inteiro:i,k,coddessej
para i de 1 até 100 repita
logico:achou
se (tabela[i].codigo= coddessej)
escreva (tabela[i].nome)
achou←1
i←100
fim se
fim para
se (!achou)
escreva(“Código Inválido”)
até que (k>500)
Fim
Registros
(5)Faça um algoritmo para criar uma agenda eletrônica. Na
agenda poderemos guardar o nome, os e-mails (três, no
máximo), o endereço (rua, número, bairro) e os telefones
(residencial, comercial, celular) de até 20 pessoas. O
algoritmo deve possibilitar ao usuário preencher a
agenda e depois consultá-la. Para fazer uma consulta à
agenda, o usuário deverá fornecer o nome da pessoa. Se
a pessoa estiver cadastrada na agenda, o algoritmo
deverá exibir todas as informações sobre ela; caso
contrário, o algoritmo deverá informar que a pessoa não
está cadastrada.
Início
para i de 1 até 20 repita
leia (pessoas[i].nome)
leia (pessoas[i].endereco.rua)
Algoritmo <agenda>
leia (pessoas[i].endereco.numero)
Tipo endereco: Registro
leia (pessoas[i].endereco.bairro)
literal:rua,bairro
para j de 1 até 3 repita
inteiro:numero
leia (pessoas[i].emails[j])
Fim_Registro
leia (pessoas[i].fones[j])
Tipo agenda : Registro
literal:nome,emails[3],fones[3] fim para
endereco:ende
fim para
Fim_Registro
leia (nomedessej)
agenda:pessoas[20]
enquanto (nomedessej<>“ ”) faça
inteiro:i,nomedessej
achou←0
logico:achou
para i de 1 até 20 repita
se (pessoas[i].nome=nomedessej)
escreva (pessoas[i].endereco.rua)
achou←1
i←20
fim se
fim para
se (!achou)
escreva(“Nome Inválido”)
leia (nomedessej)
Registros
Registros
(6)Faça um algoritmo para criar o cadastro dos funcionários
de uma empresa. A empresa possui 50 funcionários. O
cadastro deverá conter o nome, o número de matrícula, o
grau de escolaridade (1º, 2º ou 3º), o tempo de serviço
(em anos) e o salário de cada funcionário. O cadastro de
funcionários deverá ser preenchido pelo usuário do
algoritmo. Após preenchido o cadastro, o algoritmo deverá
percorrê-lo procurando todos os funcionários com 3º grau,
que tenham mais de 5 anos de serviço e que ganhem
menos de R$ 1000,00 e deverá dar a eles um aumento de
20%. Ao final, o algoritmo deverá exibir o nome e o
número de matrícula de todos os funcionários com mais
de 10 anos de serviço e que tenham apenas o 1º grau.
Registros
(7) Faça um algoritmo para criar o cadastro dos produtos
comercializados por uma loja. O cadastro deverá conter,
para cada produto, o código, sua descrição, o nome do
fornecedor, a quantidade mínima permitida em estoque e
a quantidade real em estoque. A loja em questão
comercializa 100 produtos diferentes. O cadastro de
produtos deverá ser preenchido pelo usuário do programa.
Após preenchido o cadastro, o programa deverá exibir o
código, a descrição e o nome do fornecedor, de todos os
produtos cuja quantidade real em estoque é inferior a
quantidade mínima permitida.
Download

AEDI-estruturadedados3