Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez.

32
Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez

Transcript of Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez.

Page 1: Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez.

Algoritmos e Estruturas de Dados I – Registros

Profa. Mercedes Gonzales Márquez

Page 2: 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.

Page 3: Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez.

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.

Page 4: Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez.

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

Page 5: Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez.

Registros

Exemplo:

Tipo Ficha_academia: registrointeiro:matriculaliteral:Nomereal:Pesoreal:Alturaliteral:Instrutor

Fim_Registro

Page 6: Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez.

Registros Declaração de variável composta do tipo registro

definidoTipo-registro : nome_variável

Exemplo:Ficha_academia:aluno

Page 7: Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez.

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

Page 8: Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez.

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

Page 9: Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez.

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:

Page 10: Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez.

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

Page 11: Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez.

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

Page 12: Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez.

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

Page 13: Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez.

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]

Page 14: Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez.

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;

Page 15: Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez.

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

Page 16: Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez.

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).

Page 17: Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez.

Conjunto de Registros

Tipo Passagem: registro

inteiro:numero

literal:origem,destino,data,horario

inteiro:poltrona

real:distancia

Fim_Registro

Passagem:onibus[44]

Page 18: Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez.

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]

Page 19: Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez.

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]

Page 20: Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez.

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

Page 21: Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez.

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.

Page 22: Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez.

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).

Page 23: Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez.

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

Page 24: Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez.

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.

Page 25: Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez.

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. -

Page 26: Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez.

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.

Page 27: Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez.

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.

Page 28: Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez.

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.

Page 29: Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez.

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

Page 30: Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez.

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

Page 31: Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez.

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

Page 32: Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez.

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