Introdução a Registros

Tipos de dados em algoritmos
Este post faz parte da série Estruturas de Dados. Leia também os outros posts da série:

Oi gente! Nos últimos artigos aprendemos sobre Arrays, que são conhecidos como Variáveis Compostas Homogêneas. Vetores e Matrizes, como também são conhecidos, são recursos disponibilizados pelas linguagens de programação para nos auxiliar a resolver problemas. Com tudo o que já vimos até agora, já temos capacidade para resolver um monte de coisas, usando os recursos em conjunto, com um If dentro de um For, ou ainda um For dentro de um While. Além disso, podemos usar Arrays para armazenar vários dados. Bom, hoje aprenderemos sobre REGISTROS, que são Variáveis Compostas Heterogêneas, isto é, armazenam vários tipos de dados e não somente um como nos Arrays.

 

 

Registros

 

Enquanto Arrays nos permitem armazenar vários dados de um único tipo de dados, o recurso de Registro nos permite armazenar mais de um tipo de dado. Um registro é composto por campos que especificam cada uma das informações que o compõem. Uma variável do tipo registro é uma variável composta, pois engloba um conjunto de dados, e é heterogênea, pois cada campo pode ser de um tipo primitivo diferente. Muitas coisas do nosso cotidiano se encaixam no conceito de Registro: passagem de ônibus, folha de cheque, livros, filmes, etc. Vamos usar como exemplo a passagem de ônibus. Observe a Figura 1 (foto de uma passagem que eu comprei pra mim nesta semana!).

 

Passagem
Figura 1: Passagem

 

Analise a passagem. Ela contém muitas informações, não é mesmo? De diferentes tipos também. Nome do Passageiro é um tipo texto, valor da passagem é um tipo real, data de embarque é um tipo data, horário de embarque é um tipo hora, plataforma é um tipo inteiro, e assim por diante. Então, vamos criar um REGISTRO que servirá para nós armazenarmos as informações de passagem. É claro que esse REGISTRO poderá ser utilizado em um sistema de vendas de passagens, mais elaborado, que inclusive também poderá utilizar outros recursos de programação, que ainda estudaremos como as FUNÇÕES e PROCEDIMENTOS. Uma coisa por vez certo?

 

Também é importante ressaltar que em JAVA não existem exatamente REGISTROS, em JAVA existem CLASSES, que é um recurso parecido. Mas CLASSE é na verdade um dos principais conceitos de Linguagens orientadas a objetos, portanto, não mostrarei códigos em JAVA. Os códigos demonstrados aqui serão todos em PASCAL ou C.

 

 

Sintaxe e Declaração

 

A sintaxe para a definição e declaração de registros em pascal é:

 

Listagem 1: Sintaxe de Registros

 

Definimos um novo tipo de dado dando a ele um nome que será do tipo Registro (linha 1) e depois temos que criar uma variável para manipular esse registro (linha 8). Assim, para o nosso exemplo, temos a seguinte definição para a passagem de ônibus:

 

Listagem 2: Exemplo de Registro para Passagem

 

 

Populando o Registro

 

Vamos ver agora como preencher o registro. Usamos a palavra chave TYPE para definir um novo tipo de dado e RECORD também é uma palavra chave que identifica o REGISTRO. Peguei quase todas as informações da passagem da Figura 1 e coloquei no registro, definindo-as como tipo inteiro, real ou string. PASS é a variável do tipo registro que utilizaremos para manipular cada um dos tipos de dados definidos no Registro.

 

Listagem 3: Exemplo de Programa para popular e imprimir a Passagem

 

Para fazer a leitura do registro você deve utilizar a seguinte sintaxe:

 

readln ( nome_da_variável.campo )

 

Para imprimir o conteúdo de um campo de registro você deve utilizar a seguinte sintaxe:

 

writeln ( " texto " , nome_da_variável.campo);

 

Observe que nesse programa nós armazenamos apenas UM Registro, mas e se quisermos armazenar vários registros, de vários passageiros? Como devemos proceder? Tem uma forma, já falarei como.

 

 

Arrays em Registros

 

Alguns campos do Registro podem ser de outros tipos de dados além dos primitivos, como vetores e matrizes. Vejamos um exemplo:

 

Listagem 4: Exemplo

 

Nesse exemplo, é criado um vetor chamado DIAS e o mesmo é utilizado como um campo dentro de Registro. Esse campo é usado para registrar quanto foi vendido em um dia da semana, que pode ser definido como de segunda à sábado ou de 1 à 6. Para manipular uma posição desse campo vetor em particular devemos utilizar o que aprendemos em vetores. Para acessar direto fazemos:

 

produto.Baixa[1] := 2.000;

 

Se desejar imprimir todos os valores do tipo de dado DIAS também devemos usar o FOR, como a seguir:

 

Listagem 5: Exemplo de impressão no vetor que é campo do registro

 

Mas é bem provável que você vá imprimir apenas o que lhe for interessante, por exemplo, sendo 1 a segunda-feira, imprimirá apenas o que foi vendido nesse dia, e assim por diante. Você pode fazer o mesmo com matrizes.

 

 

Vetor de Registros

 

Essa é a solução para quando precisamos armazenar vários registros. Para exemplificar o uso desse conceito, vamos supor que um Ônibus tem 40 poltronas e nós queremos armazenar as informações desses 40 passageiros. Como fazer? Simples, faremos um VETOR de REGISTRO. Isso significa que cada uma das 40 posições do Vetor conterá informações de um passageiro diferente. A Figura 2 ilustra essa situação.

 

Vetor de Registros
Figura 2: Vetor de Registros

 

A Figura 2 ilustra nossas quarenta poltronas de um ônibus, cada uma destinada a um passageiro, assim, cada posição do vetor armazena UM registro. A sintaxe para quando precisarmos utilizar esse recurso é a seguinte:

 

Listagem 6: Sintaxe do Vetor de Registros

 

A linha 8 cria o vetor de registros. N é a quantidade de registros que você deseja armazenar. Esse vetor deve ser obrigatoriamente do tipo do registro que você criou. Além disso, também devemos criar uma variável para poder manipular o vetor de registros, como mostra a linha 11. Agora vamos ver como fica no nosso exemplo de passagem:

 

Listagem 7: Vetor de Registro de Passagem

 

Assim, adicionamos apenas uma linha de código em nosso software para conseguir armazenar a quantidade que desejamos de passageiros. Onibus é a variável que nos permitirá manipular o registro. Como fica agora a leitura e impressão dos dados? A sintaxe para leitura é a seguinte:

 

readln ( nome_da_variavel[ i ].nome_do_campo );

 

A sintaxe para impressão é a seguinte:

 

writeln('texto', nome_da_variavel[ i ].nome_do_campo);

 

Assim nosso código para o Ônibus ficará da seguinte forma:

 

Listagem 8: Código para leitura e impressão dos dados do Vetor de Registros.

 

Não podemos nos esquecer de que é um Vetor de Registros, então precisaremos utilizar o FOR para obter os dados do usuário, e outro FOR para imprimir os dados armazenados. A linha 39 inicia o FOR para leitura dos dados e a linha 108 o FOR para impressão. Talvez você se confunda um pouco com as definições do nomes, é normal, mas com o tempo, e resolvendo vários exercícios, vocês conseguirão absorver melhor.

 

É importante que vocês saibam qual é a melhor forma para aprenderem as coisas. Cada um aprende de um jeito. Eu sou bem autodidata, o que não significa que aprendo rápido, tem muita coisa que, a priori acredito que entendo, mas depois algo acontece e então consigo entender de uma forma completamente diferente. Também sempre procuro ajuda quando preciso. Ler livros também ajuda, e não estou dizendo para ler um único livro, mas ler vários livros, pois cada autor apresenta a sua perspectiva e você pode aprender muito com isso.

 

 

Exercícios

 

1. Uma empresa tem 50 funcionários, e quer cadastra-los (com nome, endereço, telefone, salário, função). Faça um programa que armazene todos os funcionários em um vetor, registrando-os (ultilize um vetor de registros). Depois, mostre na tela todos os funcionários que ganham mais de R$ 500,00.

 

2. Considere uma Folha de Cheque, crie um Registro que a represente, em seguida, armazene informações de 20 folhas de cheques, de 20 clientes diferentes. Apresente o cliente com o maior valor de Folha de Cheque.

 

3. Considere que você tem 30 livros em casa. Crie um programa que seja capaz de armazenar as informações desses livros.

Outros artigos da série

<< Introdução a Matriz
Este post faz da série Estruturas de Dados. Leia também os outros posts da série:
Sou graduada em Engenharia de Computação pelo Centro Universitário de Votuporanga e mestre em Ciência da Computação pela Universidade Federal de são Carlos. Fui bolsista (100% da mensalidade do curso) do Programa Escola da Família de Agosto de 2004 a dezembro de 2007 em uma escola pública da periferia de Votuporanga. Desde 2008 sou membro do comitê organizador do evento É DIA DE JAVA, que acontece em São Carlos há 15 anos. Em 2010 fundei uma Comunidade, junto com outras mulheres, chamada #GarotasCPBr, que tem como objetivos: influenciar pessoas positivamente, trazer mais mulheres para a área de Exatas, auxiliar e orientar as calouras da Campus Party Brasil, contribuir e colaborar com o desenvolvimento do nosso Brasil, particularmente na relação Tecnologia/Sociedade. De 2011 a 2016 fui membro do Microsoft Technical Audicente Contributor (MTAC) atuando como Influenciadora Digital. Trabalhei na Universidade do Sagrado Coração (USC) de Março de 2011 à Junho de 2016 como Docente, Membro de Conselhos de Curso e Membro de Núcleos Docentes Estruturantes (NDEs) dos cursos de Engenharia de Computação, Ciência da Computação, Engenharia Civil, Engenharia Ambiental, Engenharia de Produção, Engenharia Agronômica, Engenharia Química e Design. De Março de 2011 a Dezembro de 2015 atuei na USC como Coordenadora do Curso de Bacharelado em Engenharia de Computação. De 2012 a Junho de 2016 ocupei o cargo de Coordenadora e Docente do curso de Pós Graduação Lato Sensu "Especialização em Desenvolvimento de Software para Web”. Assumi o cargo de Diretora Social da Associação Bauruense de Ciência e Tecnologia (ABCT) em 2013 e permaneci ali até 2016. Também fiz parte da Comissão Organizadora da Semana Nacional de Ciência e Tecnologia (SNCT) de Bauru no período de 2011 a 2015. Desde Maio de 2015 sou colaboradora e também escrevo artigos técnicos sobre Algoritmos, Arquitetura de Computadores, Microprocessadores e Estruturas de Dados na Comunidade Embarcados. Ministrei palestras em eventos como Campus Party Brasil, Fórum Internacional de Software Livre, The Developers Coference, etc. Atualmente sou Professora Substituta no Departamento de Computação (DACOM) na Universidade Tecnológica Federal do Paraná (UTFPR) no Campus Cornélio Procópio. Áreas de Interesse: Gênero em Computação, Plataforma Java, Desenvolvimento de Software, Internet das Coisas e Sistemas Embarcados.