Algoritmos e Estruturas de Dados I Registros Profa

  • Slides: 32
Download presentation
Algoritmos e Estruturas de Dados I – Registros Profa. Mercedes Gonzales Márquez

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

Registros Variáveis Compostas Heterogêneas: l Variáveis compostas homogêneas consistem de conjuntos de dados do

Registros Variáveis Compostas Heterogêneas: l Variáveis compostas homogêneas consistem de conjuntos de dados do mesmo tipo (inteiros, reais, literais ou lógicos). l Quando temos dados de diferentes tipos (heterogêneos) logicamente agrupados, nós usamos variáveis compostas heterogêneas chamadas registros.

Registros l l Registros são conjuntos de dados logicamente relacionados, mas de tipos diferentes.

Registros l l 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 l Definição do tipo construído registro: Tipo <identificador> : registro <tipo do campo>:

Registros l 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:

Registros Exemplo: Tipo Ficha_academia: registro inteiro: matricula literal: Nome real: Peso real: Altura literal: Instrutor Fim_Registro

Registros l Declaração de variável composta do tipo registro definido Tipo-registro : nome_variável Exemplo:

Registros l Declaração de variável composta do tipo registro definido Tipo-registro : nome_variável Exemplo: Ficha_academia: aluno

Registros l O registro Ficha_academia agrupa as informações referentes a um aluno da academia.

Registros l O registro Ficha_academia agrupa as informações referentes a um aluno da academia. l Os registros não podem ser acessados sem especificação individual dos campos. l 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 l. Vejamos em seguida um algoritmo para armazenar os dados de um recém

Registros l. 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 l. Os registros vistos até agora possuíam em seus campos apenas informações de

Registros l. 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. l. Uma outra forma de armazenar os dados visando facilitar a leitura e interpretação do algoritmo anterior seria:

Registros Algoritmo <Registro_criança> Tipo data : Registro inteiro: dia inteiro: mês inteiro: ano Fim_Registro

Registros Algoritmo <Registro_criança> Tipo data : Registro inteiro: dia inteiro: mês inteiro: ano Fim_Registro Tipo telefone : registro inteiro: ddd inteiro: fone Fim-registro Tipo Ficha_criança: Registro inteiro: número_vivo literal: nome data: data_nasc literal: pai literal: mãe literal: sexo telefone: telef Fim_Registro Ficha_criança: criança Início criança. número_vivo ← 1233 criança. nome ← “Andre Schmitt Medina” criança. data_nasc. dia ← 24 criança. data_nasc. mês ← 12 criança. data_nasc. ano ← 2003 criança. pai ←“Aurélio Medina” criança. mãe ←“Cristina Schmitt” criança. sexo ←“M” criança. telef. ddd ← 44 criança. telef. fone ← 2525005 Fim

Registros de conjuntos Podemos também ter registros com campos vetor ou matriz. Exemplo de

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

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 Estoque 2: Registro literal: nome inteiro: código real: preço inteiro: Baixa[4][6] Fim_Registro Estoque 2: produto 2 Definição do tipo registro Declaração da variável

Registros de conjuntos l Manipulação A manipulação de um registro de conjunto deve obedecer

Registros de conjuntos l 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: produto 2. baixa[4][3]

Registros de conjuntos b) Construir o trecho de algoritmo que, usando a definição de

Registros de conjuntos b) Construir o trecho de algoritmo que, usando a definição de produto 2, escreva o nome do produto, o código, o preço e as baixas da segunda semana. … escreva (produto 2. nome); escreva (produto 2. codigo); escreva (produto 2. 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

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 + produto 2. Baixa[i][j] fim para escreva (j, ´totalizou ´, aux, ´ baixas´) fim para

Conjunto de Registros l l Nas estruturas compostas homogêneas (vetores e matrizes) utilizamos somente

Conjunto de Registros l l 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 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:

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

Conjunto de Registros Ex. Declare um conjunto de registros que comporte as informações de estoque de 500 produtos. Tipo Estoque 2: Registro literal: nome inteiro: código real: preço inteiro: Baixa[4][6] Fim_Registro Estoque 2: produtos[500] l

Conjunto de Registros l Exemplo: a) Se quisermos saber a baixa do décimo produto,

Conjunto de Registros l 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

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)

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: Faça um algoritmo que usando a tabela

Registros (4) Dada a tabela a seguir: 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]

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

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.

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

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

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,

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=8 x 11+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

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.

Início i ← 0 j ← 0 leia (conta. numero) Algoritmo <digitoverificador> enquanto (conta. numero<>0) faca Tipo Cad. Conta: Registro leia (conta. nome) literal: nome leia (conta. digver) real: saldo leia (conta. saldo) inteiro: digver, numero Fim_Registro soma ← 0 Cad. Conta: 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.

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

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