Teoria

Introdução

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

No tópico anterior nós conversamos um pouco sobre variáveis e constantes, nesse tópico nós vamos falar sobre um novo tipo de dados capaz de unir esses dois recursos. Estamos falando do tipo enum, que é muito útil em programas que necessitam de enumerações.

O tipo enum

A melhor forma de entendermos o tipo enum é utilizarmos um exemplo do mundo real. Por conta disso, vamos criar um contexto em que esse tipo pode ser usado:

Imagine que estamos desenvolvendo um programa que trabalha com inúmeras datas, por exemplo: um calendário digital.

Você concorda comigo que quando falamos que estamos em janeiro é análogo a dizer que estamos no mês 1?

Faz bastante sentido, né!?

Isso acontece porque reconhecer um mês pelo seu nome é muito mais fácil do que por sua forma numérica. Porém, quando nos referimos a realizar operações, como por exemplo: contar quantos meses faltam para o Natal, o significado numérico se torna mais simples e útil para nós.

Algo parecido acontece quando estamos desenvolvendo um programa, para o nosso código se tornar mais limpo e possuir uma leitura menos complexa, utilizar constantes para representar valores que possuem relação com algum nome é mais fácil para nós. Por outro lado, para o programa, os nomes que nós colocamos para as constantes de nada importa e é mais fácil para ele trabalhar apenas com os valores associados a elas.

Então, o tipo enum nada mais é do que uma forma de definir constantes. A parte legal é que você pode não só definir uma constante, mas um conjunto de constantes que serão enumeradas automaticamente a partir de um valor inicial que você escolhe (caso você não escolha, esse valor inicial será 0).

Declaração de variável do tipo enum

Ainda no programa do calendário digital, imagine que nós tenhamos que definir constantes que representem os meses do ano. Para isso, podemos utilizar o tipo enum da seguinte forma:

Com isso, nós acabamos de criar um tipo enumerado chamado m e s e s e declarar uma variável desse tipo chamada m e s , essa variável por sua vez aceita como dados apenas as constantes enumeradas definidas por nós durante a criação do conjunto de constantes do tipo m e s e s , são elas: J A N E I R O , F E V E R E I R O , M A R C O etc.

Os tipos enumerados devem ser criados no mesmo local em que as constantes são definidas com base na anatomia dos programas que nós criamos, para isso basta escrever enum e em seguida colocar o nome do tipo enumerado que será criado, no caso acima foi esse nome foi m e s e s . Após isso, devemos definir entre chaves todas as constantes enumeradas que farão parte do conjunto desse tipo.

Mas por que chamamos elas de constantes enumeradas?

Porque a partir do momento que atribuímos um valor inicial, como foi feito com a constante J A N E I R O (atribuída com o valor 1), todas as outras constantes armazenarão os valores seguintes, então teremos: F E V E R E I R O armazenando o valor 2, M A R C O armazenando o valor 3 e assim por diante até D E Z E M B R O que armazenará o valor 12.

Caso o valor inicial 1 não fosse atribuído, J A N E I R O passaria a armazenar o valor 0 e a enumeração das constantes seguiria a partir disso.

A forma geral para criar um tipo enumerado é dada pelo seguinte trecho de código:

Na prática o que isso significa?

Que a variável declarada durante a criação do tipo enumerado aceita qualquer uma das constantes definidas na criação desse tipo, isso acontece da seguinte forma (utilizando o tipo m e s e s como exemplo):

Onde agora a variável do tipo enumerado m e s e s chamada m e s armazena o valor 3.

Eu sei que o conceito do tipo enum é denso, por isso, para que possamos melhorar o nosso conhecimento, devemos resolver alguns exercícios de fixação.

Espero te encontrar na página aqui do lado, até logo!

Declaração de variável do tipo enum

Exercícios Resolvidos

Exercício Resolvido #1

Explique o tipo enum e qual é a sua principal vantagem em relação a definição comum de constantes.

Passo 1

O tipo enum nada mais é do que um tipo computacional que é capaz de armazenar um conjunto de constantes enumeradas.

Passo 2

A sua grande vantagem em relação a definição de constantes através de #define, está na capacidade da atribuição de valores sequenciais de forma automática e da criação de uma variável que é capaz de trabalhar apenas com esse conjunto de constantes.

Resposta

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

Exercício Resolvido #2

Utilize o tipo enum para realizar a enumeração dos meses de um ano.

Passo 1

O objetivo desse enunciado é definir um conjunto de constantes que representam os meses de um ano. Utilizando o tipo enum, temos:

Resposta

Com isso, acabamos de criar um tipo de constantes enumeradas chamado m e s e s _ a n o e declaramos uma variável desse tipo chamada m e s .

Exercício Resolvido #3

Suponha que você está desenvolvendo um calendário.

Utilize o tipo enum para criar um conjunto de constantes enumeradas denominado d i a s _ s e m a n a , essas constantes devem ser enumeradas da seguinte forma:

  1. Domingo;
  2. Segunda;
  3. Terça;
  4. Quarta;
  5. Quinta;
  6. Sexta;
  7. Sábado.

Posteriormente, mas ainda na definição do tipo enum, crie uma variável capaz de armazenar apenas os valores presentes no conjunto d i a s _ s e m a n a denominado d i a e inicialize-a com a constante S E G U N D A .

Passo 1

Em primeiro lugar, devemos criar o conjunto de constantes enumeradas d i a s _ s e m a n a e a variável d i a , para isso faremos o seguinte:

Passo 2

Depois de definir o conjunto de constantes enumeradas, podemos iniciar a variável d i a com a constante S E G U N D A :

Resposta

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

Exercício Resolvido #4

Durante o planejamento das olimpíadas, cada modalidade esportiva recebeu um código específico:

  1. Futebol;
  2. Ginástica;
  3. Natação;
  4. Atletismo.

Você foi contratado para ser o responsável pelo programa que irá organizar a ordem desses esportes durante o evento. Por esse motivo, desenvolva um código utilizando o tipo enum para enumerar as modalidades e crie uma variável capaz de receber o código apenas das modalidades presentes no evento.

Passo 1

Basicamente, o que o enunciado está pedindo é que utilizemos o tipo enum para criarmos um conjunto de constantes enumeradas juntamente com a declaração de uma variável desse tipo, faremos isso da seguinte forma:

Resposta

Com isso, acabamos de criar um tipo enumerado m o d a l i d a d e s e definir uma variável desse tipo chamada c o d _ m o d a l i d a d e , essa será responsável por receber os códigos definidos no conjunto de constantes.

Exercício Resolvido #5

Suponha que você está desenvolvendo o aplicativo de um festival de música muito famoso e para facilitar o trabalho com as lineups você decidiu enumerar as bandas que irão tocar no primeiro dia do festival.

As bandas confirmadas para esse dia são:

  • Foo Fighters;
  • Bon Jovi;
  • Iron Maiden.

Inicie essa enumeração em 1 e não se esqueça de criar uma variável denominada b a n d a que irá trabalhar com essas constantes.

Passo 1

Começando a enumeração pela constante F O O _ F I G H T E R S , podemos criar o tipo enumerado da seguinte forma:

Resposta

Com esse simples trecho de código, acabamos de criar um tipo enumerado b a n d a s e declarar uma variável desse tipo chamada b a n d a .

Exercício Resolvido #6

Dado o seguinte conjunto de constantes enumeradas que representam os cinco primeiros pilotos e suas respectivas posições de largada no grande prêmio do Japão de 2019 (Fórmula 1):

Crie três variáveis do tipo enumerado grid_f1 que representarão as três primeiras posições do grid de largada, em seguida atribua a elas as constantes dos respectivos pilotos que ocupam essas posições.

Passo 1

A primeira coisa que devemos fazer é declarar as variáveis que irão representar as três primeiras posições do grid de largada:

Passo 2

Com a declaração das variáveis, basta realizarmos a atribuição dos respectivos pilotos que ocuparam as três primeiras posições de largada:

Resposta

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

Exercício Resolvido #7

Um amigo que adora charadas definiu o seguinte tipo enumerado em uma linguagem de programação:

E em seguida propôs que você dissesse o valor das constantes B, E e I.

Você, no processo de se tornar um mito da programação com o Responde Aí, logo percebeu que se tratava do tipo enum da linguagem C e prontamente deu a resposta da charada.

Quais são os valores das constantes B, E e I?

Passo 1

A primeira resposta que devemos dar é o valor da constante B.

Fazendo uma análise na enumeração, como não há nenhum valor de início explícito, o valor da constante A é 0 e como as enumerações são feitas de forma sequencial, o valor da constante B é 1.

Passo 2

Agora, devemos responder o valor da constante E.

Como ao longo da enumeração houve explicitamente uma mudança de valor da constante C, que ao invés de assumir o valor 2 agora assume o valor 33, todas as constantes a partir de C foram enumeradas sequencialmente com início de enumeração em 33, sendo assim a constante E possui valor 35.

Passo 3

Por fim, para terminar a charada basta você responder o valor da constante I.

O mesmo que ocorreu no passo anterior ocorre agora, ao longo da enumeração houve novamente uma mudança explicita, porém agora na constante G que passou a assumir o valor 142. Dessa forma, todas as constantes posteriores foram renumeradas com início em 142, o que faz com que o valor da constante I seja 144.

Resposta

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

Exercício Resolvido #8

Um computador, no nível mais baixo de abstração, processa os seus dados através de números binários onde: 1 representa verdadeiro e 0 representa falso. Através desse conceito, algumas linguagens de programação criaram um tipo que é capaz de aceitar apenas os valores verdadeiro e falso, esse tipo é denominado booleano.

Sabendo que a linguagem C não possui esse tipo, crie a sua própria versão do tipo booleano utilizando os conceitos de enumeração presentes na linguagem através do tipo enum.

Passo 1

Para criar o nosso tipo booleano, nós temos que assimilar o valor 1 com uma constante V E R D A D E I R O e o valor 0 com uma constante F A L S O .

Resposta

Fazer isso é muito simples, basta criarmos um conjunto de constantes denominado b o o l e a n o e incluirmos apenas duas constantes: V E R D A D E I R O e F A L S O .

A imagem a seguir ilustra como isso pode ser feito:

Lembrete: nesse caso não é necessário definir um valor de início para a enumeração, pois a constante F A L S O irá armazenar o valor 0 , esse que por padrão é o valor que sempre inicializará uma enumeração caso nenhum outro valor esteja explicito durante a definição do tipo enum.