Introdução a Algoritmos Parte 07



Documentos relacionados
Estruturas de dados heterogêneas

algoritmo "Exercício sobre registros" tipo data: registro inicio dia:inteiro mes: inteiro ano: inteiro fimregistro tipo registro_conta: registro

Introdução a Algoritmos Parte 04

Aula 11 Introdução ao Pseudocódigo. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Estruturas (registros)

Algoritmos com VisuAlg

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto

Orientação a Objetos

Projeto SIGA-EPT. Manual do usuário Módulo Requisição de Almoxarifado SISTEMA INTEGRADO DE GESTÃO ACADÊMICA

PROGRAMANDO EM C# ORIENTADO A OBJETOS

Algoritmo. Linguagem natural: o Ambígua o Imprecisa o Incompleta. Pseudocódigo: o Portugol (livro texto) o Visualg (linguagem) Fluxograma

Algoritmo e Programação

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá.

ALGORITMOS MEMÓRIA, VARIÁVEIS E CONSTANTES, OPERADORES Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

Estruturas II UFOP 1/1

Fig.1: Ilustração de Estrutura de Dados Fonte: Internet

ESTRUTURA DE DADOS -VARIÁVEIS COMPOSTAS. Prof. Angelo Augusto Frozza, M.Sc.

AULA 12 FUNÇÕES Disciplina: Algoritmos e POO Professora: Alba Lopes alba.lopes@ifrn.edu.br

UNIDADE 6 - PROGRAMAÇÃO MODULAR

MANUAL ITCMD - DOAÇÃO

Trabalho Final. Data da Submissão: das 8h do dia 16/06 às 24h do dia 17/06. Data da Entrega do Relatório: das 15h às 18h no dia 18/06.

Apostila de Fundamentos de Programação I. Prof.: André Luiz Montevecchi

Resolução de problemas e desenvolvimento de algoritmos

SophiA Biblioteca - Treinamento Cadastro de Usuários

Regras Métodos Identificadores Variáveis Constantes Tipos de dados Comandos de atribuição Operadores aritméticos, relacionais e lógicos

VisuALG Estruturas de Repetição. Professores: Vilson Heck Junior Felipe Schneider Costa

CONCEITOS BÁSICOS PARA A CONSTRUÇÃO DE ALGORITMOS PARA COMPUTADORES. Isac Aguiar isacaguiar.com.br isacaguiar@gmail.com

Estruturas (Registros)

Neste método o cálculo é efetuado de maneira exponencial, ou seja, juros são computados sobre os juros anteriormente calculados.

Programação de Computadores I Pseudocódigo PROFESSORA CINTIA CAETANO

AULA 12 CLASSES DA API JAVA. Disciplina: Programação Orientada a Objetos Professora: Alba Lopes alba.lopes@ifrn.edu.br

MANUAL DO GERENCIADOR ESCOLAR WEB

UNIVERSIDADE FEDERAL DE RORAIMA PRÓ REITORIA DE PLANEJAMENTO DIRETORIA DE TECNOLOGIA DA INFORMAÇÃO COORDENAÇÃO DE SISTEMAS DE INFORMAÇÃO

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

CONSTITUIÇÃO DE PROVISÃO PARA DEVEDORES DUVIDOSOS

ÍNDICE. Futura Ponto (REP) Configurações Iniciais Cadastrar Horário Configurar Hora Extra Cadastrar Departamento...

Lógica de Programação

MANUAL C R M ÍNDICE. Sobre o módulo de CRM Definindo a Campanha... 3

Algoritmos e Programação Parte Teórica

Olá, esse é o manual feito para ajudar você a conhecer ainda mais o Painel Web que acompanha* App Kontrole.

Manual do Módulo SAC

Aprovação da Ficha de Tratamento Beneficiários Correios.

Programação para Computação

Dadas a base e a altura de um triangulo, determinar sua área.

Introdução a Java. Hélder Nunes

Programação I. Departamento de Engenharia Rural Centro de Ciências Agrárias

PROCEDIMENTOS PARA CONVERSÃO DE IMAGENS DIGITALIZADAS EM DOCUMENTO PDF ÚNICO UTILIZANDO A IMPRESSORA FREEPDF XP.

Ajuda On-line - Sistema de Portaria. Versão 4.8.J

Manual de utilização do sistema de envio de sms marketing e corporativo da AGENCIA GLOBO. V

Linguagem algorítmica: Portugol

2ª Lista de exercícios

Aprovação da Ficha de Tratamento Beneficiários Correios.

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

TOTVS BA Guia de Customização Linha Logix

CONTRA CONTROLE DE ACESSOS E MODULARIZADOR DE SISTEMAS

Softwares Aplicativos Banco de Dados

Universidade Federal de Mato Grosso. Secretaria de Tecnologias da Informação e Comunicação. SISCOFRE Sistema de Controle de Frequência MANUAL

2 Diagrama de Caso de Uso

Processo de Controle das Reposições da loja

ACESSAR: Digite seu Usuário e Senha Digite os algarismos Clique em OK

Para facilitar o entendimento do processo de geração da DIRF 2010 nos Sistemas Cordilheira, a equipe de Suporte Técnico da EBS Sistemas

Manual do Programa de Caixa1

Beauty 9.4 Salão de Beleza

Livro Caixa. Copyright ControleNaNet

ÍNDICE 1 INTRODUÇÃO ACESSO ABERTURA DE PROTOCOLO CONSULTA DE PROTOCOLO PROTOCOLO PENDENTE CONFIRMAÇÃO DE RECEBIMENTO.

O Oficina Integrada é um sistema completo para o controle e gerenciamento de oficinas mecânicas. É o primeiro e único software que controla o fluxo

Sua empresa adquiriu a Solução Nucleu Excence, e isto nos deixa orgulhosos.

Aula Bibliografia - Definições - Operadores - Criação de um algoritmo - Exercícios. Algoritmo e Programação. Prof. Fábio Nelson.

Principais Novidades Abril/2013 a Junho/2013

ArpPrintServer. Sistema de Gerenciamento de Impressão By Netsource Rev: 02

MANUAL DE USUÁRIO - PRESTADORES

SuperStore. Sistema para Automação de Óticas. MANUAL DO USUÁRIO (Módulo Vendas e Caixa)

Gerenciamento de Estúdios de Tatuagem. MANUAL DO USUÁRIO (Versão do manual: 2009.a)

Carta de Versão. TOTVS Saúde Hospitalar. Informações relacionadas a versão

DPAlmox - Windows MANUAL DO USUÁRIO

Engenharia de Software III

INTRODUÇÃO... 3 TELA DE LOGIN... 4 TIPOS DE FAC EXISTENTE... 7 FAC DE PEDIDO DE BAIXA OU SUSPENSÃO FAC DE REATIVAÇÃO FAC DE ALTERAÇÃO

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

Movimento. Financeiro. Bancário. Contas a Pagar. Lançamento de Contas a Pagar (simples) Contas a Receber. Lançamento de Contas a Receber (simples)

Disciplina: Unidade III: Prof.: Período:

SERVIÇO PÚBLICO FEDERAL MINISTÉRIO DA EDUCAÇÃO UNIVERSIDADE FEDERAL DE RORAIMA DIRETORIA DE TECNOLOGIA DA INFORMAÇÃO SIGRH - FREQUÊNCIA

ÍNDICE 1 INTRODUÇÃO ACESSO CONSULTA DE PROTOCOLO PROTOCOLO PENDENTE CONFIRMAÇÃO DE RECEBIMENTO ANDAMENTO DE PROTOCOLO.

Gestão de Benefícios Inovação Recursos Humanos - Maio/2014

SIE - SISTEMA DE INFORMAÇÕES PARA O ENSINO OCORRÊNCIA GERAL

Sistema Integrado de Gerenciamento de Imposto Sobre Serviços.

Programação científica C++

Este Procedimento Operacional Padrão explica a melhor forma de se utilizar os filtros no Sistema TOTVS RM. Índice

Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia de Computação CECOMP

PÁGINA INICIAL: ACESSO RESTRITO Inserir seu Login e Senha. Clicar em ACESSAR.

Participe, pratique, inscreva-se!

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Implementando uma Classe e Criando Objetos a partir dela

LINEAR EQUIPAMENTOS RUA SÃO JORGE, TELEFONE: SÃO CAETANO DO SUL - SP - CEP

PROGRAMAÇÃO DE COMPUTADORES (Teoria)

Prof. Marcelo Machado Cunha

Algoritmos Estruturas Seqüenciais. José Gustavo de Souza Paiva

Sistema de Gestão de Freqüência. Manual do Usuário

Transcrição:

Universidade Federal do Vale do São Francisco Curso de Engenharia de Computação Introdução a Algoritmos Parte 07 (Baseado no Material do Prof. Marcelo Linder) Prof. Jorge Cavalcanti jorge.cavalcanti@univasf.edu.br www.univasf.edu.br/~jorge.cavalcanti www.twitter.com/jorgecav

Registros Vimos inúmeras aplicações onde são necessários conjuntos de elementos do mesmo tipo, e para tal utilizamos os vetores. No entanto em alguns problemas há necessidade de definirmos conjuntos onde os elementos não sejam do mesmo tipo. Um típico exemplo de nosso cotidiano é utilização do conjunto de informações que caracterizam um aluno: Nome(caractere), CPF(inteiro), RG(inteiro), data de nascimento(caractere), coeficiente de rendimento(real), etc.. 2

Registros Em uma análise superficial poderia se pensar que uma solução para a questão apresentada pode ser obtida declarando-se cinco variáveis: algoritmo exemplo var Nome: caractere CPF: inteiro RG: inteiro data_de_nascimento: caractere coeficiente_de_rendimento: real Para uma melhor visualização da utilidade dos registros basta imaginarmos que ao invés de manipular as informações de um aluno exista a necessidade de gerenciamento de uma turma com cinquenta alunos. 3

Registros Um estudante desatento imaginaria ser necessário a declaração de 250 variáveis. Porém um estudante com uma visão adequada sugeriria a utilização de cinco vetores: algoritmo exemplo var Nomes: vetor [1..50] de caractere CPFs: vetor [1..50] de inteiro RGs: vetor [1..50] de inteiro datas_de_nascimento: vetor [1..50] de caractere coeficientes_de_rendimento: vetor [1..50] de real Porém, manipular de forma adequada os vetores, mantendo seus dados consistentes, se torna trabalhoso. Com a utilização de um registro podemos resolver este problema apenas com um vetor de cinquenta registros. 4

Registros Uma maneira mais interessante de representar esse tipo de informação seria o agrupamento dessas informações de origem comum em um única estrutura: o Registro. Analogamente a um registro em uma ficha de papel que é utilizada para armazenar as informações de um aluno, paciente, cliente etc., há as variáveis compostas heterogêneas ou registros, que podem armazenar tais informações no algoritmo. var Ficha_Cadastro: registro matricula: inteiro nome: vetor [1..50] de caractere CPF: vetor [1..11] de inteiro RG: vetor [1..20] de inteiro data_de_nascimento: vetor [1..9] de caractere fim A variável Ficha_Cadastro agrupa as informações referentes a um aluno da academia. 5

Registros Com base no exemplo anterior podemos extrair a estrutura geral para a declaração de um registro: <nome_da_variavel>: registro <nome_campo_1>: <tipo_campo_1> <nome_campo_2>: <tipo_campo_2> <nome_campo_n>: <tipo_campo_n> fimregistro Cada campo funciona como uma variável primitiva, mas todos os campos estão agrupados no registro, conforme a variável Ficha_Cadastro. 6

Registros Para acessar esse tipo de variável, é necessário especificar o registro nominando o campo que se deseja utilizar. Os registros não podem ser acessado sem a especificação individual dos campos. As operações a seguir são inválidas: leia (Ficha_Cadastro) escreva (Ficha_Cadastro) Em vez disso, é necessário acessar cada campo individualmente: leia (Ficha_Cadastro.matricula) escreva (Ficha_Cadastro.nome) Ficha_Cadastro.cpf <- 123.456.789-10 A definição de tipos específicos para a declaração de registros auxiliar na melhora da legibilidade do código. Essa opção será vista logo adiante, na utilização de registros com vetores. 7

Registros e vetores Registros e vetores podem se compostos a fim de resolver problemas mais complexos. Considerando que um vetor é um conjunto de elementos do mesmo tipo, é natural que, quando precisarmos agrupar vários registros (por exemplo, várias Fichas Cadastro), utilizaremos vetores (conjuntos) de registros. Eventualmente, podemos ter necessitar que um registro tenha como um dos seus campos um vetor (como o de caracteres para o Nome). Os vetores de registros visam a armazenar conjuntos de elementos complexos. Ao invés de armazenar apenas as notas dos alunos de uma turma, um vetor de registro pode armazenar as informações cadastrais de todos os alunos da turma. 8

Registros e vetores Exemplo: algoritmo exemplo var alunos: vetor [1..50] de registro nome: caractere CPF: inteiro RG: inteiro datas_de_nascimento: caractere coeficientes_de_rendimento: real fimregistro A cada um dos elementos que constituem um registro é dado o nome de campo. No exemplo acima, temos os campos: nome, CPF, RG, datas_de_nascimento e coeficientes_de_ rendimento. 9

Definição de novos tipos de dados Abriremos um parêntese em nosso estudo sobre registros para falarmos sobre definição de tipo de dado. Com o objetivo de facilitar a leitura e, consequentemente, o entendimento dos algoritmos construídos, foi criado o conceito de definição de tipo de dado. Sintaxe: tipo <nome_do_tipo>: <definicao_do_tipo> Exemplo: tipo vetor_de_inteiros: vetor [1..100] de inteiro As definições de tipos devem ser feitas entre a constante caractere que nomeia o algoritmo e a declaração de variáveis globais ou dos módulos. Assim, após criado um novo tipo, variáveis podem ser definidas para esse novo tipo. Ex: var num: vetor_de_inteiros 10

Registros e vetores A definição de tipos diferentes dos primitivos auxilia a legibilidade do código, além de flexibilizar a criação de variáveis homogêneas e heterogêneas. Ex: tipo vetor100: Vetor [1..100] de real var notas: vetor100 tipo ficha_cad: registro <campo 1>: <tipo do campo> <campo 2>: <tipo do campo>... <campo n>: <tipo do campo> var cadastro: ficha_cad 11

Registros e vetores Com a utilização dos conceitos de criação de novos tipos, podemos resolver o problema do cadastro de alunos da seguinte forma: algoritmo exemplo tipo registro_aluno: registro nome: caractere CPF: inteiro RG: inteiro datas_de_nascimento: caractere coeficientes_de_rendimento: real fimregistro tipo vetor_de_registros: vetor [1..50] de registro_aluno var alunos: vetor_de_registros 12

Registros Um ou mais campos de um registro pode ser do tipo vetor. A construção do registro é feita da mesma forma, porém o vetor a ser utilizado em sua estrutura deve ser declarado anteriormente. algoritmo exemplo tipo vet : vetor [1..4] de real tipo registro_aluno: registro nome: caractere CPF: inteiro RG: inteiro datas_de_nascimento: caractere notas: vet fimregistro tipo vetor_de_registros: vetor [1..50] de registro_aluno var alunos: vetor_de_registros 13

Conjuntos de registros No conjunto de registros são armazenados dados de várias ocorrências de um determinado tipo de registro. Por exemplo, para armazenar os dados de diversos alunos. Da mesma forma com que trabalhamos com um vetor acessando-o elemento a elemento, seja para atribuição ou seja para consulta de um valor, o mesmo ocorre com relação aos registros, devemos acessá-lo campo a campo. Para acessarmos um determinado campo de um registro devemos utilizar o operador. da seguinte forma: No caso do exemplo com o qual temos trabalhado, a leitura do campo nome do décimo segundo aluno da turma é feita através de leia(alunos[12].nome) ou a impressão na saída padrão do CPF do terceiro aluno seria feita da seguinte forma escreva(alunos[3].cpf) 14

Registros e vetores Exercício 1: Defina um tipo de dado capaz de armazenar as seguintes informações sobre um determinado cliente de um banco: nome, CPF, RG, número da conta, data de abertura da conta e saldo. 15

tipo data: registro dia:inteiro mes: inteiro ano: inteiro fimregistro tipo registro_conta: registro nome: caractere cpf: caractere rg: caractere numero_conta: inteiro data_abertura: data saldo: real fimregistro 16

Registros - Exercícios 2- Dados os seguintes campos de um registro: nome, telefone, dia de aniversário e mês de aniversário, desenvolver um algoritmo que mostre em um dado mês do ano, quem são as pessoas que fazem aniversário, exibir também o dia. Considere um conjunto de 40 pessoas. 3 - Uma pessoa cadastrou um conjunto de 15 registros contendo o nome da loja, telefone e preço de um eletrodoméstico. Desenvolver um algoritmo que permita exibir qual foi a média dos preços cadastrados e uma relação contendo o nome e o telefone das lojas cujo preço estava abaixo da média. 17

Registros - Exercícios 4 Suponha um cadastro de participantes com um registro contendo Nome e CPF do aluno, tipo de participação (A, B, C ou D) e sócio da SBC (S-sim ou N - não), desenvolver um algoritmo para calcular o valor que cada aluno vai pagar para participar da ERBASE 2013, sabendo-se que: Tipo de Participação A - 1 curso R$ 30,00 B - 2 cursos R$ 60,00 Valor a Pagar C - 3 cursos R$ 90,00 D - outros R$100,00 Para os sócios da SBC o valor a pagar terá um desconto de 50%. O algoritmo deverá permitir a entrada de vários registros (no máximo 1000) até que uma condição de finalização seja satisfeita. Calcular e exibir também o total geral arrecadado com o evento e quantos alunos se matricularam em cada um dos tipos de participação. 18

Exercício 5: Com base no exercício 1, construa um algoritmo que manipule um vetor com 15 registros de clientes, onde cada registro é um elemento do tipo de dado definido. A manipulação do vetor é feita através dos seguintes módulos: inicializar vetor, imprimir um determinado registro com base no valor do campo CPF e imprimir um determinado registro com base em sua posição no vetor. O algoritmo deve se utilizar de forma satisfatória dos módulos mencionados. 19

algoritmo "Exercício sobre registros" tipo data: registro dia:inteiro mes: inteiro ano: inteiro fimregistro tipo registro_conta: registro nome: caractere cpf: caractere rg: caractere numero_conta: inteiro data_abertura: data saldo: real fimregistro tipo vetor_de_registros: vetor [1..15] de registro_conta 20

21 procedimento inicializar_vetor (var v: vetor_de_registros) var i: inteiro para i de 1 ate 15 faca escreva ("Entre com as informações do registro número ") escreval (i, ".") escreva ("Número da conta: ") leia (v[i].numero_conta) escreva ("Nome do cliente: ") leia (v[i].nome) escreva("cpf: ") leia (v[i].cpf) escreva("rg: ") leia (v[i].rg) escreval("data de abertura: ") escreva ("Ano: ") leia (v[i].data_abertura.ano) escreva ("Mês: ") leia (v[i].data_abertura.mes) escreva ("Dia: ") leia (v[i].data_abertura.dia) escreva("saldo: ") leia (v[i].saldo) fimpara fimprocedimento

22 funcao imprimir_registro_cpf (var v: vetor_de_registros; cpf: caractere):logico var i: inteiro para i de 1 ate 15 faca se (v[i].cpf=cpf) entao escreval ("Registro da conta número ", v[i].numero_conta) escreval ("Cliente: ",v[i].nome) escreval("cpf: ",v[i].cpf) escreval("rg: ",v[i].rg) escreva ("Data de abertura: ",v[i].data_abertura.dia,"/") escreval (v[i].data_abertura.mes, "/", v[i].data_abertura.ano) escreval("saldo: ",v[i].saldo) retorne (verdadeiro) fimse fimpara retorne (falso) fimfuncao

23 funcao imprimir_registro_posicao (var v: vetor_de_registros; posicao: inteiro):logico se (posicao<1 ou posicao>15) entao retorne (falso) senao escreva ("Registro da conta número ") escreval (v[posicao].numero_conta) escreval ("Cliente: ",v[posicao].nome) escreval("cpf: ",v[posicao].cpf) escreval("rg: ",v[posicao].rg) escreva("data de abertura: ",v[posicao].data_abertura.dia,"/") escreval ([posicao].data_abertura.mes,"/") escreval (v[posicao].data_abertura.ano) escreval("saldo: ",v[posicao].saldo) retorne (verdadeiro) fimse fimfuncao

24 procedimento principal() var vet_reg: vetor_de_registros cpf: caractere p: inteiro inicializar_vetor(vet_reg) escreva ("Entre com um CPF para impressão do registro da ") escreval ("conta correspondente: ") leia (cpf) se (nao imprimir_registro_cpf (vet_reg, cpf)) entao escreva ("Não existe nenhum conta de cliente com o CPF ") escreval ("especificado.") fimse escreval ("Entre com a posição do registro da conta para ") escreval ("impressão, intervalo [1,15]: ") leia (p) se (nao imprimir_registro_posicao (vet_reg, p)) entao escreval ("Posição inválida.") fimse fimprocedimento principal() fimalgoritmo