Redefinição de tipos

Ver Todos os Exercícios

Teoria

Introdução

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

Nos tópicos anteriores nós conversamos um pouco sobre os principais tipos e variações da linguagem C. Tendo eles como base, nesse tópico nós iremos falar sobre a redefinição de tipos.

Mas por qual motivo devemos saber redefinir um tipo?

Pois se trata de uma forma de transferir todas as propriedades desse tipo para outro de nome diferente, isso nos ajuda a criar tipos mais contextualizados e com mais sentido com aquilo que estamos desenvolvendo.

Redefinição de tipo

Uma ótima forma para entendermos como isso funciona, é utilizarmos um exemplo:

Suponha que você e um amigo possuam uma pequena empresa que desenvolve programas comerciais. Com a alta demanda de projetos, vocês decidiram contratar mais um funcionário para auxiliá-los nos desenvolvimentos. Porém, apesar de saber programar em outras linguagens o inglês dele não era um de seus pontos fortes, o que fez com que ele não se adaptasse com a escrita dos tipos primitivos da linguagem C, que são: int, float e char.

Com essa situação chata e sem tempo para contratar mais pessoas, você sendo um ótimo programador, redefiniu todos os tipos para as suas respectivas traduções em português.

Então, a partir desse momento todos os códigos possuem os seguintes nomes para os tipos primitivos:

  • inteiro ao invés de int;
  • flutuante ao invés de float;
  • caractere ao invés de char.

Com essa solução, todos os programadores agora conseguem desenvolver os seus programas sem mais problemas.

Portanto, podemos dizer que o conceito de redefinição de um tipo consiste em apelidar um tipo presente na linguagem com um nome melhor para determinado contexto de desenvolvimento.

Redefinindo tipos

Para criarmos as redefinições do exemplo anterior, basta escrevermos o seguinte trecho de código:

Onde incluímos o comando de redefinição typedef seguido do tipo que será apelidado e do próprio apelido. No caso da primeira redefinição, o tipo apelidado foi int e o apelido dado foi inteiro.

Isso fará com que a declaração de uma variável inteira, antes feita utilizando o nome int, agora seja feita da seguinte forma:

O mesmo ocorre para as outras redefinições:

Redefinindo o tipo enum

Nós também podemos redefinir o tipo enum, a grande diferença é que ao fazermos isso poderemos declarar variáveis desse tipo enumerado em qualquer parte do código e não mais apenas em sua criação.

Para termos uma noção de como essa redefinição é feita, vamos utilizar mais um exemplo:

Suponha que você esteja desenvolvendo um programa para simular uma prova objetiva com apenas duas alternativas. Para isso, você criou um tipo enumerado chamados alternativas com um conjunto de apenas duas constantes: N A O e S I M .

Pensando em deixar o seu código mais visível, você decidiu apelidar o tipo enumerado alternativas para respostas e assim criar variáveis para cada uma das perguntas dessa prova, que por sua vez armazenarão apenas o valor de uma das duas constantes presentes no tipo enumerado.

Dá uma olhadinha em como essa redefinição pode ser feita:

Nós basicamente utilizamos o comando typedef seguido de alternativas, que é nome do tipo enumerado que será apelidado, que por sua vez é seguido do apelido respostas.

Graças a essa redefinição, agora podemos declarar inúmeras variáveis do tipo enumerado alternativas utilizando o apelido respostas:

O que faz muito mais sentido, já que as variáveis agora representam questões únicas da prova objetiva que está sendo desenvolvida e armazenarão apenas uma de suas possíveis respostas.

Agora que já sabemos redefinir os principais tipos da linguagem C, você não acha que está na hora de resolvermos alguns exercícios de fixação?

Estou te esperando na próxima página!

Redefinindo tipos

Redefinindo o tipo enum

Exercícios Resolvidos

Exercício Resolvido #1

Explique o conceito de redefinição de tipos com o comando typedef na linguagem C.

Passo 1

De maneira menos formal, redefinir um tipo é semelhante a apelidar esse mesmo tipo.

Por exemplo, quando apelidamos alguém passamos a referenciar essa pessoa através de um nome característico, ou seja, um nome representativo que em nada afeta as suas informações verdadeiras.

O mesmo ocorre na programação, quando redefinimos um tipo estamos “apelidando” ele para referenciá-lo a partir de um nome representativo naquele contexto de desenvolvimento, porém todas as informações e características que ele possuía antes da redefinição ainda estão presentes após a realização dela.

typedef nada mais é que o mecanismo utilizado na linguagem C para realizar as redefinições de tipos descritas.

Resposta

Redefinir um tipo nada mais é para o programa do que apelidar esse tipo.

Exercício Resolvido #2

Suponha que você está desenvolvendo um programa que tem como objetivo auxiliar uma academia local a realizar as avaliações físicas de seus clientes.

Durante o planejamento do programa, você percebeu que todas as variáveis que seriam utilizadas no desenvolvimento do programa armazenavam como dado a massa dos frequentadores da academia. Com isso, você decidiu redefinir o tipo das variáveis responsáveis por armazenar esse dado para massa.

Escreva o código que melhor representa essa redefinição.

Passo 1

Antes de realizar essa redefinição, precisamos identificar o tipo do dado que será redefinido.

Como o enunciado diz que todas as variáveis que seriam utilizadas no desenvolvimento do programa teriam como dado armazenado a massa dos frequentadores da academia, podemos concluir que o tipo que será redefinido é float, pois a massa de uma pessoa se trata de um número contido em R .

Passo 2

Por fim, basta realizarmos a redefinição:

Para isso, utilizamos o comando typedef seguido do tipo que será redefinido (float) que por sua vez é seguido do apelido, nesse caso massa. Vale lembrar que os três elementos devem estar separados por um espaço em branco.

Lembrete: as redefinições que serão feitas no seu programa devem seguir uma boa prática de programação e serem realizadas antes da declaração da função main.

Resposta

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

Exercício Resolvido #3

Cada tipo primitivo de dados possui uma ramificação que altera apenas a sua capacidade de armazenamento, por exemplo:

  • O tipo int é capaz de armazenar um número n tal que - 2.147.423.648 ≤ n ≥ 2.147.423.647 ;

Porém, existe uma ramificação do tipo int denominada long long int que em termos de capacidade é muito maior que tipo original (dobro).

Suponha que você está desenvolvendo um programa que trabalha com números muito grandes a ponto de apenas a ramificação do tipo primitivo int denominada long long int ser capaz de armazená-los.

Ao observar que declarar todas as variáveis com long long int não economiza tempo, você decidiu redefinir esse tipo para referenciá-lo a partir de um nome menor. Faça o código que melhor representa essa redefinição.

Passo 1

Escolhendo o apelido i n t M a x a redefinição da variação long long int é feita da seguinte forma:

Resposta

Com isso, todas as variáveis antes declaradas através do tipo long long int agora podem ser declaradas através do apelido intMax.

Exercício Resolvido #4

Um futuro engenheiro da computação, por trabalhar com aplicações que em muitas vezes são voltadas para o hardware, precisava declarar variáveis que ocupassem exatamente 1 byte de memória.

Por não existir um tipo byte na linguagem C, o engenheiro já estava cansado. Sem saber o que fazer, ele chamou você (estudante de programação do Responde Aí!) para ajudar a resolver o problema.

Um dia você leu em um artigo na internet a seguinte informação:

  • 1 byte de memória é equivalente ao tipo primitivo de dados char.

Você, utilizando de uma técnica muito inteligente, percebeu que ao redefinir o tipo char para byte ajudaria o engenheiro a fazer a declarações de suas variáveis com exatamente 1 byte de memória sem que o tipo efetivamente exista na linguagem C.

Faça essa redefinição de tipo no código do futuro engenheiro para que ele possa continuar o desenvolvimento de sua aplicação.

Passo 1

A imagem a seguir ilustra a redefinição do tipo char para byte:

Resposta

Ou seja, mesmo que o tipo byte não exista na linguagem C, essa redefinição é capaz de realizar uma simulação perfeita alocando os mesmos 1 byte de memória.

Exercício Resolvido #5

Suponha que você esteja desenvolvendo um programa para facilitar o investimento de pessoas leigas na bolsa de valores.

Por se tratar de um programa com objetivo financeiro, todos os dados consistem basicamente em representações de numéricas. Prevendo uma futura confusão, você decidiu redefinir o tipo float para as principais moedas presentes no programa, são elas: real, dólar e euro.

Escreva o trecho de código que melhor representa a redefinição do tipo float nas moedas utilizadas pelo programa.

Passo 1

A figura a seguir ilustra o trecho de código que redefine o tipo float com a nomeação das moedas que serão utilizadas pelo programa:

Resposta

Com essas redefinições, os nomes das moedas poderão ser utilizados para declarar variáveis, facilitando assim a leitura do código.

Exercício Resolvido #6

Uma concessionária de veículos contratou você para desenvolver um catálogo digital dos bens disponíveis para venda. O catálogo deve funcionar a partir de códigos que identificam unicamente tanto motos, quanto carros e caminhões e exibe suas informações.

Durante o desenvolvimento do catálogo, você percebeu que todos os códigos de veículos eram compostos apenas por números inteiros e como forma de facilitar a legibilidade do código do seu programa você decidiu realizar uma redefinição de tipo.

Redefina o tipo primitivo que melhor caracteriza o dado código e após isso, utilizando o tipo redefinido, faça a declaração das variáveis que serão responsáveis por armazenar os códigos dos três diferentes tipos de veículos presentes no novo catálogo da concessionária.

Passo 1

A primeira coisa que devemos fazer é reconhecer o tipo primitivo que caracteriza o dado código do veículo. Como o enunciado diz que os códigos dos veículos são compostos apenas por números inteiros, fica fácil reconhecer que o tipo primitivo que será redefinido é o tipo int.

O trecho de código a seguir ilustra a redefinição do tipo int para codigo:

Passo 2

Com a redefinição realizada, podemos declarar variáveis do tipo int que representarão os códigos dos diferentes tipos de veículos através do apelido codigo:

Resposta

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

Exercício Resolvido #7

Observe o programa a seguir:

Observando o tipo das variáveis x e y e a atribuição realizada na linha 09, é correto afirmar que o programa não possui erros?

Passo 1

A primeira coisa que devemos fazer é analisar o tipo das variáveis envolvidas na atribuição mencionada:

  • Variável x é do tipo dado (redefinição do tipo int);
  • Variável y é do tipo int.

Passo 2

Pensando um pouquinho, podemos concluir que apesar da variável x ser declarada a partir do nome dado, devemos levar em consideração que esse tipo se trata de uma redefinição do tipo int. Portanto, nesse contexto o nome dado nada mais é do que um apelido para o tipo int, com isso todas as características do tipo original (int) são mantidas e apenas o nome de referenciação dele é alterado.

Então, devemos levar em consideração que nesse contexto as palavras dado e int são análogas para o programa.

Resposta

Dessa forma, podemos afirmar que a atribuição realizada na linha 09 do programa está sendo efetuada entre duas variáveis de mesmo tipo, que nesse caso é o tipo primitivo int.

Logo, podemos concluir que o programa está correto.

Exercício Resolvido #8

Uma cafeteria te contratou para desenvolver um programa capaz de tratar dados que representam as opiniões dos cliente a respeito do negócio.

Como as opiniões se baseavam apenas nas opções “Ruim”, “Bom” e “Excelente” você decidiu criar o seguinte tipo enumerado:

Ao decorrer do desenvolvimento, você percebeu que muitos ramos da cafeteria seriam avaliados como: serviço, ambiente, produtos etc. Então, como forma de evitar a criação de inúmeras variáveis do tipo enumerado a v a l i a c o e s , você decidiu redefinir esse tipo tornando as declarações posteriores mais rápidas e eficazes.

Escreva o trecho de código que melhor representa essa redefinição e mostre como seria a nova forma de declaração das variáveis do tipo enumerado.

Passo 1

A primeira coisa que devemos fazer é redefinir o tipo enumerado a v a l i a c o e s :

Passo 2

Com a redefinição de tipo feita, a nova forma de declaração de uma variável do tipo enumerado a v a l i a c o e s pode ser feita da seguinte forma:

Resposta

Portanto, a declaração de variáveis do tipo enumerado a v a l i a c o e s agora podem ser feitas de forma muito mais simples utilizando o apelido nota.