Prévia do material em texto
Estrutura de dados: Registros SST DAURICIO, J. S.; FRANCISCO, L. F. C. Estrutura de dados: Registros / Juliana Schiavetto Dauri- cio; Luciano Furtado Correa Francisco Ano: 2020 nº de p.: 10 páginas Copyright © 2020. Delinea Tecnologia Educacional. Todos os direitos reservados. 3 Estrutura de dados: Registros Apresentação Os registros são estruturas de dados nos quais se alocam várias posições de memória, as quais podem armazenar valores de tipos diferentes. Nesse sentido, vamos estudar as características dos registros, o que são arquivos de registros e o vetor de registros. Registros Suponhamos que uma empresa implemente um sistema para cadastrar os seus clientes. Em geral, os cadastros de clientes contêm informações como nome, endereço, CPF ou CNPJ, sexo, data de nascimento, RG etc. Uma maneira de cadastrar esses dados seria criar uma variável para cada informação do cliente. Ao utilizarmos a estrutura de dados de registros, podemos reunir todas essas informações em uma única variável. Muitos itens de nosso dia a dia se enquadram no conceito de registro: um cadastro em um formulário, filmes, dados de um cartão de crédito etc. Para ilustrar, vamos usar o exemplo de um bilhete de passagem de ônibus. Se você observar uma passagem de ônibus intermunicipal, encontrará diversas. O nome do passageiro é um literal. A data de embarque é um tipo data. O preço é um tipo real. Horário é um tipo data-hora e assim sucessivamente. Curiosidade 4 Como declaramos uma estrutura do tipo registro? De forma bem parecida com os vetores. Genericamente essa declaração pode ser como indicada a seguir: tipo nome_da_variavel_registro = registro campo1 : tipo campo2 : tipo campo3 : tipo ..... fim variavel nome_da_variavel : nome_da_variavel_registro Declaramos um novo tipo de dados nomeando-o e, em seguida, informando que será do tipo registro. Ao final, criamos uma variável para manusear esse registro, na última linha de nosso exemplo. Para ficar claro, veja como seria essa declaração da passagem de ônibus na figura abaixo: Declaração de registro Tipo passagem = REGISTRO nome : CARACTER [20] rg : CARACTER [20] tipoPassageiro : CARACTER [20] origem : CARACTER [20] destino : CARACTER [20] dataEmbarque : CARACTER [20] horarioEmbarque : CARACTER [20] poltrona : INTEIRO plataforma : INTEIRO quilometragem : INTEIRO agencia : CARACTER [20] agente : CARACTER [20] tipoOnibus : CARACTER [20] dataEmissao : CARACTER [20] horaEmissao : CARACTER [20] tarifa : REAL pedagio : REAL tarifaEmbarque : REAL valorPassagem : REAL linha : CARACTER [20] formaPagto : CARACTER [20] FIM Var pass : passagem Fonte: Elaborada pelo autor (2020). 5 É importante relembrar que a sintaxe apresentada é genérica; cada linguagem de programação tem suas formas de declarar registros, mas serão parecidas com o que é exibido na figura. O sistema informatizado que cadastra os dados de um passageiro para emitir a passagem faria uma operação similar ao do exemplo a seguir, levando em conta a estruturação do registro na figura acima: ‘Digite o nome do passageiro: João Silva => o programa irá gravar “João Silva’ na variável pass.nome. Logo, podemos perceber que o registro é, por si só, um tipo de dado customizado, o que é bastante poderoso para o desenvolvimento de softwares, trazendo muitas vantagens. Uma dessas vantagens é persistir os dados, ou seja, não apenas mantê-los na memória do computador, mas também em arquivos em dispositivos permanentes como discos rígidos. Vamos ver como isso acontece. Arquivos de registros Pereira (2016, p. 122) menciona as características e vantagens do uso de arquivos de registros: Um arquivo de registros é uma coleção de registros mantida em disco. Conceitualmente, um arquivo é similar a um vetor, porém seu tamanho não precisa ser definido a priori e pode aumentar enquanto houver espaço disponível em disco. A grande vantagem no uso de arquivos é que, como eles são mantidos em disco, os dados armazenados por eles não são perdidos quando o programa termina sua execução (diferentemente do que ocorre com vetores, que são mantidos na memória principal). Em contrapartida, o acesso a dispositivos como discos rígidos são mais lentos do que o acesso à memória da máquina, tornando mais lenta também a execução dos programas. Os sistemas operacionais têm um recurso para contornar essa desvantagem. Eles usam uma área da memória do computador chamada buffer. Essa área gerencia a transferência de dados entre o disco e a memória e vice-versa. Quando o programa transfere dados para um arquivo, primeiramente ele vai para este buffer. Somente quando o buffer fica lotado, ele transfere esses dados para o disco. Essa operação pode ser vista na figura a seguir: 6 Gravação e leitura de arquivos usando um buffer Fonte: Pereira (2016, p. 123). Os campos de um registro podem ser de tipos de dados que não os dados primitivos. Podemos também ter vetores e matrizes como campos dentro de registros. Isso amplia enormemente a capacidade dos registros. Veja este exemplo: TIPO dias = vetor [1..6] inteiro TIPO registroProduto = registro codigo : inteiro nome : caracter[50] preco : real baixa : dias; FIM; var produto : registroProduto; No exemplo citado, criamos um vetor de nome dias e utilizamos esse mesmo vetor dentro do registro como um de seus campos. Esse campo serve para gravar quanto foi vendido em um determinado dia da semana – este dia pode ser de segunda a sábado ou de 1 a 6. Para manipular um campo específico desse vetor, fazemos como vimos em vetores, ou seja, fazemos algo como: Produto.Baixa[3] O comando acima irá acessar as vendas da quarta-feira. 7 Vetor de registros Uma das situações computacionais mais frequentes é a necessidade de armazenar vários registros iguais. Da mesma forma que temos os vetores que são usados para não termos que criar uma porção de variáveis idênticas, os vetores também podem ser usados para armazenar registros em suas posições. Exemplo: contexto Vamos voltar ao contexto do ônibus de viagem. Um ônibus desse tipo tem em geral quarenta e cinco poltronas. O sistema da companhia precisa armazenar os dados desses 45 passageiros. Registro Se fôssemos fazer um registro para cada um dos 45 passageiros, teríamos uma grande quantidade de registros a serem declarados, além do fato de que teríamos de dar nomes diferentes para cada um – as linguagens de programação não permitem que se nomeiem variáveis com o mesmo nome no mesmo programa. Um grande trabalho, não é mesmo? E como resolvemos? Com um vetor de registros. A lógica é simples. Criamos um vetor no qual cada uma das 45 posições terá todas as informações do passageiro que irá ocupar a poltrona em questão. A figura a seguir ilustra esse cenário: 8 Vetor de registros Fonte: Elaborada pelo autor (2020). A declaração desse vetor é: tipo nome_da_variavel_registro = registro campo1 : tipo campo2 : tipo campo3 : tipo ..... fim tipo nome_da_variavel_vetor = vetor[1..N] of nome_da_ variavel_registro; var nome_da_variavel : nome_da_variavel_vetor; A penúltima linha cria o vetor de registros e N é a quantidade de registros a ser armazenada – o vetor deve ser do tipo de registro criado. A variável criada na última linha é para manipular o nosso vetor de registros. Vejamos como fica o exemplo da passagem. 9 Tipo passagem = REGISTRO nome : CARACTER[20] rg : CARACTER[20] tipoPassageiro : CARACTER[20] origem : CARACTER[20] destino : CARACTER[20] dataEmbarque : CARACTER[20] horarioEmbarque : CARACTER[20] poltrona : INTEIRO plataforma : INTEIRO quilometragem : INTEIRO agencia : CARACTER[20] agente : CARACTER[20] tipoOnibus : CARACTER[20] dataEmissao : CARACTER[20] horaEmissao : CARACTER[20] tarifa : REAL pedagio : REAL tarifaEmbarque : REAL valorPassagem : REAL linha : CARACTER[20] formaPagto : CARACTER[20] FIM TIPO vetorPassagem = vetor[1..45] de passagem; VARonibus : vetorPassagem; Note que precisamos adicionar apenas uma linha para armazenar a quantidade de passageiros, na penúltima linha. A variável onibus permite manusear o registro. Para acessar por exemplo o nome do passageiro da poltrona 27, fazemos assim: onibus[27].nome Fechamento As estruturas de dados do tipo registro facilitam a manipulação de conjuntos de dados relacionados que possuem tipos diferentes, permitindo que eles sejam agregados em um único recurso, facilitando a sua manipulação. 10 Referências PEREIRA, S. do L. Estruturas de dados em C: uma abordagem didática. São Paulo: Erica, 2016.