Acerca de¶
Estos ejercicios te permitirán practicar el uso de alias de tipos (typedef) en
C para estructurar mejor tu código y mejorar su legibilidad.
Para profundizar en los conceptos teóricos, podés consultar el siguiente capítulo del apunte:
Definición de Alias de Tipos¶
Ejercicio 19.1 - Días de la semana ⭐⭐☆☆☆¶
Solution to Exercise enums-1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77#include <stdio.h> #include <stdbool.h> typedef enum { LUNES, MARTES, MIERCOLES, JUEVES, VIERNES, SABADO, DOMINGO, DIA_INVALIDO } dia_semana_t; typedef enum { DIA_LABORAL, FIN_DE_SEMANA, ERROR_DIA_INVALIDO } tipo_dia_t; tipo_dia_t clasificar_dia(dia_semana_t dia) { switch (dia) { case LUNES: case MARTES: case MIERCOLES: case JUEVES: case VIERNES: return DIA_LABORAL; case SABADO: case DOMINGO: return FIN_DE_SEMANA; default: return ERROR_DIA_INVALIDO; } } const char *dia_a_string(dia_semana_t dia) { static const char *nombres[] = { "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo" }; if (dia < 0 || dia >= DIA_INVALIDO) { return "Día inválido"; } return nombres[dia]; } int main() { for (int i = LUNES; i <= DOMINGO; i++) { dia_semana_t dia = (dia_semana_t)i; tipo_dia_t tipo = clasificar_dia(dia); printf("%s: ", dia_a_string(dia)); switch (tipo) { case DIA_LABORAL: printf("Día laboral\n"); break; case FIN_DE_SEMANA: printf("Fin de semana\n"); break; case ERROR_DIA_INVALIDO: printf("Error: día inválido\n"); break; } } // Probar con valor inválido dia_semana_t dia_malo = (dia_semana_t)42; tipo_dia_t resultado = clasificar_dia(dia_malo); if (resultado == ERROR_DIA_INVALIDO) { printf("Detección correcta de día inválido: %d\n", dia_malo); } return 0; }