Recapitulação: Prática de Typedef e Enum
Parte da seção Lógica e Fluxo do Journey de C da Coddy. Lição 60 de 63.
Desafio
FácilCrie um programa em C que combine enum e typedef para construir uma calculadora simples de formas geométricas. Seu programa deve:
- Definir um
enumchamadoShapeTypecom as seguintes constantes nesta ordem exata:CIRCLERECTANGLETRIANGLE
- Usar
typedefpara criar um alias de tipo chamadoShapepara oenum ShapeType - Escrever uma função chamada
calculateAreaque:- Receba um parâmetro
Shapechamadoshape - Receba dois parâmetros
floatchamadosdimension1edimension2 - Retorne um
floatrepresentando a área calculada - Use uma instrução
switchpara calcular a área com base no tipo de forma:- Para
CIRCLE: área = 3.14159 * dimension1 * dimension1 (dimension1 é o raio) - Para
RECTANGLE: área = dimension1 * dimension2 (comprimento × largura) - Para
TRIANGLE: área = 0.5 * dimension1 * dimension2 (0.5 × base × altura)
- Para
- Receba um parâmetro
- Escrever uma função chamada
printShapeInfoque:- Receba um parâmetro
Shapechamadoshape - Não retorne nada (void)
- Use uma instrução
switchpara imprimir informações sobre a forma:- Para
CIRCLE: imprimirShape: Circle - Para
RECTANGLE: imprimirShape: Rectangle - Para
TRIANGLE: imprimirShape: Triangle
- Para
- Receba um parâmetro
- Na função main:
- Declare uma variável do tipo
ShapechamadaselectedShape - Declare duas variáveis
floatchamadasdim1edim2 - Leia três valores da entrada: um inteiro representando a escolha da forma (0, 1 ou 2) e dois valores float para as dimensões
- Atribua o valor enum correspondente a
selectedShapecom base na entrada - Atribua os valores das dimensões a
dim1edim2 - Chame a função
printShapeInfocomselectedShape - Imprima as dimensões neste formato exato:
Dimensions: [dim1] [dim2] - Calcule a área chamando a função
calculateArea - Imprima a área calculada com exatamente 2 casas decimais neste formato exato:
Area: [area] - Determine e imprima a categoria da forma com base na área calculada:
- Se a área for menor que 10.0: imprimir
Category: Small - Se a área estiver entre 10.0 e 50.0 (inclusive): imprimir
Category: Medium - Se a área for maior que 50.0: imprimir
Category: Large
- Se a área for menor que 10.0: imprimir
- Declare uma variável do tipo
Este desafio demonstra a poderosa combinação de enum e typedef trabalhando em conjunto. O typedef cria um nome de tipo limpo e legível, Shape, em vez de escrever repetidamente enum ShapeType. As constantes de enum tornam as instruções switch autoexplicativas, mostrando claramente o que cada caso representa. Você praticará a definição de ambos os conceitos, seu uso em parâmetros de funções e a implementação de uma lógica que depende dos valores do enum.
Experimente você mesmo
#include <stdio.h>
// TODO: Defina seu enum ShapeType e typedef aqui
// TODO: Implemente a função calculateArea aqui
// TODO: Implemente a função printShapeInfo aqui
int main() {
// Ler entrada
int shapeChoice;
float dim1, dim2;
scanf("%d", &shapeChoice);
scanf("%f", &dim1);
scanf("%f", &dim2);
// TODO: Escreva seu código abaixo
// Declarar a variável selectedShape e atribuir com base em shapeChoice
// Chamar a função printShapeInfo
// Imprimir dimensões
// Calcular e imprimir a área
// Determinar e imprimir a categoria
return 0;
}Todas as lições de Lógica e Fluxo
1Fundamentos de Ponteiros
O que é um Ponteiro?Declarando PonteirosO Operador de Endereço (&)O Operador de Desreferência (*)Ponteiros NULLRecapitulação: Fundamentos de Ponteiros4Projeto: Utilitário de Texto Simples
Visão Geral do ProjetoContando Caracteres7Estruturas (structs)
O que é uma Struct?Declarando uma StructCriando Variáveis de StructAcessando Membros de uma StructInicializando StructsRecapitulação: Struct de Dados de Aluno10Enums e Typedef
enum para Constantes NomeadasDeclarando e Usando EnumsEnums em Instruções SwitchUsando typedef para Aliases de Tipotypedef com StructsRecapitulação: Prática de Typedef e Enum2Ponteiros e Arrays
Nomes de Arrays como PonteirosElementos de Array - PonteirosAritmética de PonteirosComparando PonteirosRecapitulação: Percorrendo Arrays com Ponteiros5Ponteiros e Funções
Passagem por ValorPassando Ponteiros para FunçõesModificando Variáveis via PonteirosUm Exemplo Clássico: SwapPassando Arrays para FunçõesRecapitulação: Ponteiros como Argumentos3Arrays de Caracteres e Strings
Strings como Arrays de charO Terminador NuloEntrada de Strings com scanfUsando strlen()Usando strcpy()Usando strcat()Usando strcmp()Recapitulação: Funções Básicas de Strings6Gerenciamento de Memória
Memória Stack vs. HeapAlocação Dinâmica - malloc()Usando sizeof() para AlocaçãoVerificando Falhas de AlocaçãoLiberando Memória com free()Alocando com calloc()Recapitulação: Array Dinâmico9Projeto: Cadastro Simples de Contatos
Projeto: Definir a Struct de ContatoFunção para Criar um ContatoPratique por conta própria: Compilador de C online