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
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. A consulta finalizará quando o usuário
escrever FIM como nome.
Início
para i de 1 até 20 repita
leia (pessoas[i].nome)
leia (pessoas[i].ende.rua)
Algoritmo <agenda>
leia (pessoas[i].ende.numero)
Tipo endereco: Registro
leia (pessoas[i].ende.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<>“FIM ”) faça
inteiro:i,j
achou←0
literal:nomedessej
para i de 1 até 20 repita
logico:achou
se (pessoas[i].nome=nomedessej)
escreva (pessoas[i].ende.rua)
Todas as informações deverão ser
impressas. -
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.
Registros
(8) Para evitar erros de digitação de sequências de números de importância
fundamental, como a matrícula de um aluno, o CPF do Imposto de Renda, o
número de conta bancária, geralmente se adiciona ao número um dígito
verificador. Por exemplo, o número de matrícula 811057 é usado como
8110573 onde 3 é o dígito verificador, calculado da seguinte maneira:
(a) cada algarismo do número multiplicado por um peso começando de 2 e
crescendo de 1, da direita para a esquerda:
8 x 7, 1 x 6, 1 x 5, 0 x 4, 5 x 3, 7 x 2
(b) somam-se as parcelas obtidas:
56+6+5+0+15+14=96;
(c ) calcula-se o resto da divisão desta soma por 11:
96 dividido por 11 dá resto 8 (96=8x11+8);
(d) subtrai-se de 11 o resto obtido: 11-8=3;
(e) se o valor encontrado for 10 ou 11, o dígito verificador será 0; nos outros
casos, o dígito verificador é o próprio valor encontrado.
Registros
Escrever um algoritmo capaz de:
1. Ler um conjunto de registros contendo, cada um, o número de uma conta
bancária, o dígito verificador deste número, o saldo da conta e o nome do
cliente. O último registro, que não deve ser considerado, contém o número
de conta igual a zero.
2. Utilizando o esquema de verificação acima, imprimir duas listas de
clientes distintas no seguinte formato de saída:
CONTAS DE NÚMERO CORRETO
413599-7 987,30 Débora Newnchander
111118-0 121,99 Juliana Berg
CONTAS DE NÚMERO ERRADO
765432-1 335,66 Júnia Faria
Início
i ←0
j ←0
leia (conta.numero)
Algoritmo <digitoverificador>
enquanto (conta.numero<>0) faca
Tipo CadConta: Registro
leia (conta.nome)
literal:nome
leia (conta.digver)
real: saldo
leia (conta.saldo)
inteiro: digver,numero
Fim_Registro
soma ←0
CadConta:validas[100],invalidas[100]
peso ←2
inteiro:i,j,k,digver,peso
numero ← conta.numero
enquanto (numero<>0) faça
soma←soma+(mod(numero,10)*peso)
numero ←div(numero,10)
peso ←peso+1
fim enquanto
digver ←11-mod(soma,11)
se (digver>9) entao
digver ←0
fim se
se (digver=conta.digver) entao
i ← i+1
validas[i].numero ←conta.numero
validas[i].nome ←conta.nome
Registros
Registros
validas[i].digver←conta.digver
validas[i].saldo←conta.saldo
senao
j ← j+1
invalidas[j].numero ←conta.numero
invalidas[j].nome ←conta.nome
invalidas[j].digver←conta.digver
invalidas[j].saldo←conta.saldo
fim se
fim enquanto
k ←1
escreva (“CONTAS DE NUMERO CORRETO”)
enquanto (k<=i)
escreva (validas[k].numero, “-”, validas[k].digver, validas[k].saldo, validas[k].nome)
fim enquanto
k ←1
escreva (“CONTAS DE NUMERO ERRADO”)
enquanto (k<=j)
escreva (invalidas[k].numero, “-”, invalidas[k].digver, invalidas[k].saldo,
invalidas[k].nome)
fim enquanto
Registros
•
•
Tarefas:
Estude a lista de exercícios resolvidos de
registros que se encontra no site da disciplina.
Resolva a lista de exercícios propostos de
registros que foi entregue na sala de aula..
Download

AEDI-estruturasdedados4