ProgIng - Programación en Ingeniería
Loading...
Searching...
No Matches
Ejemplo006.c
Go to the documentation of this file.
1
39
40#include <stdio.h>
41
48int main(int argc, char *argv[])
49{
50 (void)argc;
51 (void)argv;
52
53 /*
54 T1, T2, T3, T4: Umbrales de temperatura que delimitan 5 regiones.
55 - T1: umbral inferior (más frío)
56 - T4: umbral superior (más caliente)
57 - Se asume el orden: T1 < T2 < T3 < T4
58
59 T: temperatura a clasificar (etiquetar).
60 */
61 float T1, T2, T3, T4, T;
62
63 /*
64 B1..B4 son banderas (booleanos como enteros 0/1) que indican si T es menor
65 que cada umbral, usando comparaciones del tipo (Ti > T).
66
67 Ejemplo:
68 B1 = (T1 > T) -> 1 si T es menor que T1
69 0 si T es mayor o igual que T1
70 */
71 int B1, B2, B3, B4;
72
73 /*
74 B será un "código" de 4 bits (B4 B3 B2 B1) que identifica en qué intervalo cae T.
75 Luego se usa switch(B) para imprimir la etiqueta.
76 */
77 int B;
78
79 /* --- Lectura de umbrales --- */
80 printf("Ingrese los rangos de temperaturas: ");
81 scanf("%f %f %f %f", &T1, &T2, &T3, &T4);
82
83 /* --- Lectura de la temperatura a evaluar --- */
84 printf("Ingrese la tempratura: ");
85 scanf("%f", &T);
86
87 /*
88 Se calcula cada bandera:
89 - B1 = 1 si T < T1
90 - B2 = 1 si T < T2
91 - B3 = 1 si T < T3
92 - B4 = 1 si T < T4
93
94 (Usa Ti > T, que es equivalente a T < Ti)
95 */
96 B1 = (T1 > T);
97 B2 = (T2 > T);
98 B3 = (T3 > T);
99 B4 = (T4 > T);
100
101 /*
102 Empaquetar (B4 B3 B2 B1) en un entero B usando desplazamientos:
103 B4 << 3 coloca B4 en el bit 3 (valor 8)
104 B3 << 2 coloca B3 en el bit 2 (valor 4)
105 B2 << 1 coloca B2 en el bit 1 (valor 2)
106 B1 queda en el bit 0 (valor 1)
107
108 Resultado:
109 B = (B4*8) + (B3*4) + (B2*2) + (B1*1)
110 */
111 B = (B4 << 3) | (B3 << 2) | (B2 << 1) | (B1);
112
113 /* Depuración: imprime B y sus bits B4B3B2B1 */
114 printf("%d (%d%d%d%d)\n", B, B4, B3, B2, B1);
115
116 printf("La temperatura es ");
117
118 /*
119 Para T1<T2<T3<T4, los códigos típicos son:
120 T < T1 -> 1111 (15) -> "muy baja"
121 T1<=T<T2 -> 1110 (14) -> "baja"
122 T2<=T<T3 -> 1100 (12) -> "templada"
123 T3<=T<T4 -> 1000 ( 8) -> "alta"
124 T>=T4 -> 0000 ( 0) -> "muy alta"
125 */
126 switch (B)
127 {
128 case 15:
129 printf("muy ");
130 /* fall-through intencional: completa con "baja" */
131 case 14:
132 printf("baja\n");
133 break;
134
135 case 12:
136 printf("templada\n");
137 break;
138
139 case 0:
140 printf("muy ");
141 /* fall-through intencional: completa con "alta" */
142 case 8:
143 printf("alta\n");
144 break;
145
146 default:
147 /* Código no contemplado (p.ej. umbrales desordenados) */
148 break;
149 }
150
151 printf("\n");
152 return 0;
153}
int main(void)
Definition Ejemplo_035.c:15