Upload
internet
View
108
Download
0
Embed Size (px)
Citation preview
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: registrointeiro:numeroliteral:origem,destino,data,horariointeiro:poltronareal:distancia
Fim_Registro
Registros
Exemplo:
Tipo Ficha_academia: registrointeiro:matriculaliteral:Nomereal:Pesoreal:Alturaliteral:Instrutor
Fim_Registro
Registros Declaração de variável composta do tipo registro
definidoTipo-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); erradoEscreva (aluno); erradoLeia (aluno.matrícula); corretoEscreva (aluno.nome); corretoaluno.peso ← 80.2 correto
Registros
Algoritmo <Registro_criança>Tipo Ficha_criança:Registro
inteiro:número_vivoliteral:nomeinteiro:diainteiro:mêsinteiro:anoliteral:pailiteral:mãeliteral:sexointeiro:dddinteiro:fone
Fim_RegistroFicha_criança:criança
Iníciocriança.número_vivo ←1233criança.nome ← “Andre Schmitt Medina”criança.dia ← 24criança.mês ← 12criança.ano ← 2003criança.pai ←“Aurélio Medina”criança.mãe ←“Cristina Schmitt”criança.sexo ←“M”criança.ddd ← 44criança.fone ← 2525005
Fim
Vejamos em seguida um algoritmo para armazenar os dados de um recém nascido
RegistrosOs 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:
RegistrosAlgoritmo <Registro_criança>Tipo data : Registro
inteiro:diainteiro:mêsinteiro:ano
Fim_RegistroTipo telefone : registro
inteiro:dddinteiro:fone
Fim-registroTipo Ficha_criança:Registro
inteiro:número_vivoliteral:nomedata:data_nascliteral:pailiteral:mãeliteral:sexotelefone: telef
Fim_RegistroFicha_criança:criança
Iníciocriança.número_vivo ←1233criança.nome ← “Andre Schmitt Medina”criança.data_nasc.dia ← 24criança.data_nasc.mês ← 12criança.data_nasc.ano ← 2003criança.pai ←“Aurélio Medina”criança.mãe ←“Cristina Schmitt”criança.sexo ←“M”criança.telef.ddd ← 44criança.telef.fone ← 2525005
Fim
Registros de conjuntosPodemos 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:_____
Baixa:
1 2 3 4 5 6
Tipo Estoque : Registroliteral:nomeinteiro:códigoreal:preçointeiro:Baixa[6]
Fim_RegistroEstoque: produto
Definição do tipo registro
Declaração da variável
Registros de conjuntosExemplo de Registro com campo de tipo matriz : Registro estoque com as baixas de 4 semanas
Nome: _________________________________Código: ______________________Preço:_____
Baixas:
1 2 3 4 5 6
Tipo Estoque2: Registroliteral:nomeinteiro:códigoreal:preçointeiro:Baixa[4][6]
Fim_RegistroEstoque2: produto2
Definição do tipo registro
Declaração da variável
1
2
3
4
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 Registrosb) 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 Registrosc) 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 NOME1001000 ALFAIATE2001050 ALMOXARIFE3002000 ANALISTA4002050 ANTROPÓLOGO5003000 BOMBEIRO6003050 CARPINTEIRO
. .
. .
. .99198050 TORNEIRO
100199000 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).
RegistrosAlgoritmo <profissões>Tipo profissão : Registro
inteiro:codigoliteral:nome
Fim_Registroprofissao:tabela[100]inteiro:i,k,coddessej
Iníciopara i de 1 até 100 repita
leia (tabela[i].codigo)leia (tabela[i].nome)
fim parak←1Repita
leia (coddessej)k←k+1i ←0repita
i ←i+1até 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
RegistrosRegistros
(5)Faça um algoritmo para criar uma agenda eletrônica. Na (5)Faça um algoritmo para criar uma agenda eletrônica. Na agenda poderemos guardar o nome, os e-mails (três, no agenda poderemos guardar o nome, os e-mails (três, no máximo), o endereço (rua, número, bairro) e os telefones máximo), o endereço (rua, número, bairro) e os telefones (residencial, comercial, celular) de até 20 pessoas. O algoritmo (residencial, comercial, celular) de até 20 pessoas. O algoritmo deve possibilitar ao usuário preencher a agenda e depois deve possibilitar ao usuário preencher a agenda e depois consultá-la. Para fazer uma consulta à agenda, o usuário consultá-la. Para fazer uma consulta à agenda, o usuário deverá fornecer o nome da pessoa. Se a pessoa estiver deverá fornecer o nome da pessoa. Se a pessoa estiver cadastrada na agenda, o algoritmo deverá exibir todas as cadastrada na agenda, o algoritmo deverá exibir todas as informações sobre ela; caso contrário, o algoritmo deverá informações sobre ela; caso contrário, o algoritmo deverá informar que a pessoa não está cadastrada. A consulta informar que a pessoa não está cadastrada. A consulta finalizará quando o usuário escrever FIM como nome.finalizará quando o usuário escrever FIM como nome.
RegistrosAlgoritmo <agenda>Tipo endereco: Registro
literal:rua,bairrointeiro:numero
Fim_RegistroTipo agenda : Registro
literal:nome,emails[3],fones[3]endereco:ende
Fim_Registroagenda:pessoas[20]inteiro:i,jliteral:nomedessejlogico:achou
Iníciopara i de 1 até 20 repita
leia (pessoas[i].nome)leia (pessoas[i].ende.rua)leia (pessoas[i].ende.numero)leia (pessoas[i].ende.bairro)para j de 1 até 3 repita
leia (pessoas[i].emails[j])leia (pessoas[i].fones[j])
fim parafim paraleia (nomedessej)enquanto (nomedessej<>“FIM ”) faça
achou←0para i de 1 até 20 repita
se (pessoas[i].nome=nomedessej)escreva (pessoas[i].ende.rua)achou←1i←20
fim sefim parase (!achou)
escreva(“Nome Inválido”)leia (nomedessej)
fim enquantoFim
Todas as informações deverão ser impressas. -
RegistrosRegistros((6)Faça um algoritmo para criar o cadastro dos funcionários de uma 6)Faça um algoritmo para criar o cadastro dos funcionários de uma
empresa. A empresa possui 50 funcionários. O cadastro deverá 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º 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. 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 O cadastro de funcionários deverá ser preenchido pelo usuário do algoritmo. Após preenchido o cadastro, o algoritmo deverá percorrê-algoritmo. Após preenchido o cadastro, o algoritmo deverá percorrê-lo procurando todos os funcionários com 3º grau, que tenham mais 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á 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 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 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.10 anos de serviço e que tenham apenas o 1º grau.
RegistrosRegistros(7) Faça um algoritmo para criar o cadastro dos produtos comercializados por uma (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 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 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 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 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 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 do fornecedor, de todos os produtos cuja quantidade real em estoque é inferior a quantidade mínima permitida.quantidade mínima permitida.
RegistrosRegistros
(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 (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 dRenda, o número de conta bancária, geralmente se adiciona ao número um dígito verificador. ígito verificador. Por exemplo, o número de matrícula 811057 é Por exemplo, o número de matrícula 811057 é usado como 8110573 onde 3 é o dígito verificador, calculado da seguinte maneira: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: (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 28 x 7, 1 x 6, 1 x 5, 0 x 4, 5 x 3, 7 x 2
(b) somam-se as parcelas obtidas:(b) somam-se as parcelas obtidas:
56+6+5+0+15+14=96;56+6+5+0+15+14=96;
(c ) calcula-se o resto da divisão desta soma por 11:(c ) calcula-se o resto da divisão desta soma por 11:
96 dividido por 11 dá resto 8 (96=8x11+8);96 dividido por 11 dá resto 8 (96=8x11+8);
(d) subtrai-se de 11 o resto obtido: 11-8=3;(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.(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.
RegistrosRegistros
Escrever um algoritmo capaz de: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 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.ú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:2. Utilizando o esquema de verificação acima, imprimir duas listas de clientes distintas no seguinte formato de saída:
CONTAS DE NÚMERO CORRETOCONTAS DE NÚMERO CORRETO
413599-7 987,30 Débora Newnchander413599-7 987,30 Débora Newnchander
111118-0 121,99 Juliana Berg111118-0 121,99 Juliana Berg
CONTAS DE NÚMERO ERRADOCONTAS DE NÚMERO ERRADO
765432-1 335,66 Júnia Faria765432-1 335,66 Júnia Faria
RegistrosAlgoritmo <digitoverificador>Tipo CadConta: Registro
literal:nomereal: saldointeiro: digver,numero
Fim_RegistroCadConta:validas[100],invalidas[100]inteiro:i,j,k,digver,peso
Inícioi ←0j ←0leia (conta.numero)enquanto (conta.numero<>0) faca
leia (conta.nome)leia (conta.digver)leia (conta.saldo)soma ←0peso ←2numero ← conta.numeroenquanto (numero<>0) faça
soma←soma+(mod(numero,10)*peso)numero ←div(numero,10)peso ←peso+1
fim enquantodigver ←11-mod(soma,11)se (digver>9) entao
digver ←0fim sese (digver=conta.digver) entao
i ← i+1validas[i].numero ←conta.numerovalidas[i].nome ←conta.nome
para i de 1 até 20 repitase (pessoas[i].nome=nomedessej)
escreva (pessoas[i].endereco.rua)achou←1i←20
fim sefim parase (!achou)
escreva(“Nome Inválido”)leia (nomedessej)
fim enquantoFim
Registrosvalidas[i].digver←conta.digvervalidas[i].saldo←conta.saldo
senaoj ← j+1invalidas[j].numero ←conta.numeroinvalidas[j].nome ←conta.nomeinvalidas[j].digver←conta.digverinvalidas[j].saldo←conta.saldo
fim sefim enquantok ←1escreva (“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 enquantoFim
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..
Registros