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
48
int
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
}
main
int main(void)
Definition
Ejemplo_035.c:15
src
20261
src
Ejemplo006.c
Generated by
1.16.1