ProgIng - Programación en Ingeniería
Loading...
Searching...
No Matches
Ejemplo002.c
Go to the documentation of this file.
1
34
35#include <stdio.h>
36
43int main(int argc, char *argv[])
44{
45 (void)argc;
46 (void)argv;
47
48 /* Entradas: solicitud de interrupción por dispositivo (0/1). */
49 int D4, D3, D2, D1;
50
51 /* Bits de salida: b2 b1 b0 (representan 0..4). */
52 int b2, b1, b0;
53
54 /* Salida decimal equivalente a (b2 b1 b0). */
55 int salida;
56
57 /* Se leen las entradas en el orden: D4 D3 D2 D1. */
58 if (scanf("%d %d %d %d", &D4, &D3, &D2, &D1) != 4) {
59 printf("Error: se esperaban 4 valores (D4 D3 D2 D1).\n");
60 return 1;
61 }
62
63 /*
64 Lógica de prioridad (D1 mayor prioridad):
65
66 Para “habilitar” un dispositivo de menor prioridad, se exige que NO haya
67 dispositivos de mayor prioridad activos.
68
69 b2 debe ser 1 solo cuando gana D4 (100):
70 b2 = D4 · ¬D3 · ¬D2 · ¬D1
71 */
72 b2 = D4 && (!D3) && (!D2) && (!D1);
73
74 /*
75 b1 es 1 cuando la salida es 2 (010) o 3 (011):
76 - Para 3: D3 · ¬D2 · ¬D1
77 - Para 2: D2 · ¬D1
78 => b1 = (D3 · ¬D2 · ¬D1) + (D2 · ¬D1)
79 */
80 b1 = (D3 && (!D2) && (!D1)) || (D2 && (!D1));
81
82 /*
83 b0 es 1 cuando la salida es 1 (001) o 3 (011):
84 - Para 1: D1
85 - Para 3: D3 · ¬D2 · ¬D1
86 => b0 = D1 + (D3 · ¬D2 · ¬D1)
87 */
88 b0 = (D1) || (D3 && (!D2) && (!D1));
89
90 /* Convertir (b2 b1 b0) a decimal: salida = b2*4 + b1*2 + b0. */
91 salida = (b2 << 2) | (b1 << 1) | b0;
92
93 printf("Salida = %d (%1d %1d %1d)\n", salida, b2, b1, b0);
94 return 0;
95}
int main(void)
Definition Ejemplo_035.c:15