AEDI-estruturasdedados4
Download
Report
Transcript AEDI-estruturasdedados4
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..