Introdução aos registros (Structs)

Ver Todos os Exercícios

Teoria

Introdução

Fala aí, aqui é o Guga do Responde Aí! Tudo bem com você?

Para começar, imagine que você esteja desenvolvendo um programa para a administração da sua faculdade. Por se tratar de uma faculdade, esse programa deve ter como dados informações sobre todos os alunos matriculado como: nome, telefone, endereço etc. Como você faria para juntar todas essas informações relacionando-as a um único aluno?

Vamos imaginar que nós dois temos que desenvolver um programa para a parte administrativa da faculdade, mais especificamente para a gestão dos alunos. Esse programa deve ter os dados de todos os alunos que estão matriculados na faculdade, como: nome, telefone, endereço etc.

Dado que cada aluno deve ter o seu registro próprio, como nós podemos unir todas essas informações pessoais e armazená-las unicamente para cada aluno?

Parece coisa de outro mundo, né?

Nesse tópico nós iremos conversar um pouquinho sobre os registros (também conhecidos como structs), eles são muito úteis em casos como o descrito anteriormente. Então, sem perder tempo vamos entender de vez esse novo conceito de programação!

Struct

Eu não sei se você percebeu, mas as denominações struct e registro sempre andam juntas, pois as mesmas são análogas em programação. Entretanto, qual é o motivo dessa semelhança?

De forma bem direta ao ponto, isso acontece porque assim como nos registros, uma struct é composta por diversos campos.

Por exemplo, vamos relembrar o problema descrito na introdução e analisarmos como ele é resolvido na realidade.

Simples demais!

A faculdade possui diversos formulários preenchidos sobre cada aluno. Mas pensa comigo, um formulário nada mais é do que o registro de um aluno composto pelos campos nome, telefone, endereço etc.

Sentiu o brainstorm?

O mesmo acontece quando analisamos a linguagem C, onde uma struct é capaz de organizar uma estrutura com as informações pessoais de cada aluno (campos) em variáveis, para posteriormente ser utilizada de forma única com o objetivo de armazenar os dados de cada aluno.

Vamos dar uma olhada em um outro exemplo!

E se agora nós estivéssemos desenvolvendo um programa para uma empresa de entrega (a gente tem futuro como uma dupla programadora, hein!?) e tivéssemos que armazenar os seguintes dados de alguns usuários: rua, bairro, cidade, estado e número. O que faríamos para programar essa união de dados?

Basta criarmos uma struct chamada endereco com todos os campos necessários, dessa forma poderíamos armazenar unicamente diferentes endereços utilizando a mesma estrutura.

E como a gente faz isso? Uma dica, é só olhar aqui embaixo!

Criando uma struct

A criação de uma struct é bastante simples, utilizando como exemplo o mesmo registro endereco que criamos anteriormente, utilizaríamos o seguinte trecho de código para cria-lo:

Não se preocupe, vou te explicar direitinho o que está acontecendo.

Basicamente, nós acabamos de definir uma estrutura (struct) endereco com os seguintes campos: rua, bairro, cidade, estado e numero. Observe que a declaração dos campos de uma struct é feita exatamente da mesma forma que a declaração de variáveis, ou seja, necessitam de um tipo, nome, e, no caso das strings (vetores de caracteres), de um tamanho.

Para ficar ainda mais fácil, abaixo temos um exemplo geral de declaração de estruturas na linguagem C:

Mas até então nós só temos uma estrutura, como tornamos essa única estrutura capaz de armazenar o endereço de uma faculdade, por exemplo? Simples, basta realizarmos a sua declaração:

Com isso nós temos uma variável end_faculdade que armazena uma estrutura endereco e pode ser manipulada, nesse contexto, para armazenar e disponibilizar as informações de endereço sobre uma faculdade específica.

E se precisarmos utilizar diversas variáveis dessa estrutura?

Podemos utilizar o comando de redefinição de tipo typedef para criarmos um tipo referente a uma determinada estrutura. Nesse caso, a estrutura e n d e r e c o :

Agora somos capazes de criar inúmeras variáveis do tipo e n d _ f a c u l d a d e , que nada mais é do que um tipo ou “apelido” da estrutura e n d e r e c o .

Esse conceito pode parecer meio diferente, mas ele é muito importante e útil na programação. Então, não se esqueça de fazer os exercícios de fixação!

Te espero na página aqui do lado, parceiro(a).

Struct

Criando uma struct

Exercícios Resolvidos

Exercício Resolvido #1

O que é um registro (struct) e qual é a sua função em um programa da linguagem C?

Passo 1

Para entendermos melhor, imagine que eu fosse criar um programa que reunisse algumas de minhas informações.

Criando uma variável para cada informação, teríamos algo mais ou menos assim:

  • n o m e G u g a ;
  • i d a d e G u g a ;
  • t e l e f o n e G u g a .

E se eu agora quisesse reunir as informações do Marcelo, teríamos que criar mais três variáveis? E da Ana? Paulo? E por aí vai...

Um registro é uma estrutura em que eu posso adicionar campos, no caso anterior, eu teria apenas uma registro p e s s o a com os campos n o m e , i d a d e e t e l e f o n e que poderia ser usado tanto para mim quanto para qualquer outra pessoa sem a necessidade de mais declarações.

Resposta

Um registro é uma estrutura capaz de unir campos em comum e tem a função de servir como base de utilização sem a necessidade de declarações específicas para cada campo.

Exercício Resolvido #2

Escreva um trecho de código para fazer a criação de um registro c o m p r o m i s s o com os seguintes campos: d a t a , h o r a e t e x t o .

Passo 1

O seguinte trecho de código é responsável por criar o registro c o m p r o m i s s o :

Para isso basta codificarmos o comando struct e em seguida digitarmos o nome do registro, nesse caso c o m p r o m i s s o . Após isso e entre chaves devemos declarar todos os campos dessa estrutura, esses campos são:

  • d a t a que é um vetor de caracteres de oito posições responsável por armazenar dados no formato padrão de data (04/02/2020);
  • h o r a que é um vetor de caracteres de cinco posições responsável por armazenar dados no formato padrão de hora (11:56);
  • t e x t o que é um vetor de caracteres de 255 posições responsável por armazenar o texto que descreve o compromisso que será armazenado na estrutura.

Por fim, depois do fechamento das chaves, não devemos nos esquecer do ponto e vírgula.

Resposta

Ei, a resposta está no passo a passo :)

Exercício Resolvido #3

Construa uma estrutura a l u n o com nome, número de matrícula e curso.

Passo 1

A estrutura a l u n o pode ser codificada da seguinte forma:

Onde basicamente escrevemos o comando struct seguido do nome que essa estrutura terá, nesse caso a l u n o . Após isso e entre chaves, basta declararmos os campos desse registro, são eles:

  • n o m e é um vetor de caracteres com 75 posições e é responsável por armazenar o nome dos alunos;
  • n M a t r i c u l a é um inteiro responsável por armazenar o número de matrícula dos alunos;
  • c u r s o é um vetor de caracteres com 50 posições e é responsável por armazenar o nome dos cursos.

Após declararmos os campos da struct, podemos após o fechamento das chaves, finalizarmos a definição dessa estrutura adicionando um ponto e vírgula.

Resposta

Ei, a resposta está no passo a passo :)

Exercício Resolvido #4

Observe a definição da estrutura d a t a :

Identifique e explique o motivo pelo qual o programa não compila, mencione a linha de código em que o erro ocorre.

Passo 1

O programa não compila, pois após o fechamento das chaves durante a definição da estrutura d a t a não existe o ponto e vírgula (linha 06).

Resposta

A ausência do ponto e vírgula faz com que o programa não identifique a finalização da definição da estrutura d a t a , como consequência disso não reconhece a função main.

Exercício Resolvido #5

Escreva um trecho de código para fazer a criação de um registro h o r a r i o com os seguintes campos: h o r a s , m i n u t o s e s e g u n d o s .

Passo 1

Para criarmos o registro h o r a r i o basta utilizarmos o seguinte trecho de código:

Onde escrevemos o comando struct seguido do nome que essa estrutura terá, nesse caso o nome é h o r a r i o . Após isso e entre chaves devemos colocar os campos do registro, esses campos serão:

  • h o r a s ;
  • m i n u t o s ;
  • s e g u n d o s .

Ambos são variáveis do tipo int (inteiros).

Por fim, depois do fechamento das chaves, nós só não podemos nos esquecer do ponto e vírgula que finalizará a declaração da estrutura.

Resposta

Ei, a resposta está no passo a passo :)

Exercício Resolvido #6

Uma empresa logística, visando melhorar o seu atendimento, decidiu automatizar o seu fluxo de encomendas com um programa.

Observe a seguinte declaração presente no código:

Explique detalhadamente o que é e qual a funcionalidade dessas linhas de código para o programa?

Passo 1

Se trata de um registro e n d e r e c o C l i e n t e composto pelos campos: e s t a d o , b a i r r o , r u a e n u m e r o sendo os três primeiros vetores de caracteres e o último campo uma variável inteira.

Passo 2

A funcionalidade dessas linhas em um programa é criar uma estrutura que servirá de base para o armazenamento do endereço dos clientes dessa empresa. Eliminando assim, a necessidade de criação de uma variável de cada campo para todos os clientes (gasta muita memória e tempo de desenvolvimento).

Resposta

Ei, a resposta está no passo a passo :)

Exercício Resolvido #7

Defina a estrutura e os campos com seus respectivos tipos básicos de acordo com a representação gráfica dada em forma de registro:

Passo 1

A primeira coisa que nós podemos fazer é utilizarmos o exemplo de produto dado (placa de vídeo) para identificarmos os tipos de cada campo.

Começando pelos tipos numéricos, temos código e quantidade como campos do tipo int (inteiros), já que não podemos ter meia placa de vídeo e não é comum utilizarmos valores reais para a identificação de produtos. Além disso, ainda temos o campo preço, que se trata de valores monetários e por isso deve ser do tipo float (ponto flutuante).

Por fim, também temos o campo que se refere ao nome do produto, que por ser uma cadeia de caracteres (string) será um vetor do tipo char.

Passo 2

Como já sabemos os tipos dos campos, podemos agora criar a estrutura p r o d u t o (que é o título do registro). Para isso, basta codificarmos o seguinte trecho de código:

Para isso basta codificarmos o comando struct e em seguida digitarmos o nome do registro, nesse caso p r o d u t o . Após isso e entre chaves, devemos declarar todos os campos dessa estrutura, esses campos serão:

  • c o d i g o que é uma variável inteira (tipo int);
  • n o m e que é um vetor de caracteres de 150 posições (vetor do tipo char);
  • p r e c o que é uma variável do tipo ponto flutuante (tipo float);
  • q u a n t i d a d e que é uma variável inteira (tipo int).

Por fim, depois do fechamento das chaves, não devemos nos esquecer do ponto e vírgula.

Resposta

Ei, a resposta está no passo a passo :)

Exercício Resolvido #8

Observe as seguintes declarações:

Qual é a função do comando presente na linha 13 na declaração da estrutura a u t o m o v e l ?

Passo 1

Analisando a estrutura a u t o m o v e l conseguimos concluir que um dos campos desse registro é uma variável v e n d e d o r do tipo p r o p r i e t a r i o , que é uma outra struct.

Passo 2

Sendo assim, podemos concluir que a estrutura a u t o m o v e l está vinculada a outra estrutura denominada p r o p r i e t a r i o . Dessa forma, podemos dentro de a u t o m o v e l acessar informações sobre o vendedor de um carro, por exemplo.

Resposta

A função de tornar uma struct campo de outra struct é criar um vínculo. Nesse caso, podemos acessar dados como: nome e C.P.F de um vendedor sem propriamente criar esses campos na struct a u t o m o v e l (não teria sentido), mas criando uma struct p r o p r i e t a r i o e fazendo dela um campo do registro a u t o m o v e l .