Algebra Booleana PDF
Algebra Booleana PDF
Algebra Booleana PDF
ESCUELA DE INGENIERÍA
Certifico que el presente trabajo fue desarrollado por LUIS EDUARDO LÓPEZ,
bajo mi supervisión.
Ing. Carlos
DIREbrOR-BÉPROYECTO
CONTENIDO
R. RESUMEN iv
P. PRESENTACIÓN vi
1. INTRODUCCIÓN 1
1.1. Introducción 1
RESUMEN
PRESENTACIÓN
INTRODUCCIÓN
1.1.- INTRODUCCIÓN.
"El concepto de variable lógica fue introducido en 1850 a través del uso
del álgebra booleana. El álgebra booleana es un método muy sencillo para
expresar situaciones, en forma de lenguaje matemático. La lógica digital adquiere
su dimensión práctica a través de las compuertas y se consolida como una
ciencia estructurada mediante el álgebra booleana. Sus principios teóricos fueron
desarrollados por el matemático ingles George Boole en su obra "Análisis
matemático de la lógica" publicada en 1847. Sin embargo, sólo hasta 1938 se
descubrió su real utilidad".
VOLTAJE
2.5
Vx
0.8 i
1 http://pehuen.chiUan.ubiobio.cl/-lgaiardo/odc/algebra/
Como se puede ver en la figura 1.1 Vx es el rango de voltaje analógico
prohibido, es decir que para representar un 1 lógico o un O lógico no debe existir
un voltaje en este rango.
1. Los postulados no incluyen la ley asociativa. Sin embargo esta ley es válida
para el álgebra de Boole y puede deducirse de otros postulados.
Las funciones lógicas tienen analogía con los interruptores, debido a una
concepción histórica, ya que antes de la invención de los dispositivos de estado
sólido y de los circuitos integrados, las funciones lógicas se construyeron con
relés electromecánicos (relevadores), y las primeras computadoras tenían miles
de estos dispositivos interconectados mediante conjuntos de alambres.
A continuación se definen algunos términos que servirán para estructurar
una función booleana.
A B A.B
r=A.B 0 0 0
0 1 0
1 0 0
1 1 1
1>A+B
Las compuertas AND, OR y XOR tienen otras variantes, que no son más
que, a las compuertas antes mencionadas, añadir a la salida la compuerta NOT,
obteniéndose como resultado las compuertas NAND, ÑOR y XNOR. Las salidas
de estas compuertas son por lo tanto de un valor de verdad contrario ai valor de
verdad origina! de las compuertas.
NAND
A B A.B (A.B)'
0 0 0 1
A
.Y=(A.B) ' 0 1 0 1
B 1 0 0 1
1 1 1 0
ÑOR
AB A+B (A+B)1
f=(A+B) ' 00 0 1
01 1 0
10 1 0
11 1 0
XNOR
A B A®B (A®B)'
00 0 1
XAÍ 01 1 0
10 1 0
11 0 1
a) NOT. A'=(A.A)'.
11
b) AND. A.B=((A.B)')'
= { A ' .B 1
"-• (B.B¡
b)AND. A.B=(A'+B')'
(A+A) '
A->:
Y={A'+BI)
B-S (B+B) f
c) OR. A+B=((A+B)')'
O Y={(ñ+B)')'
CAPITULO 2.
A B c D Y
0 0 0 0 0 0
1 0 0 0 1 0
2 0 0 1 0 0
3 0 0 1 1 0
4 0 1 0 0 0
5 0 1 0 1 0
6 0 1 1 0 0
7 0 1 1 1 1 Mintérmino m?
8 1 0 0 0 0
9 1 0 0 1 0
10 1 0 1 0 0
11 1 0 1 1 1 Mintérminomn
12 1 1 0 0 0
13 1 1 0 1 1 Mintérmino mi3
14 1 1 1 0 1 Mintérmino mu
15 1 1 1 1 0
A B e & 1 -v *
7 0 1 1 1 1
11 1 0 1 1 1
13 1 1 0 1 1
14 1 1 1 0 1
£..„
A C o % 1
7 A1 B c D 1
11 A B' c D 1
13 A B C1 D 1
14 A B c D1 1
ini3 = ABC'D
variable vale O, se deja tal como estaba, es decir, sin negar (A, B, C, D). En la
siguiente tabla se ilustra este paso:
A B c o Y
0 0 0 0 0 0
1 0 0 0 1 0
2 0 0 1 0 0
3 0 0 1 1 0
4 0 1 0 0 0
5 0 1 0 1 0
6 0 1 1 0 0
8 1 0 0 0 0
9 1 0 0 1 0
10 1 0 1 0 0
12 1 1 0 0 0
15 1 1 1 1 0
A B C D Y
0 A B C D 0
1 A B c D' 0
2 A B C' D 0
3 A B C' D' 0
4 A B' c D 0
5 A B' c D' 0
6 A B' C' D 0
8 A' B c D 0
9 A' B c D' 0
10 A' B C' D 0
12 A1 B' c D 0
15 A' B' C' D' 0
Y^Mo* jtf-m?itf
A -vp¿ c D M4* M5* M6* M8* M9*
Miü*Mi2*Mi5
0 0 0 0 0 A+B+C+D Maxtérmíno M0
1 0 0 0 1 A+B+C+D' Maxtérmino MI
2 0 0 1 0 A+B+C'+D Maxtérmino M2
3 0 0 1 1 A+B+C'+D' Maxtérmino M3
4 0 1 0 0 A+B'+C+D Maxtérmino M4
5 0 1 0 1 A+B'+C+D' Maxtérmino M5
6 0 1 1 0 A+B'+C'+D Maxtérmino Me
8 1 0 0 0 A'+B+C+D Maxtérmino M8
9 1 0 0 1 A'+B+C+D' Maxtérmino M9
10 1 0 1 0 A'+B+C'+D Maxtérmino M-|0
12 1 1 0 0 A'+B'+C+D Maxtérmino Mi2
15 1 1 1 1 A'+B'+C'+D' Maxtérmino Mi5
Mi2 = A'+B'+C+D
Y=M0* Mi* M2* M3* M4* M5* M6* M8* M9* M10* Mi2* Mi5
Una tabla de verdad sirve para visualizar de mejor manera las salidas
que tiene una función con todas y cada una de las entradas, la tabla se
construye con un número de filas igual a 2n; donde n es el número de variables
de entrada
F<A,B,C>=A*B'*C+A'*OB*C
3. -La suma lógica representa una Unión mientras que un producto una
Intersección
a) A + B; A U B suma lógica.
0 +0 =0
22
0+1 =1
1+0=1
1 + 1=1
b) A. B; AnB producto lógico
0.0 = 0
0.1 = 0
1.0 = 0
1.1 = 1
4. -Identidad.
A +0 =A A.1=A
5. -Elementos Nulos.
A+1 = 1 A.0 = 0
6. -Idempotencia.
A +A =A A.A = A
7. -Involución.
(A')1 = A.
8. -Complementos.
A + A' = 1 A.AJ = O
9. -Ley Conmutativa
A+B = B+A A.B = B.A
11.-Ley Distributiva.
A.B + A.C = A (B + C) A + B.C = (A + B)(A + C).
23
12.-Cobertura
A + A.B = A A. (A+B) = A
13.-Combinación.
AB + AB1 = A (A + B)(A + B') = A.
14.-Consenso
AB + A'C + BC = AB + A'C (A + B)(A' + C)(B + C) = (A + B)(A' + C)
A+B=AB
ÁB = Á + B
A + B + C+ + N = A . B. C N
A. B. C N = A + B + C+.... + N
F = xy + x'z + yz.
F = xy + x'z +yz(x+x'). Teorema del complemento.
= xy + x'z + xyz + x'yz Distributiva.
= (xy+xyz) + (x'z + x'yz) Asociativa.
= xy(1+z) + x'z(1+y) Distributiva.
= xy + x'z Elementos nulos.
24
Cuando se utiliza este método no existe un solo camino sino que depende
de la habilidad de la persona que está simplificando para aplicar las propiedades.
de trabajar mejor con patrones gráficos que con ecuaciones y otras formas de
expresión analítica.
Este método se basa en dos teoremas básicos del Algebra de Boole, estos
son los siguientes.
í) XY + X'Y = Y.
íi) X + X'Y = X + Y.
Por ejemplo:
26
A B X
0 0 X0
0 1 Xi
1 0 X2
1 1 X3
B'
A B c X
0 0 0 Xo
0 0 1 Xi
0 1 0 X2
0 1 1 X3
1 0 0 X4
1 0 1 X5
1 1 0 X6
1 1 1 X7
En el mapa 23 = 8 cuadrados.
C'
27
A B c
D X
0 0 0 0 Xo
0 0 0 1 XT
0 0 1
0 X2
0 0 1 1 X3
0 1 0 0 X4
0 1 0 1 X5
0 1 1 0 X6
0 1 1 1 X7
1 0 0 0 X8
1 0 0 1 X9
1 0 1 0 Xio
1 0 1 1 Xn
1 1 0 0 Xi2
1 1 0 1 Xl3
1 1 1 0 Xu
1 1 1 1 Xis
En el mapa 24 = 16 cuadrados.
Los cuadrados del mapa K se marcan, de tal forma que los cuadrados
horizontalmente adyacentes solo difieran en una variable. Por ejemplo, el
cuadrado Xo del mapa de cuatro variables es A'B'C'D', mientras tanto que el
cuadrado Xi es A'B'C'D entre estos dos estados únicamente la variable D es
diferente. De la misma manera los cuadrados verticalmente adyacentes difieren
en una sola variable. Por ejemplo, el cuadrado Xo es A'B'C'D' mientras tanto que
el X4 es A'BC'D' en este caso solo la variable B es diferente.
Los cuadrados del renglón superior (X0, Xi, Xa, Xa) se consideran
adyacentes a los cuadrados del renglón inferior (Xg, X9, Xn, XIQ). Así mismo los
28
cuadrados del extremo derecho (X0, X4, Xi2, Xa) se consideran adyacentes a los
cuadrados del extremo izquierdo (X2, Xe, X14,
A B c X
0 0 0 1
0 0 1 1
0 1 0 1
0 1 1 0
1 0 0 0
1 0 1 0
1 1 0 1
1 1 1 0
A B c D X
0 0 0 0 0
0 0 0 1 0
0 0 1 0 1
0 0 1 1 1
0 1 0 0 0
0 1 0 1 0
0 1 1 0 0
0 1 1 1 0
1 0 0 0 1
1 0 0 1 0
1 0 1 0 1
1 0 1 1 0
1 1 0 0 0
1 1 0 1 0
1 1 1 0 0
1 1 1 1 0
1. Construcción del mapa K. Ubicando los unos en los cuadrados que indican la
tabla de verdad y ceros en los otros cuadrados.
2. Examinar el mapa y ver los cuadrados que tienen un "1" pero con cuadrados
adyacentes diferentes a "1" a estos se llaman unos aislados, ya que no se
agrupan con ningún otro cuadrado que tenga un "1".
3. Identificar los cuadrados que pueden combinarse con otro de una sola
manera. Se señala estos grupos de dos cuadrados. Los cuadrados que
pueden combinarse con grupos de dos más de una manera, se omiten de
momento.
31
4. Identificar los cuadrados que puedan combinarse con otros tres de una sola
forma. Si todos los grupos de cuatro así obtenidos no están ya incluidos en
grupos de dos, señalarlos. De nuevo, se omiten los cuadrados que pueden
combinarse con grupos de cuatro, más de una manera.
5. Agrupar cualquier octeto aunque algunos de los cuadrados que tiene unos ya
estén agrupados.
A B c D X
0 0 0 0 0
0 0 0 1 0
0 0 1 0 1
0 0 1 1 0
0 1 0 0 0
0 1 0 1 1
0 1 1 0 0
0 1 1 1 1
1 0 0 0 0
1 0 0 1 0
1 0 1 0 0
1 0 1 1 1
1 1 0 0 0
1 1 0 1 1
1 1 1 0 0
1 1 1 1 1
32
Construimos el mapa K.
Los cuadrados X5, X 7j Xi3 y Xis forman un cuádruple, están encerrados con
azul, de este agrupamiento se obtiene el término BD y se eliminan las variables A
yC.
X=A'B'CD'+ACD
33
Una variable de conmutación que puede asumir solo dos valores, se puede
representar mediante dos puntos en los extremos de un solo segmento.
0. A 1
Fig 2.1: Representación de una variable de conmutación.
001 A 101
0 A 1
o ooox-" ¡ ior>^
) 00 A 10 I B
I
B B ¡
• — — — 3-* 111
B B B
ff ^c
_ **
1 oro A 110
1 01 A 11 o. A
00 00.
m r m
I I
m3 j
oxo m3
0111 _1 011
11 01X
m7 m7
010 010
m2 m2
Cubos - O Cubos - 1
Fig. 2.3: Representación de un cubo-3
35
Cubos - 2
COMBINACIÓN #de
A B C D "UNOS"
V mo 0 0 0 0 0
V nri2 0 0 1 0 1
V m8 1 0 0 0
V 1113 0 0 1 1 2
V m6 0 1 1 0
V iTlg 1 0 0 1
V mío 1 0 1 0
V m7 0 1 1 1 3
V mis 1 1 0 1
Cubo 1
0,2 00X0 V
0,8 XOOO V
2,3 001 X V
2,6 0X10 V
2, 10 X010 V
8,9 100X
8, 10 10X0 V
3,7 0X11 V
6,7 01 1X V
9, 13 1X01
Una vez obtenida esta tabla se debe seguir el mismo proceso para obtener
la tabla de cubos 2, pero aquí interviene un nuevo elemento como es la X.
Nuevamente, los cubos de cada grupo se deben comparar sólo con los cubos del
siguiente grupo hacia abajo. En el ejemplo nuestro el cubo - 1 (0,2) se combina
con el cubo - 1 (8,10) y se obtienen el cubo 2 (O, 2, 8, 10) (XOXO), los dos cubos -
1 usados se marcan para indicar que se han usado para formar cubos - 2.
Cubo -2
0, 2, 8, 10 XOXO
2, 3, 6, 7 OX1X
IMPLICANTES PRIMOS
1 O O X
1 X 0 1
X O X O
O X 1 X
0 2 3 6 7 8 9 10 13
1 0 0 X V y
* 1 X 0 1 T í •\
* X 0 X 0- y •J•
^1 Jy
,/
1 V
* n y 1 y- ' JV
^
v V V V V V V V V
iii) Toda la fila se elimina para indicar que ya ha sido tomada en cuenta
X O X O
O X 1 X
1 X 0 1
Ejemplo 2.
F(A, B, C, D, E) = Smíl, 2, 3, 5, 9, 10, 11, 18, 19, 20, 21, 23, 25, 26, 27).
42
TABLA DE COMBINACIONES.
CUBOS - 1
V 1,3 000X1
1,5 00X01
V 1,9 0X001
V 2,3 0001 X
V 2, 10 0X010
V 2, 18 X0010
V 3,11 0X011
V 3, 19 X0011
5,21 X0101
V 9,11 010X1
V 9,25 X1001
V 10, 11 0101X
V 10,26 X1010
v 18, 19 1001X
18,26 1X010
20,21 1010X
v 11,27 X1011
19,23 10X11
V 19,27 1X011
21,23 101X1
V 25,27 110X1
V 26,27 1101X
Cubos - 2
1,3,9,11 0X0X1
V 2,3, 10, 11 OX01X
V 2,3, 18, 19 X001X
V 2, 10, 18,26 XX010
V 3, 11, 19,27 XX011
9, 11,25,27 X10X1
V 10, 11,26,27 X101X
V 18, 19,26,27 1X01X
Cubos - 3
2, 3, 10, 11, 18, 19, 26, 27 XX01X
IMPLICANTES PRIMOS
1,5 00X01
5,21 X0101
20,21 1010X
19,23 10X11
21,23 101X1
1,3,9, 11 0X0X1
9, 11,25,27 X10X1
2,3, 10, 11, 18. 19,26,27 XX01X
44
2 3 5 9 10 11 18 19 20 21 23 25 26 27
00X01 V V
X0101
- — J —,»,
V
* 1010X" "N V
^
10X11 " f V
101X1 V V
0X0X1 V ^| \l V
X10X1- tl ^/ •Jí V
*
1 f
vYrnly\
Y _/ -/ J „/ _/ _/ j
* /v/xU V ^ f V ** 1 V
V V V V -\l V V V V V V V
X10X1 -» BC'E
XX01X ^ C'D.
Una vez que tenemos los implicantes primos esenciales, ya tenemos una
parte de fa función simplificada ahora tendremos que ver los implicantes primos
secundarios que tienen menor costo, es decir, que tienen menos variables en el
término.
1 5 23
00X01 V V
X0101 V
10X11 V
101X1 V
0X0X1 V
1 5 23
* 00X01 J i/ i
V
* 10X11 /
V
0X0X1 - V
V V V
Ejemplo 3.
COMBINACIÓN número de M
A B C "UNOS"
mi 0 0 1 1
rru 1 0 0 V
m6 1 1 0 2 V
m7 1 1 1 3 V
Tabla de cubos - 1
Combinaciones Cubos 1 M
4, 6 1 X 0
6, 7 1 1 X
IMPLICANTES PRIMOS
0 0 1
1 X 0
1 1 X
47
TABLA DE IMPLICANTES
0 O 1
1 X O
1 1 X
FUNCIÓN RESULTANTE
entradas sea "O" o "1". Otra posibilidad es que algunas combinaciones de las
entradas nunca suceden debido a restricciones externas del sistema que se va a
diseñar.
Esta función indica que los mintérminos m4 y m5 tienen como salida "1"
mientras que los mintérminos mo, me y m7 tienen como salida no especificada.
A B C F(A, B, C)
0 0 0 X
0 0 1 0
0 1 0 0
0 1 1 0
1 0 0 1
1 0 1 1
1 1 0 X
1 1 1 X
las salidas no especificadas como "1" o "O" de acuerdo como produzca un grupo
de mayor cantidad de cuadros, con el objeto de tener una función más
simplificada posible.
F(A,B)=A
Las tres salidas de las tres compuertas AND antes descritas se deben
ingresar a una compuerta OR de tres entradas para obtener la respuesta final.
i'C
n Y=A1C+AC'D+B'D'
Jo.B'D'
£>«BU-I
CAPITULO 3
3.1. INTRODUCCIÓN.
Load NombreFormularío.
NombreFormulario. Hide
Unload NombreFormulario
Antes de empezar a conocer los controles básicos veamos cuales son sus
características generales:
Eventos.- Son acciones que pueden ser motivadas por el propio usuario o
por mismo sistema operativo. Ejemplos pueden ser el movimiento del ratón o
hacer click sobre su botón. En Visual Basic se puede decir que se utiliza la
programación orientada a eventos, lo cual es una de las diferencias más
importantes respecto a la programación lineal de MS DOS. No necesitamos
57
3.1.2.1 TextBox
Propiedades:
Ñame: Esta propiedad tiene todos los controles, el nombre que viene por
defecto en este caso Textl y es el nombre con el que se conocerá el control
cuando lo utilicemos en el código. En un mismo formulario no puede haber 2
controles con el mismo nombre. Conviene poner un nombre que represente la
función que tiene el control en la aplicación para que el código quede más claro.
Métodos
Eventos:
Click: Al hacer click con el botón izquierdo del ratón sobre el control.
DoubleClick: Al hacer doble click con el botón izquierdo del ratón sobre el
control.
3.1.2.2 Labe!.
Propiedades
3.1.2.3. CommandButton
Este control es el típico botón que aparece en todas las aplicaciones y que
al hacer click sobre él nos permite realizar alguna operación concreta,
normalmente Aceptar o Cancelar. Aunque según el código que le asociemos
podremos realizar las operaciones que queramos.
Pero sólo con introducir un control de este tipo con el texto salir que se
introduce a través de la propiedad Caption no basta. Habrá que asociarle un
código que nos permita salir de la aplicación en el evento adecuado. Y el evento
por excelencia de este control es click. Así pues accederemos al código del
control y la sentencia que nos permitirá salir de la aplicación es End, simplemente
61
Propiedades
Eventos
Los tipos de eventos reconocidos por un objeto varían, pero muchos tipos
son comunes a la mayoría de los controles, por ejemplo, la mayoría de los objetos
reconocen el evento Click: si un usuario hace clic en un formulario, se ejecuta el
código del procedimiento de evento Click del formulario; si un usuario hace clic en
un botón de comando, se ejecuta el código del procedimiento de evento Click del
botón, el código en cada caso será diferente.
63
3.1.3.2. Variables.
A veces, sin embargo se necesita utilizar una variable con un alcance más
general, como aquella cuyo valor está disponible para todos los procedimientos
del mismo módulo o incluso para todos los procedimientos de toda la aplicación;
Visual Basic fe permite especificar el alcance de una variable cuando la declara.
Cualquier procedimiento puede alterar el valor de su col local sin que ello
afecte a las variables col de los demás procedimientos.
Para hacer que una variable al nivel de módulo esté disponible para otros
módulos, se utiliza la palabra clave Public para declarar la variable. Los valores de
las variables públicas están disponibles para todos los procedimientos de la
aplicación.
Al igual que todas las variables al nivel de módulo, las variables públicas se
declaran en la sección Declaraciones al principio del módulo. Por ejemplo:
Public col As Integer
Dim: Al declarar una variable con esta palabra estamos diciendo que la
variable sea local al ámbito en que se declara; puede ser dentro de un
66
Tipo Comentario
BOOLEAN Sólo admite 2 valores TRUE o FALSE
BYTE Admite valores entre 0 y 255
INTEGER Admite valores entre -32768 y 32767
LONG Admite valores entre -2.147.483.648 y 2.147.483.647
SINGLE Admite valores decimales con precisión simple
DOUBLE Admite valores decimales de doble precisión
CURRENCY Válido para valores de tipo moneda
STRING Cadenas de caracteres (Texto)
DATE Fechas, permite operar con ellas
Matrices
3.1.3.2.8. Consideraciones
Al trabajar con Visual Basic es preferible que se active la opción que nos
obligue a declarar todas las variables que se utilizan, de esta forma nos
ahorraremos errores inesperados como el de trabajar con una variable ya utilizada
anteriormente produciéndose un conflicto difícil de resolver.
3.1.3.3. Procedimientos
Cada vez que se llama af procedimiento se ejecutan las instrucciones que hay
entre Sub y End Sub. Se pueden colocar los procedimientos Sub en módulos
estándar, módulos de clase y módulos de formulario.
Llamadas a Procedimientos.
3.1.3.4. Funciones
Cali Year(Now)
YearNow
Cuando llama a una función de esta manera, Visual Basic desecha el valor de
retorno.
Los argumentos de los procedimientos que escriba tienen el tipo de dato Variant
de forma predeterminada. Sin embargo, puede declarar otros tipos de datos para
los argumentos.
Como ocurre con If.Then, la condición debe ser un valor o una expresión
que dé como resultado False (cero) o True (distinto de cero).
Do While condición
instrucciones
Loop
Cuando Visual Basic ejecuta este bucle Do, primero evalúa condición. Si
condición es False (cero), se salta todas las instrucciones. Si es True (distinto de
cero), Visual Basic ejecuta las instrucciones, vuelve a la instrucción Do While y
prueba la condición de nuevo.
Do Until condición
instrucciones
Loop Do
76
instrucciones
Loop Until condición
3.1.3.5.2 For-Next.
• Ejecuta instrucciones.
3.1.3.5.3 Else-Endlf.
3.1.3.5.4 If...Then...Else
If condición 1 Then
[bloque de instrucciones 1]
/E/se
ui i v GMWI ci i ui ia noua, oc acfJdi di i 1UO vclKJI C& UUII IAJI11 día. WdUd Uiuque U tí
79
Observe que la estructura Select Case evalúa una expresión cada vez al
principio de la estructura.
80
Menú
Principal
Fundamento Iniciar /
Teórico Simplificación /""
f Proceso de \ Simpl
Presentación \e la Teoría J
Presentación
del tutorial
3.2.1 TEORÍA
Regresar Comando
Imprimir-
al Menú presionado
Flechas de Navegación
i
Navegaren el
Imprimir el Texto
completo
Texto
B, C]. Esta sección es una parte de consulta en la que se explica paso a paso
todo el proceso de simplificación de las funciones booleanas utilizando el método
de Quine-McCIuskey. La presentación de la teoría se hace únicamente
presentando en un objeto RichTextBox el documento realizado en Word y
guardado con el nombre "Texto, rtf, la navegación y revisión del texto se lo hace
con la barra de navegación existente en el objeto RichTextBox..
3.2.2 SIMPLIFICACIÓN
En esta parte existe un programa que permite simplificar paso a paso una
función booleana de hasta diez variables o entradas utilizando el método de
Quine-McCIuskey, el ingreso de datos se puede hacer por medio de una tabla de
combinaciones, en la que el programa genera cada una de fas combinaciones de
las variables de entrada mientras que el usuario ingresará las salidas O o 1
correspondientes a cada combinación, el programa se encarga de poner los
mintérminos respectivos en el editor de mintérminos. También se puede ingresar
directamente todos y cada uno de los mintérminos en este caso el programa se
encarga de calcular el número de entradas y construir la tabla de combinaciones
correspondiente a la suma de los mintérminos asociados, este programa también
permite guardar la tabla de datos ingresada para recuperarla en otro momento, la
extensión de los archivos tipo texto con los que se guarda es *.boo, también se
puede abrir un archivo o una tabla ingresada anteriormente para simplificarla.
^Simplificación
Presenta la pantalla de
ingreso de datos
-Abrir
Abrir el Archivo
Comando
Ingresado
Tiene la
Está la tabla de
O¡ respuesta
final?
combinaciones
Simplifica el Simplifica el
siguiente paso paso anterior
3.2.3 TUTORIAL
Inicio
Tutorial
Presenta la
Teoría
Ingresar
Comando
Comando
/Siguiente Anterior /
Ingresado
Ultima Primera
xplicación? xplicación?
Presentar la Presentar la
siguiente anterior
explicación explicación
Número de entradas A
Indicador
\s
-x
/Tabla de
V Combinaciones^
(jngresoj
Nuevo ~z_
Ingresar Mintérminos
Calcular n
Actualizar r(i) <Otro>
Actualizar Tabla
<Space>
<Enter>
Calcular n
Actualizar r(i)
Actualizar Tabla
Ingresar Tabla
* ~
Ingresare!
número de
entradas
Indicar
Combinación
/ Ingresar la /
/ función /
No
r(i)=f
Actualizar mintérminos
C Fin )
Fig. 3.10: Diagrama de flujo para el ingreso de los datos.
88
rnrri[ilifu:.i<Mnn
Número de entradas 4
MINTERMINOS CUBOS O
0001 0001
001 1
0101 001 1
0111 0101
1 001 1 001
1011
1101 0111
1111 1011
1101
1111
Una vez calculado los cubos ceros se debe calcular los cubos 1, cubos 2, hasta
cuando ya no haya mas combinaciones que se asocien las combinaciones que se
han asociado forman parte de los cubos n y las combinaciones que no se ha
combinado con otras para formar parte de los cubos de orden superior formaran
parte de los implicantes primos, para esto se señala la combinación asociada
ubicando unas marcas en la misma posición de la matriz c(i, j) en otra matriz
90
No fila=fila+1
c(fila,0)=i
i— u *
3r
Mn •*^-"~*"'r7ÍV-T^"1""fc-^»^
Si
t
cont=0 |
^
pos=1
Bit=Val(Mid(*fíi\
Hv» 1\
P05» ';/ •
i i.^-^^fíií-T
1^>
—-""""^
s¡
J>
pos=pos+1
J L
No I cont=cont+1 I
if
Si
J* No -r-*^*rnnf~iTi^*^^-^ i: +1
1 it
Si
*--—-"""^T?* n^ i""?"—**-• Nn
Si
^-——nrr"^- M~
4) Si
Y
fil(col)=fila
Mostra *cubos 0
Habilitar Comandos
Actuiiza MaxCol y Max
O7F*in_^>
Fig. 3.13: Continuación del diagrama de flujo para la obtención de los cubos 0.
92
cont=cont+1
spos=j
cpos = pos
fila = fila + 1
c(fila, col + 1) = c(i, col)
Marca(i, col) = "*"
Marcaü, col) = "*"
Mid(c(fila, col + 1), cpos) = "X"
cont2 = O
k=1
O(fila,col
O(i, col) & " " & Oíspos, col)
©
fil(col + 1) = fila
ultima = True
fíl(col) = auxiliar
Simplificación
CUBOS 1 CUBOS 2
000X1 0X0X1
00X01 OX01X
0X001 X001 X
0001X XX01 O
0X01 O
X001O XX01 1
X1 0X1
0X01 1 XI 0 1 X
X001 1 1 X01 X
X01 01
01 0X1
XI 001
01 01 X
XI 01 O
1 001 X
1X010
Para hallar los implicantes primos se debe tomar todas las combinaciones
de cada uno de los cubos n que no se combinaron para formar cubos de orden
superior. Para lo cual leemos en la matriz marcafi, j) las posiciones en las que no
existe la marca "*" dentro de esta matriz corresponden a los implicantes primos.
fila = fila + 1
No No O(fila, col) = O(i( j)
c(fila, col) = c(i, j)
Marca(fila, col) =""
fil(col) = fila
i'
Mostrar Implicantes Primos
Actualizar MaxCof
Actualizar Max
Implicantes =True
-J r
d Fin^>
IMPLICANTES PRIMOS
00X01
X01 01
1 01 OX
1 0X1 1
1 01X1
0X0X1
XI 0X1
XX01 X
TABLA DE SIMPLIFICACIÓN
0 oso i
X 0 1 0 1
1 O 1 OX
Luego comparamos cada elemento del vector s(i) con cada uno de los
elementos de la matriz Q(i, j) para ver cual mintérmino coincide con los elementos
del vector.
En las figuras 3.21, 3.22 y 3.23 se indica el diagrama de flujo para construir la
tabla de simplificación.
99
aux = s(i)
s(i) = aux
No
1f
al(subindice) = Val(s(j))
O-
al(subtndice) = Val(s
Dibujar Tabla
Tablalmplicantes = True
marcas = True
xxoix
1010X
X1 0X1
iii) Todas las columnas que tienen marca en dicha fila se lo marca
como anulada usando el vector ColumnaAnulada(i).
«C^Esenciales
__
contvmax = O
i=1
ablaíi, i) = T
contv(i)=contv
contv(i) = 1 and
lumnaAnulada(i) = Fals
ColumnaAnuladfa(i)=True
1=1
Fig. 3.25: Diagrama de flujo para hallar los implicantes primos esenciales.
104
filaAnulada(j) = True
numeroFila(i) = j
fila = fila + 1
c(fila, col + 1) = c(j, col)
¡2 = 1
fs o
cok
columnaAnulada(¡2)
True numeroFiia(i2)
fe~*
Fig. 3.26: Continuación del diagrama de flujo para obtener los implicantes primos
esenciales.
105
iv) Se repite este proceso en todas las columnas que tienen una sola
marca y no está anulada.
En las figuras 3.25 y 3.26 se indican el diagrama de flujo para encontrar los
implicantes primos esenciales.
Para calcular ios implicantes primos secundarios, se debe hallar los que
tengan el mayor costo con el objetivo de simplificar al máximo.
iv) Repetimos este proceso hasta que todas las columnas estén
anuladas.
marcasmax=0
contH(i)=0
filaAnulada(i):
lumnaAnulada(j)
conth(i) = conth(i) + 1
marcasmax
conth(i)
Si
conthQ) = marcasmax
And filaAnulada(j) = False
nd marcasmax > O
sihay=False
¡2 = 1
columnaAnulada(i2) = True
numeroFíla(¡2) =j
sihay = True
filaAnulada(j) = True
fila = fila + 1
c(fila, col + 2) = c(j, col)
MostrarMarcas
fil(col + 2) = fila
Actualizar MaxCol
Actualizar Max
MostrarSecundarios
En las figuras 3.29 y 3.30 se indican los diagramas de flujo para obtener la
solución de la ecuación booleana.
109
disolución
1'
Text6="Y="
i=1
'Text6=Text6+Variable
Complementada
XxText6=Text6+Variable
Text6=Text6+Variable
Complementada
Text6=Text6+variable
-^Mostrar Solución ^^
Para probar los resultados del programa diseñado se hizo con varias funciones
existentes en el libro de Hill and Peterson y se obtuvo los siguientes resultados.
'ínter minos 1 0 2 3 6 7 8 9 1 0 1 3 )
1000(1"
¡1001 [í"
0 0000 0000
2 001 0
3 001 1 001O
6 0110 1 000
7 0111
8 1 000 001 1
9 1 001 01 1 O
10 1010 1 001
13 1101 1010
0111
1101
* 0000 00X0
xooo
"0010
* 1 000 001 X
0X1 O
"0011 X01 O
"0110 1 OOX
* 1 001
"1010
0X1 1
* 01 1 1 01 1 X
* 1 1 01 1X01
CUBOS 2
* 00X0
" XOOO 1(0, 2. 8.
0X1 X
* 001 X
* 0X1 O
* X01 O
* 1 0X0
* 0X1 1
* 01 1 X
1 X01
Fig. 3.35: Tabla de cubos 2 para la función de 4 variables de entrada.
o 2 3 6 7 6 9 10 13
1 0 0 X * *
1 X 0 1 * *
xoxo * * * *
0 X 1 X * * * *
En la Figura 3.37 podemos ver que el implicante primo 100X contiene a los
mintérminos m8 y m9 mientras que el implicante primo 0X1X contiene a los
mintérminos m2, m3, m6, m7. Es decir esta tabla se forma con los implicantes
primos y los mintérminos involucrados en estos implicantes primos.
115
Todas las columnas que tienen marcas en la misma fila del implicante
primo encontrado se eliminan poniendo una marca en la parte inferior de las
columnas.
TABLA DE SIMPLIFICACIÓN
c 2 3 É - e 9 i i3
1 0 0X i
—j jii
(•\s> fk ¡i) (•\»
>
t
j
/\• >i>
,
T
3 !
xoxo
oxix ;
1X01 ;
|OQQQQ[Í|IOOOO[O'
0 0 0 0 1 [0 10001 |1
00010JO 10G1QJO
0 0 0 1 1 ¡0 1001 1 ¡1
¡001 00|0 1 0100J1
I O Q I O I [5*11 0101 [ÍT
|ooi iofT|i 011 op"
|001 11 [O |101 1 1 [O
j___^p__j_.
OIQOI 11001 fT
11 oí ofo"
o i o i ijo" 11011 pT
ioofT|n i o o f T
|om i fo Jn 111 |T
Fig. 3.41: Tabla de combinaciones.
117
CUBOS O
"00000 0X000
* 01000 01 0X0
01 XOO
"00110
"01010 0X1 1 O
"01100 X01 1 O
* 10001 01X10
"10100 01 1X0
X1 1 00
"01110 1 00X1
"10011 1 X001
"10110 1 01X0
"11001 1 X1 00
Fig. 3.42: Primera página de los Cubos O y cubos 1 de una función de 5 entradas.
"11011 1X011
"11110 1X110
1 1 0X1
1 1 1 XO
Fig. 3.43: Segunda página de los cubos O y de los cubos 1.
01 XXO 0X000
01 XXO
XX1 1 O XX1 1 O
X1 1 XO X1 1X0
1X O X 1 1 XOX1
1X1 XO 1 XI XO
Fig. 3.44: Cubos 2 e Implicantes primos.
TABLA DE SIMPLIFICACIÓN
0 6 8 10 12 l'l 17 19 2O 22 25 27
*
_ „ _ — __ f
\ c{ s>
,¿ -; '
4 •' -. -4
f -\ /, •< >,J
1
{ \
X 1 1 X0 ^
*,
1 X O X1 - >
• 1 X 1 X Q- íl !? !
• * ' -
2 30
* A U U Lr^
1 A A Lr^
>i
>
X 1 1 X0
A U A 1
/• !>
A 1 A U^ \l.'
ÉSCEENCiALES
0X000
XX1 1 O
01XXO
1X0X1
1X1X0
Y^AWE'+CDE'+A'SE'+AC'E+ACE'
Fig. 3.47: Solución simplificada de la función de 5 entradas
119
f(A, B, C, D, E) = Zm(1, 2, 3, 5, 9, 10, 11, 18, 19, 20, 21, 23, 25, 26, 27).
Fig. 3.48: Ejecución del comando para abrir un archivo guardado en el disco
[MASTER
tunctónICb.boo
functón2.boo
función3.boo
Iunctón3b.boo
Iuncion4boo
I Consultas Iuncion4b.boo
Qj Piimef Texto presentado luncionSboo
C3 TEXTO
JfuncionSb boo
|oooon|o OOQO[0
|OOOQl[T'fÍ' 0001 [o
|OOQ1o[l"p' ooiopr
ioooiifi~p' 0011 fT
001 00 ÓF oioopr
0 0 1 0 1 "F 0101 |T
|ooi loprp 011 o|o
fooTTTfoT" oTTTfT
|01QQO|o'p 1000(0'
| 0 1 0 0 l f T p 1001 [T
|oioio[Tp 1010(1"
[oToTTfrp 1011 [T
101100(5" p
|0110l(?p
|0111Q[cTp
lonnJíTp
Fig. 3.50: Función abierta
X =
_ _ _1_ 0
_ HX __
1
* •
-H.. .,1 -.
>
M|
Fig. 3.52: Primera página de la tabla de simplificación.
25 26 27
* U X U JT^
X 0 1 0 1
* U 1 U Jt~
• U A 1 1~
1 0 1 X 1
0 X 0 X 1
X 1 0 X 1 :•
,;
X X 0 1 X- ':y
I
'ESCENeíALESSeCUNDARiOS
XX01X 00X01
1 01ÜX 10X1 1
XI 0X1
Función de 6 entradas:
f(A, B, C, D, E, F) =Zm(1, 2, 3, 4, 5, 8, 9, 10, 17, 20, 21, 24, 25, 27, 32, 33, 34, 36,
37, 40, 41, 42, 43, 44, 45, 46, 47, 48, 56, 59, 62)
123
CUBOSo CUBOS0
* oooooi * 101000 "101111
* 00001 O * 1 10000 "111011
* 000100 "111110
* 001000 "010101
* 100000 "011001
"100101
* 00001 1 " 101001
* 000101 "101010
* 001001 "101100
* 00101 O * 1 1 1000
* 010001
"010100 "011011
* 01 1000 "101011
* 100001 "101101
* 10001 O "101110
* 100100
Fig. 3.56: Tabla de cubos 0.
124
CUBOS 2 CUBOS 3
0X0X01 1 OXXOX
XOOX01 "1OXX01
OXX001 * 1 0X1 OX 1 01 XXX
XOX001 * 1 01OXX
XOX01O * 101XOX
0X01OX "101 XXO
XQ01OX
0X1OOX * 1 01XX1
X01OOX * 101XIX
X010X0 * 1 01 1 XX
XX1000
* 1OOXOX
* 1OXOOX
10X0X0
* 1OXXOO
1XXOOO
Fig. 3.58: Tabla de cubos 2 y de cubos 3.
125
TABLA DE SIMPLIFICACIÓN
] 2 3 4 e c G
D 17 2D 2
*
f\)1
0 0 0 0 1X ;
0 1 1 0 X 1
1 X 1 0 1 1
0 X 0 X O 1
X 0 0 X O 1
(\f (• \ (1 1
_X _ 0_ _X_ 0_ _0 _
1
'
f f 1 {• >,
* \ \ ) \t
X 0 0 1 0 X
_ -- - n 1-1 V
U X 1 U O X
X 0 1 0 0 X
X 0 1 0 X0
_J
,.—.,, id
Fig. 3.60: Primera página Horizontal y Primera página Vertical de la tabla de
simplificación
126
TABLA DE SIMPLIRCACION
1 2 3 4 5 8 9 10 17 20 21
X X 1 0 0 O *
1 0 X 0 X 0
1 X X 0 0 0
-
¡
t
i 1
^^•'1
Fig. 3.61: Primera Página Horizontal y Segunda Vertical de la tabla de
Simplificación.
TABLA DE SIMPLIFICACIÓN
24 25 27 32 33 34 36 37 40 41 42
1
»
0 O 0 0 1X
0 1 1 0 X 1
• c-\¡ \
1 X 1 0 1 1
•
0 X 0 X 0 1 i
X 0 0 X0 1 1 (y. •>>
•
X 0 X0 0 1
.
X 0 X 0 1 0-
*
X 0 0 1 0 X
- -tí*..
^ |
X 0 1 0 OX (
X 0 1 0 X 0
r~
pcsr^crur-iAi t=c QPi^iiunADiric
Fig. 3.62: Segunda Página Horizontal y primera página Vertical de la tabla de
simplificación.
TABLA DE SIMPLIFICACIÓN
24 25 27 32 33 34 36 41 42
X X 1 0 0 0 f
1 0 X 0 X 0 ! - if •
1 X X 0 0 0 i -
• ir f {• \7 f \0 1
i ^
„ i
:
1 ^^^^^j
^^B^S
43 44 45 46 47 48 56 59 62
* U U U A 1
0 0 0 0 1X
0 1 1 0 X 1
* 1 1 U 1 1
(\\
1 X 1 0 1 1
• A l l í Lr^ s
\
0 X 0 X 0 1
X 0 0 X 0 1
• A X U U 1
X 0 X 0 0 1
* U A U i Lr^
* A U 1 U A
X 0 0 1 0 X
0 X 1 0 0 X-
X 0 1 0 0 X
X 0 1 0 X0
A * -t-r*
1 0 X 0 X 0
1 XX0 0 0 - T;
* U A A U A
1
<• U 1 A A A
¿}
\i ri y (. 7
\ (• V
\ (.\>
^^
ce
Fig. 3.65: Tercera página Horizontal y segunda página vertical de la tabla de
simplificación.
ESCENCIALES SECUNDARIOS
0X01OX OXXOQ1
101XXX 0X1OOX
1XXOOO XOX010
1X1110 1OXXOX
X11011
0000X1
Función de 7 entradas.
F(A, B, C, D, E, F, G) =Sm (1, 2, 3, 5, 7, 9, 11, 15, 17, 19, 21, 22, 23, 25, 27, 29,
30, 31, 33, 37, 38, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 65, 66, 67, 69, 71,
73, 75, 77, 79, 81, 83, 85, 87, 91, 93, 95, 97, 99, 101, 103, 105, 107, 109, 111,
113, 115, 117, 119, 121, 123, 125, 127).
MINTERMINOS MINTERMINOS
1 000000 1 30 0 0 1 1 1 1 1) 61 01 1 1 1 01
2 00000 10 31 001111 65 1 0 000 0 1
3 000001 1 33 01 0000 66 1 00 00 1 0
5 0000 10 1 37 010010 67 1 0000 1 1
7 0000 1 11 38 01 001 1 ) ( 69 1 0 00 1 0 1
9 000 100 1 39 010011 71 1 000 1 1 1
11 000 1011 41 010100 73 1 00 1 00 1
15 000 1 1 1 1 43 010101 75 1 00 1 0 1 1
17 00 1000 1 45 0101 10 77 1 00 1 1 0 1
19 00 100 1 1 47 010111 79 1 00 1 1 1 1
21 00 10 10 1 49 01 1 000 81 1 0 1 000 1
22 00101 10 51 01 1 001 83 1 0 1 00 1 1
23 00101 1 1 53 011010 85 1 01 01 01
25 00 1 1 00 1 55 011011 87 1 01 01 1 1
27 00 1 10 1 1 57 011100 91 1 0 1 1 01 1
29 00 1 1 101 59 011101 93 1 01 1 1 01
MINTERMINOS
95 1011111 Al 127 1 1 1 1 1 1 1
97 1 100001 H|
99 1 1 0001 1
101 1100101
103 1100111
105 1 1 01 0 0 1
107 1101011
109 1101101
111 1101111
113 1 1 10001
115 1110011
117 1110101
119 1110111
121 1111001
123 1111011 *j .
125 1111101 IB
CUBOS O
*OOOOOQ1 * 001 1 001 Al * 01 0 0 1 1 1 Al " 0 0 1 1 1 1 1 A] " 1 0 1 1 1 1 1
* 000001 0 * 01 0 0 1 01 jQ " 0 1 0 1 0 1 1 JH " 0 1 0 1 1 1 1 JH " 1 1 0 1 1 1 1
0 1 0 0 1 10 0 1U1 10 1 0110111 "1110111
* 0 0 0 0 0 11 " 0 1 0 1 001 "0110011 "0111011 J: " 1 1 1 1 0 1 1
"0000101 * 01 1 0 0 0 1 * 01 1 0 1 01 . -í * 01 1 1 1 0 1 "1111101
* 000 100 1 • * 1000011 "0111001 * 10 0 1 1 11
* 001 0001 '•'•• - • ; * 1 0 0 0 1 01 "1000111 "1010111 "1111111
* 0 1 0000 1 * 1 o o 1o n i "1001011 * 1o 1 1n 1 i
* 100 0 001 " 1 01 0 0 0 1 "1001101 "1011101
* 1000010 * 1 100001 "1010011 "1100111
iU 1 U 1U1 1 1 v I U I 1 „ - *
* 00001 11 * 0001 1 11 "1100011 "1101101 • •
* 0001 0 1 1 "0010111 " 1 1 0 0 1 01 "1110011 v -
" 001 001 1 "0011011 * 1 1 01 0 0 1 * 1 11 01 01 v. ; ;,,
" 001 o í 01 [si * 0 0 1 1 1 01 m¿ "1110001 jAé "1111001 má
* oo 1 o 1 1 o IB * n n 1 1 1 1 n wi n-?M
"3$
Desde la figura 3.72 hasta la figura 3.74 se indican los cubos unos.
CUBOS1 CUBOS 1 CUBOS 1 CUBOS 1
00000X1 X000101 Al 100x001 Al X01 001 1 Al 0 1 0 1 X 0 1
0000X01 00010X1 TI 10X0001 T| 0 0 1 0 1 X 1 3¡ 0 1 X 1 0 0 1
000X001 00X1 001 1X00001 001X101 XI 01 001
00X0001 0X01 001 1 00001 X 0X1 0 1 0 1 01 1 00X1
0X00001 X001 001 X01 01 01 01 1 0X01
X000001 001 00X1 000X1 1 1 001 01 IX 01 1 X001
000001X 001 0X01 00X01 1 1 001X110 XI 1 0001
X00001 0 001 X001 0X001 1 1 001 1 0X1 1 000X1 1
f\v i f\ i
UX 1 Ü U 0 1 V
A Uf\ U1 1U 1 1 1 001 1 X 0 1 1 00X0 1 1
0000X1 1 X01 0001 0001 XI 1 0X1 1 001 1 0X001 1
000X01 1 01 00X01 00X1 01 1 01001X1 1 X0001 1
00X001 1 01 0X001 0X01 01 1 01 0X1 01 1 0001 XI
X00001 1 01 X0001 X001 01 1 01 X01 01 1 00X1 01
00001X1 XI 00001 001 0X1 1 XI 001 01 1 0X01 01
00X0101 *| 10000x1 jy 001x01 1 *| 0 1 0 0 1 1 X Jl 1 X001 01
0X00101 W\J1000X01 T| 0X1 001 1 5] 0 1 0 1 0X1 'W 1 001 0X1
CUBOS 1 CUBOS 1
lonixi Al 11X1111
1X11101 j] 1 1 1 X 1 1 1
1 1 0X1 1 1 1111X11
1 1X01 1 1 11111X1
1101X11
11X1011
11011X1
11X1101
1 1 1 0X1 1
111X011
11101X1
111X101
1 1 1 1 0X1
1 1 11X01
•1
1x11111 X
VI
CU8OS8 CUBOS3
OOXOXX1 oxxoixi 'M x i x x o o i M XX1 0X1 1
XOOOXX1 XOX01X1 H. i ooxxxi ül X X 1 X 0 1 1
OOXXOX1 XX001X1 10XOXX1 X01X1X1
XOOXOX1 XXX0101 1XOOXX1 XX1 0 1 X 1
XOXOOX1 OXX1 0X1 1X0X0X1 X X 1 XI 01
OXXOX01 XX010X1 1XXOOX1 XI 0 X 1 X 1
XOXOX01 001 XXX1 1XOXX01 X1 X 0 1 X1
XXOOX01 0X1 O X X 1 1XXOX01 X 1 X X 1 01
OXXX001 X01 OXX1 X I 01 X X I
XXOX001 0X1X0X1 XOXX1 11 X1X1 0X1
XXX0001 r X X I 00X1 : XXOX1 11 X1 X I X 0 1
0X1 XX01 XXX01 11 XI 1 O X X 1
OOXXX1 1 XX 1 0 X 0 1 X O X 1 XI 1 X1 1 X 0 X 1
XOOXX1 1 01 X X X 0 1 X X 0 1 XI 1 XI 1 X X 0 1
XOXOX1 1 [jg xioxxoi a| x x x i o n mt 1 OXXX1 1
xoxxoi 1 \m X1XOX01 1H< x o i x x n m 1XOXX1 1
CUBOS3
1XXOX11 1X1XX11
1XXX01 1 1X1XIX1
1 OXX1XI 1 1XXX1 1
1XOX1X1 11XXIXI
1XX01XI 1 1X1XXI
1XXX101 1 1 1XXXI
1X01XX1
1X1OXX1
11OXXX1
11XOXX1
11XXOX1
11XXX01
1XXX111
1XX1XI1
1XX11X1
CUBOS 4
xoxoxxf
XXXOX01
XOXXX11
XXX01X1
XXIOXX1
X1XXX01
1XOXXX1
1XXOXX1
1XXXX11
1XXX1X1
11XXXX1
TABLA DE SIMPLIFICACIÓN
1 2 3 5 7 9 15 17 19
•
— _ -, /4. ;
s fL \
- X O U O O 1 JS~
1
0 0 X X 0 X 1 • 1 • T
_
*
.
0 X X X 0 0 1 •
X X 0 X 0 0 1 ••
" (• \1 ~•
X X 0 1 0 X 1 T
*
0 X 1 X 0 X 1 , T
0 X 1 X X 0 1
X X 0 1 X 1 1 * T
»
X XX 1 0 1 1 T
X X 1 X0 1 1 r
«w
Fig. 3.82: Tabla de Simplificación
TABLA DE SIMPLIFICACIÓN
21 22 23 25 27 29 30 31 37
*
*
« f\ t
\
¿ )•i f-
\3
* ^
0 0 X X 0 X 1
*
0 X X X 0 0 1
X X 0 X 0 0 1
i-sfl7 —
X X0 1 0 X 1
» f
\
0 X 1 X 0 X 1 T
0 X 1 XX0 1
X X0 1 X 1 1
X XX 1 0 1 1 *
X X 1 X0 1 1 *
3 39 41 43 47 49 5 1 53 55
(• -, c\ ,
" \ J )
1. ¡ <
i !
!
«
*
0 0 X X 0 X 1
i
0 X X X 0 0 1 t
X X Q X 0 0 1 t (3 \5
X X 0 1 0 X 1
^
1
0 X 1 X 0 X 1 •
0 X 1 X X 0 1 1
X O X 1 1 1
- t
X X 0 1 X 1 1 '
j •
X X X 1 0 1 1 1 ii
1
X X 1 X 0 1 1 i i !
1
"V
TABLA DE SIMPLIFICACIÓN
57 59 61 65 6 6 69 71 1 75
*
/•\f t\ht
*
0 0 X X0 X 1 _
(• \
\
0 XXX0 0 1
X X 0 X 0 0 1
f.
* X X 1 O X 1 )
X X 0 1 0 X 1 T
*
0 X 1 X 0 X 1 1 i
0 X 1 X X 0 1 • •
X U X 1 1 1
*
X X 0 1 X 1 1
X XX 1 0 1 1 V
i
V
X X 1 X 0 1 1
•4»
m
TABLA DE SIMPLIFICACIÓN
77 79 81 83 e 5 87 91 93 95 97
-"
* í
0 0 X X 0 X 1
a
0 X X X 0 0 1 ;
X X0 X 0 0 1 '.
i
X X 0 1 0 X 1
*
0 X 1 X 0 X 1
o xi r xoi
X X 0 1 X 1 1 1
X X X 1 0 1 1 T
m
mm
1 X X 1 X 0 1 1 f *
WÉf
Vr
99 10 1 10 3 10 5 10 7 10 9 11 1 11 3 11 5 11 7
* ,
*
0 0 X X 0 X 1
0 X X X 0 0 1
X X 0 X 0 0 1 F
^
X X 0 1 0 X 1 > '
*
0 X 1 X 0 X 1
0 X 1 X X 0 1
.* X X O 1 X 1 1 '•
X X X 1 0 1 1 •
X X 1 X 0 1 1 •' • -
má fV*
119 12 1 12 3 12 5 127
* i
..1 , i
j
0 0 X X 0 X 1 i
1
u u x u & i
i
0 X X X 0 0 1
X X 0 X 0 0 1
_] i
\
X X 0 1 0 X 1
h""
;
U 1 X A X 1 ~1 i
f
0 X 1 X 0 X 1
0 X 1 X X 0 1
A U Ji. 1 1 1
X X0 1 X 1 1 s
X X X 1 0 1 1
X X 1 X0 1 1
!
i
1 X 0 1 X 1 X1
3L 2 I 7 cí 11 15 17 19
X X 1 X 1 0 1
X 1 0 X 1 X 1
X 1 0 1 X X 1
X 1 X 1 0 X 1
X 1 1 X 0 X 1
X 0 X 0 X X 1 • • * *
f \ f ilf f
* \„ \ \
^
X 0 X X X 1 1 -' .** ;*••-
'f - -- -. .4.
X X X 0 1 X 1 w
«
X X 1 O X X 1
X 1 X X X 0 1-
— —— — —( «_ — „;_
—
,_
1 X 0 X X X 1
1 X X 0 X X 1
1 XX X X 1 1
. 1 X X X 1 X 1- ,—„ . -™^ . ^.~
•fH
TABLA DE SIMPLIFICACIÓN
21 22 23 25 27 29 30 31 33 37
X 0 1 X 1 X 1 •
X X 1 X 1 0 1
X 1 0 X 1 X 1 •
X 1 0 1 X X 1
X 1 X 1 0 X 1
X 1 1 X 0 X 1
X 0 X 0 X X 1
» / •l f.{\ /. \
k) \
X 0 X X X 11 ..*, .
X X X 0 1 X 1 '
«
1 X 0 X X X1
1 X X 0 X X1
1 X X X X 11
Jí •P>
TABIA DE SIMPLIFICACIÓN
39 39 41 43 ! 45 47 49 S 53 55
X 0 1 X 1 X1
X X1 X1 0 1
X 1 0 X 1 X1
Jr
•
X 1 0 1 X X 1
X 1 X 1 0 X 1 •t
X 1 1 X 0 X 1 i
X 0 X 0 X X 1
/1 /¡ •,
* 1. > v¡ >
X 0 X X X 1 1 - -
X X X 0 1 X 1 i
\\
„ -*¡ *~ ^
1 i X X U 1— 1
1 X 0 X X X 1
1 X X 0 X X 1
1 XXX X 1 1
1 1
•NP
TABLA DE SIMPLIFICACIÓN
1 X 0 1 X 1 X 1
57 59 61 65 66 67 69 7í 73 75
X X 1 X 1 0 1
X 1 0 X 1 X 1
1
'
X 1 0 1 X X 1
X 1 X 1 0 X 1 1 •
X 1 1 X 0 X i '
X 0 X 0 X X 1 •
/ •> / „.,,
* 1) <! &
X 0 X X X 11 - 1- • •T-
X X X 0 1 X 1
1 A A A U 1-
1 X 0 X X X 1 • ' T
1 X X 0 X X 1 J!
1 X X X X 1 1 J[ *
1 X X X 1 X 1- \1— ^ - .
1 — •P»
TABLA DE SIMPLIFICACIÓN
77 79 a 1 83 85 87 91 93 95 97
X 0 1 X í X 1 1 ir iF
X X 1 X 1 0 1 i
X 1 0 X 1 X 1
X 1 0 1 X X 1
X 1 X 1 0 X 1
X 1 1 X 0 X 1
X 0 X 0 X X 1 T •
f\ 'i f !7i
V. <s
* t )
X 0 X X X 1 1 T- • - '¿. i• ^
X X X 0 1 X 1 _ 1k
1" " .
V _ _ _ _ _ . _ .
X 1 A X A U 1 f—
1 X0 X X X 1 ••
1 X X 0 X X 1 T
• *
_.. 1 X X X X 1 1 1 ¥
•* ^^
1 X X X 1 X1 . ¿ *-_- !*—~ ,, —, •—^r_. h
—^ —^
•v»
Fig. 3.93: Tabla de Simplificación
141
X 1 X1 0 X1 •
X i 1 X0 X1 1
X 0 X 0 X X 1
f f s / ,
* \>^ \ > \&
v r* *r ir *r 4
i OA2 X 1 1
X XX0 1 X 1
X 1 U A A 1—
')
1 X 0 X X X 1 • 1
1 X X 0 X X 1 1
1 X X X X 1 1 •
4
1 *T
X T»
X *»
X 1 «•
X1 -á
-y
•V
DE SfMPUPCAGION
i• X 0 1 X 1 X 1
11 9 12 1 12 3 12 5 12 7
X X 1 X 1 0 1
X 1 0 X 1 X 1
X 1 0 1 X X 1
X 1 X 1 0 X 1 ' '
X 1 1 X 0 X 1 1'
X 0 X 0 X X 1
* A A U A U 1
U A A A 1 1
X X X 0 1 X 1
A 1 U A A i
r
ihr
.. ..
1 & A A U 1
1 X 0 X X X 1
1 X X 0 X X 1
1 X X X X 1 1
'fl
£
•
TABLA DE SIMPLIFICACIÓN
1 2 3 5 7 9 11 15 17 19
| | |
1 t T
1 1 1
^W
21 22 23 25 27 29 30 31 33 37
• 1
1
TABLA DE SIMPLIFICACIÓN
38 39 41 43 45 47 49 51 53 55
1 , I 1 1 |
1
í
A i iro
1 ! 1 1 1 1
•P
TABLA DE SIMPLIFICACIÓN
57 59 61 65 66 67 69 71 73 75
• i 1
I
i
1
1
|
I
•
i
J
1
1
TABLA DE SIMPLIFICACIÓN
77 79 81 83 85 87 91 93 95 97
1 ! 1 •
^E9r
TABLA DE SIMPLIFICACIÓN
99 101 103 105 107 109 111 113 115 117
• 1 1 X X X X 1- T
T
A
i \í\
i T
lí.
r
í
TABLA DE SIMPLIFICACIÓN
119 121 123 125 127
1 1 X X X X 1- (ti
T
'T ,
;
jfSr
Fig. 3.96: Tabla de Simplificación
SECUNDARIOS
X00001X XXXOX01.Í
001X1IX X1XXX01
01 0 0 1 I X 1XXX1X1
11XXXX1
XOXXX11
OXX10X1
XX1OXX1
XOOXOX1
001XXX1¿J
XXOX11 -
Fig. 3.97: Tabla de Simplificación
144
CAPITULO IV
CONCLUSIONES.
4.1 COMENTARIOS.
- Cada uno de los cubos n se almacena en una matriz que tiene el número de
filas de acuerdo al mayor número de cubos encontrados durante el desarrollo,
por ejemplo si se encontraron 80 cubos, entonces la matriz tendrá 80 filas;
mientras que el número de columnas que tiene esta matriz depende de los
cubos de mayor orden, por ejemplo, si se tiene hasta cubos 7 la matriz tendrá
7 columnas.
4.2 CONCLUSIONES.
- Debido a que todos los cubos n se almacenan en una matriz, facilita para
regresar o adelantar con facilidad, sin necesidad de volver a realizar los
146
4.3 RECOMENDACIONES.
- Los cambios que se deben hacer son: Definir matrices de mayor orden en la
rutina de módulos, ya que este programa está desarrollado definiendo
matrices lo suficientemente grandes como para no tener problemas en la
simplificación de hasta 10 variables de entrada, además en la rutina de
escritura de la solución se debe incluir más líneas de programación que
permitan ingresar las variables adicionales.
BIBLIOGRAFÍA.
- http://campus.murravstate.edu/academic/facultv/bob.pilqrim/405/quine.html
- http://logik.phl.univie.ac.at/-chris/qmo-uk.html
- http://www.algoritm.qm.home.ro/
- www.seattlerobotics.orq/encoder/200106/qmccmin.htm
- www.ihs.theoinf.tu-ilmenau.de/-sane/projekte/qmc/embed_qmc.html
- www.math.uni-muenster.de/informatik/Scripten/
Praktischelnformatiklll/html/node38.html
- www.rpi.edu/dept/ecse/coco/SOO/W03/Q-Mmethod.ppt
- www.ece.odu.eduMeathrum/ECE241_284/support/quine.html
- http://pehuen.chiilan.ubiobio.cl/-lqaiardo/odc/aigebra/
148
ANEXO A.
MODULO 1
FORM1.
Textó.Visible = True
DoEvents
Next i
If fil(col + 2) > O Then Texto = Texto & " + "
For i - 1 Tofil(col+ 2)
If n < 5 Then
Timerl = Timer
Do
DoEvents
Loop While Timer - Timerl <= Tiempo
Else
DoEvents
Endlf
For j = 1 To Len(c(i, col + 2))
If Mid(c(i, col + 2), j, 1) = "O" Then
If j = 2 Then Texto = Texto & "A"'
If j = 4 Then Texto = Texto & "B"1
If j = 6 Then Texto = Texto & "C1"
If j = 8 Then Texto = Texto & "D"'
If j - 10 Then Texto = Texto & "E"'
If j = 12 Then Texto = Texto & "F"'
If j = 14 Then Texto - Texto & "G"'
If j = 16 Then Texto = Texto & "H"'
If j - 18 Then Texto = Texto & "I"1
If j = 20 Then Texto = Texto & "J"1
Endlf
If Mid(c(i, col + 2), j, 1) - "1" Then
If j - 2 Then Texto = Texto & "A"
If j - 4 Then Texto = Texto & "B"
If j = 6 Then Texto = Texto & "C"
If j = 8 Then Texto - Texto & "D"
If j - 10 Then Texto = Texto & "E"
If j = 12 Then Texto - Texto & "F"
If j = 14 Then Texto = Texto & "G"
If j = 16 Then Texto - Texto & "H"
If j - 18 Then Texto = Texto & "I"
If j = 20 Then Texto = Texto & "J"
Endlf
Nextj
If i o fil(col + 2) And Mid(c(i, col + 2), j, 1) o "X" Then Texto = Texto + " +
IfLen(Text6)<50Then
Texto.Width = 130 * Len(Textó.Caption) + 130 / Len(Textó.Caption) + 200
Textó.Height = 500
Else
Textó.Height - 4 * 330
Texto.Width = 130 * 50 + 130 / 50 + 200
Endlf
Textó.Left = ((Forml .Width / 2) - (Textó.Width / 2)) + 200
Textó.Top = (Forml .Height / 2) - Textó.Height
170
IfLen(Textó)<50Then
171
fílaAnulada(j) - Truc
fila = fila + 1
c(fila, col + 2) = cG, col)
mostrarmarcas
fd(col + 2) = fila
mostrarsecundarios
If n < 5 Then
Timerl = Timer
Do
DoEvents
Loop While Timer - Timerl <= Tiempo
Else
DoEvents
Endlf
Endlf
Endlf
Next j
Loop Until marcasmax = O
fíl(col + 2) = fila
If MaxCol < col + 2 Then MaxCol = coi + 2
If max < fil(col + 2) Then max = fil(col + 2)
lineas = Truc
If fila = O Then Commandl_CIick
fila = fil(col-l)
Mensaje.Visible = False
Mensaje.Caption =""
Endlf
DoEvents
Loop While Timer - Timerl <— Tiempo
Else
DoEvents
Endlf
Forj = lTofd(col)
If TablaG, i) = "*" And filaAnuladaO) = False Then
fílaAnulada(j) = True
numeroFila(i) = j
mostrarmarcas
fila-fila+1
c(fila, col + 1) = c(j, col)
fil(col + l) = fila
mostraresenciales
Ifn<5Then
Timerl = Timer
Do
DoEvents
Loop While Timer - Timerl <= Tiempo
Else
DoEvents
Endlf
For i2 = 1 To fil(O)
If Tabla(j, i2) = "*" And columnaAnulada(i2) = False Then
colurnnaAnulada(i2) = True
numeroFila(i2) = j
mostrarmarcas
Ifn<5Then
Timerl = Timer
Do
DoEvents
Loop While Timer - Timerl <= Tiempo
Else
DoEvents
Endlf
Endlf
Next i2
EndTf
Nextj
Endlf
Next i
fíl(col+l) = fila
fila = fil(col-l)
If MaxCol < col + 1 Then MaxCol = col + 1
If max < fil(col + 1) Then max = fíl(col +1)
escenciales = True
Endlf
s(j) = aux
Endlf
Nextj
Next i
For i = 1 To fíl(col)
pl =0
For pos - 1 To Len(O(i, col))
If Mid(O(i, col), pos, 1) = " " Or Mid(O(i, col), pos, 1) = ",M Then
pl=p2
p2 = pos
I f p 2 - p l > l Then
subindice = Mid(O(i, col), pl, p2 - pl)
For j = 1 To fil(O)
If Val(subindice) = Val(s(j)) Then Tabla(iJ) - "*"
Nextj
Endlf
Endlf
If pos = Len(O(i, col)) Then
pl=P2
p2 = pos
Ifp2-pl>OThen
subindice = Mid(O(i, col), pl, p2 - pl + 1)
Forj = lTofil(0)
If Val(subindice) = Val(sQ)) Then Tabla(i, j) = "*"
Nextj
Endlf
Endlf
Next pos
DoEvents
Next i
Aux2 = col
Endlf
Titulo(O). Visible = False
Listl(O).Visible-False
Titulo(l).Visible = False
Listl(l). Visible = False
Commandó.Enabled = False
Commandó. Visible = False
175
Command7.Enabled = False
CommandT.Visible = False
CommandS.Enabled = False
CommandS. Visible = False
Command9.Enabled = False
Command9.Visible = False
Label3(0).Visible = False
Label3(l). Visible = False
DoEvents
PaginaHorizontal = O
PaginaVertical = O
mostrarTabla
Tablalmplicantes = True
marcas = True
Endlf
If col >= 1 And ultima = False Then Tara construir la tabla de Cubos r
Mensaje.Caption = "¡Calculando los cubos " & Str(col) & "!"
Mensaje.Left = (Forml.Width - Mensaje.Width) / 2
DoEvents
auxiliar = fil(col + 1)
If MaxColCubos < col Then
fila-O
NumeroGrupo = 1
sihay = False
For i = 1 To fil(col) - 1
IfO(i,col)o"-"Then
ray = O
F o r j - i + 1 Tofil(col)
If Grupo(j, col) = Grupo(i, col) + 1 And O(j, col) o "-" Then
cont = O
For pos = 1 To 2 * n 'busca en cuales bits esta diferente
If Mid(c(i, col), pos, 1) o Mid(c(j, col), pos, 1) Then
cont = cont + 1 'cuenta el numero de cambios
spos = j 'rescata la combinación con la que hay el cambio
cpos = pos 'rescata la posición del bit que cambia
Endlf
DoEvents
Next pos
If cont - 1 Then
fila = fila+1
c(fíla, col + 1) = c(i, col) 'crea la nueva columna con los cubos ceros
Marca(i, col) = "*"
MarcaOí col) = "*"
Mid(c(fila, col + 1), cpos) = "X" 'inserta una X en el bit que cambia
cont2 = O
Fork=lTofila-l
If c(fila, col + 1) = c(k, col + 1) Then cont2 - cont2 + 1
Nextk
If cont2 = O Then
176
O(fíla, col + 1) = O(i, col) & "," & O(spos, col) 'Almacena las
combinaciones que cambiaron
Gmpo(fila, col + 1) = NumeroGrupo
sihay = Truc
Else
fila = fila - 1
Endlf
Endlf
Endlf
IfO(j, col) = "-" Then
ray = ray + 1
Endlf
If ray = 2 Then
Exit For
End If
Nextj
Else
If sihay = Truc Then
fila = fila + 1
c(fila, col + 1) = raya
O(fila, col+ !) = "-"
Marca(i, col) ="-"
Marca(fila, col + 1) = "-"
Grupo(fila, col + 1) = NumeroGrupo
NumeroGrupo = NumeroGrupo + 1
Endlf
Endlf
Next i
If fila > O Then fila = fila - 1
fil(col + 1) = fila
Endlf
If MaxColCubos < col Then MaxColCubos = col
If MaxCol < col + 1 Then MaxCol = col + 1
If max < fil(col + 1) Then max = fil(col + 1)
col = col + 1
If (fila = 0) Or (col = Auxl) Then
ultima = True
fíl(col) = auxiliar
Else
Commandó.Enabled = False
Commandó.Visible = False
Command7.Enabled - False
Command7.Visible - False
CommandS.Enabled = False
CommandS.Visible = False
Command9.Enabled = False
Command9.Visible = False
Label3(0). Visible = False
Label3(l).Visible - False
177
DoEvents
Endlf
Endlf
If ultima = True And Implicantes = False Then Tara hallar los implicantes primos
Mensaje.Caption = "¡Calculando los implicantes primos!"
Mensaje.Leñ - (Forml .Width - Mensaje.Width) / 2
DoEvents
If Auxl o col Then
Auxl =col
fila = O
Forj = 1 To col -1
Fori=lTofíl(j)
If Marca(i, j) o "*" And O(is j) o "-" Then
fila = fila + 1
0(fila,col) = 0(i,j)
c(fila,col) = c(i,j)
Marca(fila, col) - ""
Endlf
DoEvents
Next i
Nextj
fil(col) = fila
Endlf
Commandó.Enabled = False
Commandó.Visible = False
CommandT.Enabled = False
Command7.Visible = False
CommandS.Enabled = False
CommandS. Visible = False
Command9.Enabled = False
Comrnand9.Visible = False
Label3(0). Visible = False
Label3(l). Visible = False
Titulo(0).Caption = Titulo(l).Caption
Titulo(0).ToolTipText = "Tabla de cubos " & Str(col - 2)
mostrarlistlO
Titulo(l).Captíon= "IMPLICANTES PRIMOS"
Listl(l).ToolTipText = "Tabla de Implicantes primos "
mostrarlistll
If MaxCol < col + 1 Then MaxCol = col + 1
If max < fíl(col) Then max = fil(col)
178
Implicantes = True
Endlf
CommandH.Enabled = True
Simppaso.Enabled = True
Endlf
Command2.Enabled = True
Simplificaranterior = True
Command3.Enabled = True
Menu.Enabled = True
Text4.Locked = False
Mensaje.Caption = ""
Mensaje. Visible = False
MousePointer = vbDefault
End Sub
Commandó.Enabled = False
Commandó, Visible = False
CommandT.Enabled = False
Command? .Visible = False
CommandS.Enabled = False
CommandS. Visible == False
Command9.Enabled = False
Command9.Visible = False
Label3(0).Visible = False
Label3(l).Visible - False
If Resultado = True Then
Texto = ""
Textó.Visible = False
Titulo(0).Visible = True
mostrarTabla
mostrarmarcas
mostraresenciales
If fil(col + 2) > O Then mostrarsecundarios
Simppaso.Enabled = True
Simplifícar.Enabled = True
Commandl4.Enabled = True
Resultado = False
El se
If lineas = True Or escenciales = True Then
Picturel. Visible = True
Titulo(2). Visible = False
List2(l). Visible = False
Titulo(l).Visible = False
List2(0).Visible = False
Textó.Visible = False
For i = 1 To UBound(numeroFila)
numeroFila(i) = O
Nexti
For i = 1 To UBound(fllaAnulada)
filaAnulada(i) = False
Nexti
For i = 1 To UBound(columnaAnulada)
columnaAnulada(i) = False
Nexti
mostrarTabla
fil(col + 2) = O
escenciales = False
fil(col + l) = 0
lineas = False
Else
If marcas = True Then
marcas = False
Command2_Click
Else
If Tablalmplicantes = True Then
182
Titulo(l),Visible = False
Listl(l).Visible = False
Commandó.Visible = False
Command7.Visible = False
DoEvents
If2 A n<=64Then
For i = O To 2 A n -1
Text3 (i). Visible = True
Text2(i).Visible = True
DoEvents
Next i
Else
For i - O To Text3.UBound
Text3 (i). Visible = True
Text2(i).Visible = True
DoEvents
Next i
If pagina > O Then
Command4.Enabled = True
Command4.Visible - True
Endlf
If pagina < (2 A n) / 64 - 1 Then
CommandS.Enabled = True
CommandS.Visible = True
Endlf
Endlf
Endlf
Endlf
ultima = False
Endlf
Endlf
Endlf
Endlf
Endlf
Commandl.Enabled = True
Simplificar.Enabled = True
CommandH.Enabled = True
Simppaso.Enabled = True
If col > 0 Then
Command2.Enabled = True
Simplificaranterior = True
Endlf
CommandS.Enabled = True
Menu.Enabled - True
Text4.Locked = False
Endlf
End Sub
Else
Text2(i).Text=n"
Endlf
Nexti
Text2(0).SetFocus
If 2 A n - 1 = 63 + pagina * 64 Then
CommandS.Enabled = False
CommandS. Visible = False
Endlf
End Sub
CommandT.Enabled = True
CommandT.Visible = True
Endlf
DoEvents
Next i
Endlf
End Sub
Prívate Sub Cornmand8_Click()
pagina 1 = pagina 1 - 1
CommandS.Left = CommandS.Left
CommandS.Top = Listl(l).Top
CommandS.Enabled = False
CommandS.Visible = False
Command9.Enabled - True
Command9.Visible = True
Listl(l).Clear
For i = paginal * 16 + 1 To fil(col)
If i <= paginal * 16 + 16 Then
Listl(l).AddItem (c(i, col))
Endlf
If paginal > O Then
CommandS.Left = CommandS.Left
CommandS.Top = Listl(l).Top
CommandS.Enabled = True
CommandS.Visible = True
Endlf
DoEvents
Next i
End Sub
Prívate Sub Command9_Click()
paginal = paginal + 1
CommandS.Left = Command9.Left
CommandS.Top = Listl(l).Top
CommandS.Enabled = True
CommandS.Visible = True
Command9.Enabled = False
Command9.Visible = False
Listl(l).Clear
For i = paginal * 16 + 1 To fil(col)
If i <= paginal * 16 + 16 Then
Listl(l).AddItem (c(i, col))
Else
Command9.Left - Listl(l).Left + Listl(l).Width
Command9.Top = Listl(l).Top + Listl(l).Height - Command9.Height
Command9.Enabled = True
Command9. Visible - True
Endlf
DoEvents
Next i
End Sub
188
Text4.SetFocus
Text4.SelStart = Len(Text4.Text)
m=0
End Sub
Prívate Sub Listl_CIick(Index As Integer)
If Index = O And col > 1 Then Listl(Index).ToolTipText = "(" & O(paginaO * 16 +
Listl(0).ListIndex + 1, col - 1) & ")"
If Index = O And col = 1 Then Listl(Index).ToolTipText = "(" & O(paginaO * 16 +
Listl(0).ListIndex + 1, 0) & ")"
If índex = 1 Then Listl(Index).ToolTipText = "(" & O(paginal * 16 +
Listl(l).ListIndex + 1, col) & ")"
DoEvents
End Sub
Prívate Sub List2_Click(Index As Integer)
Label3(Index).Left = List2(Index).Left
Label3(Index).Top = List2(Index).Top + List2(Index).Height
Label3(Index).Caption = O(List2(Index).ListIndex + 1, col + índex + 1)
Label3(Index).Visible = True
End Sub
Nextil
Endlf
Text3(Index + l).Top = 2880
Text3(Index + l).Left = Text2(Index).Left + Text2(Index).Width + 40
Text2(Index + l).Top = 2880
Text2(Index + l).Left = Text3(Index + l).Left + Text3(Index + l).Width
Endlf
If Index < 63 Then
Text3(Index + 1). Visible = True
Text2(Index + 1). Visible = True
Text2(Index + l).SetFocus
Endlf
If Index - 63 And (2 A n) - 1 > 63 + pagina * 64 Then
If CommandS.Visible = False Then
pagina = pagina + 1
For i2 = O To Text2.UBound
Text2(i2).Text=""
Text3(i2).Text =""
Next i2
Text3(0).Text = f(pagina * 64)
Text3(0).Visible = True
Text2(0). Visible = True
Text2(0).SetFocus
Text2(0).ToolTipText = "f(" & pagina * 64 & ")"
Command4.Leñ = Text3(15).Left
Command4.Top = Text3(15).Top + Text3(15).Height + 20
Command4.Enabled = True
Command4.Visible = True
Else
Cali Command5_Click
Endlf
Endlf
Endlf
End Sub
'Esta sección ubica la posición donde inicia y donde termina el numero dentr
'dentro del Text4
p2 = 2
For i = 3 To Len(Text4.Text)
193
Ifp2-pl>lThen
subíndice = Mid(Text4.Text, pl, p2 - pl)
Endlf
Endlf
Next i
If Val(subindice) < 1024 And Val(subindice) >= O Then
Limpiar
Desactivar
For i = O To UBound(r)
f(i) = ""
r(i) = 2
Next i
p2 = 2
For i = 3 To Len(Text4.Text)
If Mid(Text4.Text, i, 1) = "" Or Asc(Mid(Text4.Text, i, 1)) = 10 Or
Asc(Mid(Text4.Text, i, 1)) = 13 Or Mid(Text4.Text, i, 1) = ")" Then
pl=p2
p2 = i
I f p 2 - p 1 > 1 Then
subindice = Mid(Text4.Text, pl, p2 - pl)
r(Val(subindice)) = 1
pagina = Int(Val(subindice) / 64)
Endlf
Endlf
Next i
If n o Val(Int(Abs(Log(Val(subindice) + 0.6) / Log(2)) + 1)) Then
n = Val(Int(Abs(Log(Val(subindice) + 0.6) / Log(2)) + 1))
Endlf
If n o m Then
For i - O To Text2.UBound
Text3 (i). Visible = False
Text3(i).FontSize - 8
Text3(i),Locked = False
Text2(i).Visible = False
Text2(i).FontSize - 8
Next i
Text3(0).Height=150
Text2(0).Height=150
Text3(0).Width - n * 150 + 150 / n
Text2(0).Width = 200
Text3(0).Top = 2880
Text2(0).Top = 2880
Text3(0).Left = Forml.Width / 2 - (Forml.Text3(0).Width +
Forml .Text2(0).Width) - 400
Text2(0).Leñ = Forml .Text3(0).Left + Forml .Text3(0).Width
Text3(0).Visible = Truc
194
Else
ActualizarT4
EndTf
Text4.Enabled = True
Guardar. Enabled = True
Text4.SelStart = Len(Text4.Text) -
Text4.SetFocus
Endlf
End Sub
Sub LimpiarQ
Fori = OToListl.UBound
Listl(i).Clear
List 1 (i). Visible = False
Next i
Commandó.Enabled = False
Command7.Enabled = False
Commandó.Visible = False
Command7.Visible = False
CommandS.Enabled = False
Command9.Enabled = False
CommandS.Visible = False
Command9.Visible = False
CommandlO. Visible — False
Commandl 1 .Visible = False
Commandl 2.Visible = False
Commandl 3. Visible = False
For i = O To max
For j = O To MaxCol
Marca(i,j)=""
Grupo(i,j) = 0
Nextj
Next i
For i = O To max
Forj-OTofíl(O)
Tabla(iJ)=""
Nextj
Next i
For i = O To max
filaAnulada(i) = False
Next i
For i - O To fíl(O)
numeroFila(Í) = O
columnaAnulada(i) = False
Next i
For i = O To Titulo.UBound
Titulo(i). Visible = False
Titulo(i).Caption - ""
Next i
For i = O To MaxCol
fíl(i) - O
196
Nexti
Textó.Visible = False
List2(0).Visible = Faise
List2(l).Visible = False
Picturel. Visible = False
Picturel.Cls
valizcom = Forml .Width - Commandl .Width - 360
m =0
col = 0
Resultado = False
lineas = False
escenciales = False
ultima = False
marcas = False
Tablalmplicantes = False
Implicantes = False
max = O
MaxCol = O
MaxColCubos = O
Auxl = O
Aux2 = 0
End Sub
FORM2.
End Sub
FORM3
FORMULARIO INICIAL
End Sub
Prívate Sub Command2_Click()
Forml.Show 'Abre el formulario de la simplificación
End Sub
Prívate Sub Command2_MouseMove(Button As Integer, Shift As Integer, X As Single,
Y As Single)
'Actualiza los colores de los comandos.
Commandl .BackColor = ColorlnicialBotones
Command2.BackColor = ColorEnfoque
CommandS.BackColor = ColorlnicialBotones
Command4.BackColor = ColorlnicialBotones
End Sub
Prívate Sub Command3_Click()
End Termina la ejecución del programna.
End Sub
Prívate Sub Command3_MouseMove(Button As Integer, Shift As Integer, X As Single,
Y As Single)
'Actualiza los colores de los comandos.
Commandl.BackColor = ColorlnicialBotones
Command2.BackColor = ColorlnicialBotones
CommandS.BackColor = ColorEnfoque
Command4.BackColor - ColorlnicialBotones
End Sub
Prívate Sub Command4_Click()
Tutorial.Show 'Indica el formualario del tutorial de uso del programa.
End Sub
Command4.BackColor = ColorlnicialBotones
End Sub
FORMULARIO SPLASH
Option Explicit
Prívate Sub Form_KeyPress(KeyAscii As Integer)
Unload Me
Formulariolnicial. Show
End Sub
Prívate Sub Form_Load()
IblVersion.Caption = "Electrónica y Telecomunicaciones"
IblProductName.Caption = "Simplificación de Funciones Booleanas"
End Sub
Prívate Sub Timerl_Timer()
Unload Me
203
Formulariolnicial. Show
End Sub
FORMULARIO TEXTO
End Sub
Prívate Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As
Single)
Commandl .BackColor — ColorlnicialBotones
Command2.BackCoIor = ColorlnicialBotones
End Sub
FORMULARIO TUTORIAL
For i = 1 To 16
cont = O
Text3(i-l) = n"
Do
cont = cont + 1
res = Q Mod 2
Q = Q\
Text3(i - 1) = Str(res) + Text3(i - 1)
Loop Until (cont = 4)
Next i
Text4.Text="("
DoEvents
For i = O To Text3.UBound
Text3(i).Height=150
Text2(i).Height=150
Text3(i).Width = 4 * 150 + 150 / 4
Text2(i).Width = 200
Text3(i).Left - Tutorial.Width / 2 - (Text3(i).Width + Text2(i).Width) - 400
Text2(i).Leñ = Text3(i).Left + Text3(i).Width
Text3(i).Top = 2880 + (i) * Text3(i).Height
Text2(i).Top = Text3(i).Top
If re(i) = "1" And ¡ o 9 Then
Text4.Text = Text4.Text & Str(i) & 1( "
Beep
Me.Cls
Me.DrawWidth = 2
Me.Line (Label3.Left + 0.75 * Label3.Width, Label3.Top + Label3.Height)-
(Text2(i).Left + Text2(i).Width> Text2(i).Top)
DoEvents
If Len(Text4.Text) < 50 Then
Text4.Width = 75 * Len(Text4.Text) + 75 / Len(Text4.Text) + 200
Text4.Height =
Else
Text4.Height =
Text4.Width = 75 * 50 + 75 / 50 + 200
Endlf
Text4.SelStart = Len(Text4.Text)
Text4.SetFocus
Endlf
Ifi<=13Then
Text3(i).Visible = True
Text2(i).Visible - True
Ifio9Then
Text2(i).Text - re(i)
Else
Text2(i).Text - "O"
Endlf
Else
Text2(i).Text - re(i)
208
Endlf
Timerl = Timer
Do
DoEvents
Loop Until Timer - Timerl >= Tiempo
Next i
Text4.Text = Text4.Text & ")"
Label3.Caption = "Cuando se termina de ingresar todos los mintérminos, se presiona
<ENTER> para completar la tabla"
Label3.Left = Tutorial.Width / 2 - LabeB.Width / 4
DoEvents
Case 17
Text4.Visible = True
Funcion.Enabled = False
Programa.Enabled = True
Teoría. Enabled = True
Me.Line (LabelS.Left + LabeB.Width / 2, LabelS.Top + Label3.Height>
(Text2(0).Leñ + Text2(0).Width / 2, Text2(0).Top)
Fori = O T o l 3
Text3 (i). Visible = True
Text2(i). Visible = True
Next i
Timerl = Timer
Do
DoEvents
Loop Until Timer - Timerl >= Tiempo
Text3(14).Visible = True
Text2(14).Visible = True
Timerl = Timer
Do
DoEvents
Loop Until Timer - Timerl >= Tiempo
Text3(15).Visible = True
Text2(15).Visible = True
If Len(Text4.Text) < 50 Then
Text4.Width = 75 * Len(Text4.Text) + 75 / Len(Text4.Text) + 200
Text4.Height = 215
Else
Text4.Height - 2 * 237
Text4.Width = 75 * 50 + 75 / 50 + 200
Endlf
Label3.Caption = "Otra forma de ingresar la función es ingresando en la TABLA DE
COMBINACIONES"
CaselS
Fori = OTo 15
Text3(i).Visible = False
Text2(i).Visible = False
Next i
Label2.Visible = False
Text4.Visible = False
209
Else
Text4.Height - 2 * 237
Text4.Width = 75 * 50 + 75 / 50 + 200
Endlf
Timerl = Timer
Do
DoEvents
Loop Until Timer - Timerl > Tiempo / 2
Next i
Text4.Text = Text4.Text & " )"
Me.Cls
LabelS.Caption = "Una vez que se ha ingresado toda la función sea con los
mintérminos o en la tabla de combinaciones, se debe revisar que no tenga errores, en
cuyo caso se debe corregirlo "
Case 20
Text4.Text = " ( "
Fori = O T o l 5
If re(i) = "1" And i o 9 Then Text4.Text = Text4.Text & ?1 " & Str(i)
Next i
Text4.Text = Text4.Text & ")"
Text2(9).Text = "O"
Label3.Caption = "La corrección se puede hacer ya sea en la tabla de combinaciones,
como en el editor de mintérminos, como se indica a continuación. Haga clic en el botón
Siguiente"
Me.Line (Text4.Left + 400, Text4.Top + Text4.Height)-(Label3.Left, Label3.Top +
Label3.Height/2)
Me.Line (Text2(0).Leñ + Text2(0).Width, Text2(0).Top)-(Label3.Left +
LabeB.Width / 2, LabelS.Top + Label3.Height)
Case 21
Text4.Text="("
Fori = OTo 15
If re(i) = "1" And i o 9 Then Text4.Text = Text4.Text & " n & Str(i)
Next i
Text4.Text = Text4.Text & ")"
Text2(9).Text=H0H
LabeD.Caption = "Si se corrige en el editor de mintérminos la tabla de
combinaciones se actualizará automáticamente como vemos en este ejemplo"
For i = 1 To 22
Text4.SelStart = i
Text4.SetFocus
Timerl = Timer
Do
DoEvents
Loop Until Timer - Timerl >= Tiempo / 2
Next i
cadena = Text4.Text &" "
Mid(cadena,23)="910 13)"
Text4.Text = cadena
Text4.SelStart - 23
Text4.SetFocus
211
Timerl = Timer
Do
DoEvents
Loop Until Timer - Timerl >= Tiempo / 2
cadena = Text4.Text
Mid(cadena, 23) = "9 10 13)"
Text4.Text = cadena
Text4.SelStart = 24
Text4.SetFocus
Timerl = Timer
Do
DoEvents
Loop Until Timer - Timerl >= Tiempo / 2
cadena = Text4.Text
Mid(cadena, 23) = "9 10 13)"
Text4.Text = cadena
Text4.SelStart - 25
Text4.SetFocus
Timerl = Timer
Do
DoEvents
Loop Until Tirner - Timerl >= Tiempo / 2
Text2(9).Text = ""
Beep
Me.Line (LabeB.Left + LabeD.Width / 2, LabeO.Top + Label3.Height)-
(Text2(9).Left + Text2(9).Width, Text2(9).Top)
Timerl = Timer
Do
DoEvents
Loop Until Timer - Timerl >= Tiempo
Text2(9).Text = "l"
Label3.Caption = "La corrección también se lo puede hacer en la tabla de
combinaciones como se muestra a continuación."
Case 22
Text4.Text = " ( "
Fori = O T o l 5
If re(i) = n 1" And i o 9 Then Text4.Text - Text4,Text & "" & Str(i)
Next i
Text4.Text = Text4.Text & ")"
Text2(9).Text = "O"
DoEvents
LabeB.Caption = "Si la corrección se hace en la tabla de combinaciones entonces el
editor de mintérminos se actualizará automáticamente"
F o r i ^ O T o 12
Text2(i).SelStart=l
Text2(i).SetFocus
Timerl = Timer
Do
DoEvents
Loop Until Timer - Timerl >= Tiempo
212
Next i
Fori=12To9Step-l
Text2(i).SelStart = 1
Text2(i).SetFocus
Timerl = Timer
Do
DoEvents
Loop Untíl Timer - Timerl >= Tiempo
Next i
Text2(9).Text=""
Timerl = Timer
Do
DoEvents
Loop Until Timer - Timerl >= Tiempo
Text2(9).Text=fT'
DoEvents
Beep
Me.Lme (Text4.Left + 1000, Text4.Top + Text4.Height)-(Label3.Left, LabeB.Top +
Label3.Height/2)
Timerl = Timer
Do
DoEvents
Loop Until Timer - Timerl >= Tiempo
cadena = Text4.Text & " "
Mid(cadena, 23) = "9 10 13)"
Text4.Text = cadena
Case 23
Titulo(0).Visible = False
Listl(0).Visible = False
Titulo(l). Visible = False
Listl(l).Visible = False
Fori = OTo 15
Text3(i).Visible = True
Text2(i).Visible = True
Next i
Label3.Caption = "Una vez que se ha ingresado y corregido los datos, se procede a
simplificar. La simplificación se puede realizar paso a paso presionando el botón
Siguiente, ó, puede ir directamente a la solución haciendo clic en el botón Terminar "
Me.Line (Label3.Left + Label3.Width / 2, Label3.Top + LabeB.Height)-
(Framel.Leñ, Framel.Top + Commandl.Top + Commandl.Height/2)
Me.Line (LabeB.Left + Label3.Width / 2, LabeB.Top + LabeB.Height)-
(Framel.Left, Framel.Top + CommandH.Top + CommandH.Height/ 2)
Commandl4.Enabled = True
Case 24
For i = O To Text3.UBound
Text3(i). Visible = False
Text2(i). Visible = False
Next i
Titulo(0).Top = LabeB.Top + LabeB.Height
Titulo(0).Caption = "MINTERMINOS"
213
DoEvents
Nexti
Titulo(l).Top = LabeB.Top + LabeB.Height
Titulo(l).Caption= "CUBOS 1"
Listl(l).Top = Listl(0).Top
Listl(l).Left = Listl(0).Left + Listl(0).Width + 300
Listl(l).Width = 2.75 * TextWidth("0000")
Titulo(l).Left = Listl(l).Left + Listl(l).Width / 2 - Titulo(l).Width / 2
Listl(l).Height = 28 * TextHeight("0")
Listl(l).Clear
Titulo(l). Visible = Truc
Listl(l).Visible = True
For i = 1 To 12
Listl(l).AddItem (ce(i, 2))
DoEvents
Nexti
LabeB.Caption - "Aquí están las tablas de los CUBOS O y CUBOS 1." & vbCrLf
& "En los CUBOS O se pone una marca (*) para indicar las combinaciones que han
sido usadas para formar los CUBOS 1"
Case 26
Titulo(0).Top - LabeB.Top + LabeB.Height
Titulo(0).Caption = "CUBOS 1"
Listl(0).Top = Titulo(0).Top + Titulo(0).Height
Listl(0).Left = 3000
Listl(0).Width = 2.75 * TextWidthf 0000")
Titulo(0).Left = Listl(0).Left + Listl(0).Width / 2 - Titulo(0).Width / 2
Listl(0).Height = 28 * TextHeight("0")
Listl(0).Clear
Titulo(0).Visible = True
Listl(0).Visible = True
Fori=lTol2
If i o 3 And i o 7 And i o 9 And i o 12 Then
Listl(0).AddItem("* " & ce(i, 2))
Else
Listl(0).AddItem (" " & ce(i, 2))
Endlf
DoEvents
Nexti
Tituio(l).Top - LabeB.Top + Label3.Height
Titulo(l).Caption = "CUBOS 2"
Listl(l).Top = Listl(0).Top
Listl(l).Left = Listl(0).Left + Listl(0).Width + 300
Listl(l).Width = 2.75 * TextWidth("0000")
Titulo(l).Left - Listl(l).Left + Listl(l).Width / 2 - Titulo(l).Width / 2
Listl(l).Height = 8 * TextHeight(M0")
Listl(l).Clear
Titulo(l).Visible = True
Listl(l).Visible = True
For i = Í To 3
Listl(l).AddItem (ce(i, 3))
215
DoEvents
Next i
LabelS.Caption = "Aquí se presentan las tablas de los CUBOS 1 y CUBOS 2." &
vbCrLf & "En los CUBOS 1 existen 2 combinaciones que no se han agrupado, estas
forman parte de los implicantes primos"
Case 27
Picturel. Visible = False
Titulo(0).Top = LabeB.Top + Label3.Height
Titulo(0).Caption = "CUBOS 2"
Listl(0).Top = Titulo(0).Top + Titulo(0).Height
Listl(0).Left = 3000
Listl(0).WÍdth = 2.75 * TextWidth(" 0000")
Titulo(0).Left = Listl(0).Left + Listl(0).Width / 2 - Titulo(0).Width / 2
Listl(0).Height = 8 * TextHeightfO")
Listl(0).Clear
Titulo(0).Visible = True
List 1(0). Visible = True
For i = 1 To 3
List 1 (0).Addltem (" " & ce(i, 3))
DoEvents
Next i
Titulo(l).Top = Label3.Top + LabeB.Height
Titulo(l).Captíon= "IMPLICANTES PRIMOS"
Listl(l).Top = Listl(0).Top
Listl(l).Left = Listl(0).Left + 2 * Listl(0).Width + 300
Listl(l).Width = 2.75 * TextWidthfOOOO")
Titulo(l).Left = Listl(l).Left + Listl(l).Width/ 2 - Titulo(l).Width / 2
Listl(l).Height = 10 * TextHeightfO")
Listl(l).Clear
Titulo(l). Visible = True
Listl(l).Visible = True
For i = 1 To 4
Listl(l).AddItem(ce(i,4))
DoEvents
Next i
LabeB.Caption = "Aqui están las tablas de CUBOS 2 y los IMPLICANTES
PRIMOS. En los CUBOS 2 todas las combinaciones forman parte de los implicantes
primos, ya que no se pueden hacer combinaciones para formar CUBOS 3"
Case 28 'Construcción de la tabla de simplificación
so(l) = 0
so(2) = 2
so(3) = 3
so(4) = 6
so(5) = 7
so(6) = 8
so(7) = 9
so(8)=10
so(9)=13
For i = 1 To 4
Forj = l To9
216
TablaT(í,j) =
Nextj
Next i
TablaT(l,6) = "*"
TablaT(l, ?) = "*"
TablaT(2,7)-"*"
TablaT(2>9) = 11*11
TablaT(3, 1) = "*"
TablaT(3, 2) = "*"
TablaT(3, 6) = "*"
TablaT(3, 8) = "*"
TablaT(4, 2) = "*"
TablaT(4, 3) = "*"
TablaT(4,4) = "*"
TablaT(4, 5) = "*"
Label3.Caption = "La tabla de simplificación se forma con los implicantes primos y
con los mintérminos; la marca se pone en todas las celdas que coinciden con los
implicantes y los mintérminos utilizados"
Titulo(l). Visible = False
Titulo(0).Visible = False
Listl(0).Visible = False
Listl(l). Visible = False
List2(0). Visible = Faise
Titulo(0).Top - LabeB.Height + LabeO.Height + 100
Titulo(0).Caption = "TABLA DE SIMPLIFICACIÓN"
Titulo(0).Left = Forml.Width / 2 - TituIo(O).Width / 2
Picturel.Top = Titulo(0).Top + Titulo(0).Height
Titulo(0).Visible = True
DoEvents
espacio = TextWidth("00000000")
ancho = TextWidth("OOOOOOn)
alto = 1.25 * TextHeight("0")
Picturel.Width = ancho + espacio + 9 * ancho
Picturel.Left = Forml.Width / 2 - Picturel.Width / 2
Picturel.Height = 6 * alto
Picturel.Cls
Picturel.Visible = True
Picturel.CurrentX = ancho
Picturel.Line (Picturel.CurrentX - ancho / 50, 0)-(Picturel.CurrentX,
Picturel.Height), ,BF
DoEvents
For i = 1 To 9
Picturel .CurrentX = ancho + espacio + ancho * (i - 1)
Picturel.Line (Picturel.CurrentX - ancho / 50, 0)-(Picturel.CurrentX,
Picture 1.Height), ,BF
Picturel.CurrentX = ancho + espacio + ancho * (i - 1) + ancho 12-
TextWidth(Str(so(i)))
Picture l.Current Y = O
Picturel.Print so(i)
DoEvents
217
Nexti
For i = 1 To 4
Picturel.CurrentY = i * alto
Picturel.Line (O, Picturel.CurrentY - alto / 20)-(Picturel.Width,
Picturel.CurrentY),, BF
Picturel.CurrentX = 1.25 * ancho
Picturel.CurrentY = i * alto
Picturel.Print ce(i, 4);
DoEvents
Forj = l To9
IfTablaT(iJ) = "*"Then
Picturel.CurrentX = ancho + espacio + ancho * (j - 1) + ancho / 2 -
TextWidth("*")
Picturel .CurrentY = i * alto + TextHeight(M*") / 8
Picturel .Print TablaT(i, j);
Timerl = Timer
Do
DoEvents
Loop Until Timer - Timerl >= Tiempo / 4
Endlf
Nextj
Picturel.Print
DoEvents
Nexti
Picturel.CurrentY = 5 * alto
Picturel.Line (O, Picturel.CurrentY - alto / 20)-(Picturel.Width, Picturel.CurrentY),
>BF
Case 29 'Cálculo de los implicantes primos esenciales
espacio = TextWidthfOOOOOOOO")
ancho - TextWidth("000000")
alto = 1.25 * TextHeight("0")
Picturel.Cls
Picturel. Visible = True
Picturel .CurrentX = ancho
Picturel.Line (Picturel.CurrentX - ancho / 50, 0)-(Picturel.CurrentXí
Picturel.Height),, BF
DoEvents
For i = 1 To 9
Picturel.CurrentX = ancho + espacio + ancho * (i - 1)
Picturel.Line (Picturel.CurrentX - ancho / 50, 0)-(Picturel.CurrentX,
Picturel.Height),, BF
Picturel.CurrentX = ancho + espacio + ancho * (i - 1) + ancho 12-
TextWidth(Str(so(i)))
Picturel.CurrentY = O
Picturel,Print so(i)
DoEvents
Nexti
For i = 1 To 4
Picturel.CurrentY = i * alto
218
Timerl = Timer
Do
DoEvents
Loop Until Timer - Timerl >= Tiempo
Picturel.CurrentX = ancho / 2
Picturel .CurrentY = 4.5 * alto
Picturel.Gírele (Picturel.CurrentX, Picturel.CurrentY), 25, ColorLinea
Picturel.CurrentX = ancho + 0.85 * espacio
Picturel.CurrentY = 4.5 * alto
Picturel.Line (Picturel.CurrentX, Picturel.CurrentY)-(Picturel.Width,
Picturel.CurrentY), ColorLinea
Picturel.CurrentX = ancho + espacio + ancho * (3 - 1) + ancho / 2
Picturel.CurrentY = 4.5 * alto
Picturel.Circle(PictureLCurrentX,Picturel.CurrentY), 1.5 * TextWidth("*"),
ColorLinea
List2(0).AddItem ("OX1X")
Timerl = Timer
Do
DoEvents
Loop Until Timer - Timerl >= Tiempo
Picturel .CurrentX = ancho + espacio + ancho * (4 - 1) + ancho / 2
Picturel.CurrentY = 5.5 * alto
Picturel.Circle (Picturel.CurrentX, PictureLCurrentY), 25, ColorLinea
Picturel.CurrentX = ancho + espacio + ancho * (4 - 1) + ancho / 2
PictureLCurrentY = 5.5 * alto
Picturel.Line (Picturel.CurrentX, Picturel.CurrentY)-(Picturel.CurrentX, alto / 2),
ColorLinea
Timerl = Timer
Do
DoEvents
Loop Until Timer - Timerl >= Tiempo
Picturel .CurrentX = ancho + espacio + ancho * (5 - 1) + ancho / 2
PictureLCurrentY = 5.5 * alto
Picturel.Circle (Picturel.CurrentX, PictureLCurrentY), 25, ColorLinea
Picturel.CurrentX = ancho + espacio + ancho * (5 - 1) + ancho / 2
Picturel .CurrentY = 5.5 * alto
Picturel.Line (Picturel.CurrentX, Picturel.CurrentY)-(Picturel.CurrentX, alto / 2),
ColorLinea
Timerl = Timer
Do
DoEvents
Loop Until Timer - Timerl >= Tiempo
ColorLinea = RGB(0, O, 255)
Picturel .CurrentX = ancho + espacio + ancho * (9 - 1) + ancho / 2
Picturel.CurrentY = 5.5 * alto
Picturel.Circle (Picturel.CurrentX, PictureLCurrentY), 25, ColorLinea
Picturel .CurrentX = ancho + espacio + ancho * (9 - 1) + ancho / 2
PictureLCurrentY = 5.5 * alto
Picturel.Line (Picturel.CurrentX, Picturel.CurrentY)-(Picturel.CurrentX, alto / 2),
ColorLinea
221
Timerl = Timer
Do
DoEvents
Loop Until Timer - Timerl >= Tiempo
Picturel.CurrentX = 0.5 * ancho
Picturel.CurrentY = 2.5 * alto
Picturel.Gírele (Picturel.CurrentX, Picturel.CurrentY), 25, ColorLinea
Picturel.CurrentX = ancho -f- 0.85 * espacio
Picturel.CurrentY = 2.5 * alto
Picturel.Line (Picturel.CurrentX, Picturel.CurrentY)-(Picturel.Width,
Picturel.CurrentY), ColorLinea
Picturel.CurrentX = ancho + espacio + ancho * (9 - 1) + ancho / 2
Picturel.CurrentY = 2.5 * alto
Picturel.Circie (Picturel.CurrentX, Picturel.CurrentY), 1.5 * TextWidth("*fl),
ColorLinea
List2(0).AddItem ("1X01")
Timerl = Timer
Do
DoEvents
Loop Until Timer - Timerl >= Tiempo
Picturel.CurrentX = ancho + espacio + ancho * (7 - 1) + ancho / 2
Picturel.CurrentY = 5.5 * alto
PictureLCircle (Picturel.CurrentX, Picturel.CurrentY), 25, ColorLinea
Picturel .CurrentX = ancho + espacio + ancho * (7 - 1)+ ancho / 2
Picturel.CurrentY = 5.5 * alto
Picturel.Line (Picturel.CurrentX, Picturel.CurrentY)-(Picturel.CurrentX, alto / 2),
ColorLinea
Timerl = Timer
Do
DoEvents
Loop Until Timer - Timerl >= Tiempo
Case 30
Labeló.Visible = False
Tituio(0).Visible = True
Titulo(l). Visible = True
Picturel.Visible = True
List2(0).Visible = True
LabeB.Caption = "Puesto que se han cubierto todas las columnas, no se forman
implicantes secundarios, entonces de cada implicante escencial saldrá un término de la
solución y de cada implicante primo esencial sale un término de la solución final"
DoEvents
CurrentX = List2(0).Left + List2(0).Width
CurrentY = List2(0).Top + 0.75 * TextHeight("X")
Me.Line (CurrentX, CurrentY)-(CurrentX + 1000, CurrentY), RGB(255, O, 0)
CurrentY = CurrentY - TextHeight("X") / 2
Print "B'D"'
Timerl = Timer
Do
DoEvents
Loop Until Timer - Timerl >= Tiempo
222
Tutor = Tutor + 1
t
MostrarTutorial
Command2.Enabled - Truc
Command3.Enabled = Truc
If Tutor o 21 Then Command2.SetFocus
If Ultimo = False Then
Commandl. Enabled = True
If Tutor >= 23 Then Commandl4.Enabled = True
If Tutor o 21 Then Commandl.SetFocus
Endlf
End Sub
End Sub
Command2.BackColor = ColorEnfoque
CommandS.BackColor = ColorlnicialBotones
Commandl4.BackColor = ColorTnicialBotones
End Sub
End Sub
Commandl.BackColor = ColorlnicialBotones
Cornmandl4.BackColor = ColorlnicialBotones
Command2.BackColor = ColorlnicialBotones
CommandS.BackColor = ColorlnicialBotones
re(0) = "l"
re(l) = "0"
re(2) = "l"
re(3) = 'T'
re(4) = "O"
re(5) = "O"
re(6) = "l"
re(7) = "l"
re(8) = "l"
re(9) = "l"
re(10) = 'T'
re(12) = "0"
re(13) = "l"
re(14) = "0"
ce(7s l) = M0110n
ce(8, 1) = "1001H
ce(9, l) = "1010n
06(10,1) = " --------
ce(ll, l) = lf 01H 11
ce(12, 1)-"1101 M
ce( 1,2) = "00X0"
ce(2, 2) - "XOOO"
ce(3, 2) - "--------"
ce(5,2) = MOX10M
ce(6,2)-"X010"
ce(7s2) = M100X"
ce(8,2) = n10XO"
ce(9, 2) = " --------
'9 *£ tu = (17
'9 *£ t« = (£
..-u - (e
«•i, = (Z
OT í 8,, = (ü
«6 S8,, = fe
orr., = (r
,,9 ti, - te
,,e6ü., = fe
U-H^íü
,,8 40,, = (2
.,£l,. = (066)oui
no,, = (O 4
,,8,i = (O 4
i,¿,. = (O £
,.9,, = (O
«£,. = (O c£)oin
US,, = (O *
uOXOX» -
„ = (£ '
227
Tutor = O
MostrarTutorial
Commandl.Enabled - True
End Sub
Prívate Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As
Single)
Commandl .BackColor = ColorlnicialBotones
Command2.BackColor = ColorlnicialBotones
CommandS.BackColor = ColorlnicialBotones
Commandl4.BackColor = ColorlnicialBotones
End Sub
Prívate Sub Framel_MouseMove(Button As Integer., Shift As Integer, X As Single, Y
As Single)
Commandl. BackColor = ColorlnicialBotones
Command2.BackCoÍor = ColorlnicialBotones
Command3. BackColor = ColorlnicialBotones
Comrnandl4.BackColor = ColorlnicialBotones
End Sub
Prívate Sub lngresarMinterminos_Click()
Label2.Visible = True
Text4.Visible = True
Text4.Text = "( "
LabelS.Top = Text4,Top + Text4.Height
Label3.Caption = "En la parte superior de la pantalla de simplificación se encuentra
el Editor de Mintérminos; aquí se pueden ingresar los mintérminos separados por un
espacio. Haga clic en Siguiente"
LabeO.Left = Tutorial.Width / 2 - LabeO.Width / 2
DoEvents
Me.DrawWidth = 3
Tutorial.Line (Text4.Left + 100, Text4.Top + Text4.Height)-(Label3.Left,
LabelS.Top + Label3.Height / 2), LabeD.ForeColor
Funcion.Enabled = False
Programa. Enabled = True
Teoria.Enabled - True
Commandl.Enabled = True
End Sub
Prívate Sub NueveEntradas_Click()
Beep
End Sub
Prívate Sub OchoEntradas_Click()
Beep
End Sub
Prívate Sub Programa_Click()
Forml.Show
End Sub
Prívate Sub SeisEntradas_Click()
Beep
End Sub
ANEXO B
F<AJB,C>=2m(0,2,3,5,6)
Por ejemplo.
La combinación Olí tiene como mintérmino al producto A'BC ya que A=O, B=l y
Oí.
La función booleana expresada como suma de mintérminos^ se expresa como una suma
230
de todos los mintérminos que tiene una salida igual a I. así en el caso de la tabla será.
MAXTERMINOS.- Son las sumas las variables que se forman de la siguiente manera:
Por ejemplo.
La combinación 011 tiene como maxtérmino a la suma de A+B*+C' ya que A=O, B=l
y 01.
F<A f B,0-IlM(U4,7)
231
LISTA DE MINTERMINOS
A B C D F
1 __
0 0 0 0
0 0 0 1 0
0 0 i Un
U 1,
0 0 1 1
0 1 0 0 ó
0 101 0
0 111 ^ mu
l-.-j
1 010
I O D O -frf> IT'
¡..-i TF III U ;
I 0 0 1 • 1' w
' m »:
í 0 1 1 1: , —.
' mío!
1 0 1 1 o
í 1 0 0 0
í 1 A i
i'l'i — •W"W»««»«"f~i««»»ni»««ífflp- ?B'Í ^""41
Jl 1 1 0 0
* • * * A• *1
1 I 0
minlirrtninu A B i. n F
mO 0000 1
m2 0010 1
m3 0011 1
m6 0110 1
m7 0111 1
mB 1000 1
m9 1001 1
mío 1010 1
m!3 1101 1
CUBOS O
En una tabla se agrupa todos los mintcrminos de acuerdo a la cantidad de unos que
contienen.
Por ejemplo.
CUBOS 1
• Se agrupa CUBOS O del primer grupo con CUBOS O del segundo grupo.
• Se agrupa CUBOS O del segundo grupo con CUBOS O del tercer grupo.
• Se agrupa CUBOS O del tercer grupo con CUBOS O del cuarto grupo.
• Así sucesivamente hasta terminar de agrupar todos los CUBOS 0.
Se compara si ios dos CUBOS O que están siendo agrupados difieren en tina sola
posición, en cuyo caso el CUBO I será similar a los CUBOS O agrupados, pero en la posición
que cambia se pone una X.
A los CUBOS O que han sido agrupados y formaron un CUBO 1 se pone una señal
para especificar que si ha sido tomado en cuenta.
Por ejemplo.
234
En los CUBOS O m0 y m2 se ponen las marcas para indicar que si han sido tomados en
cuenta.
Al comparar los CUBOS Om^y m¡3, forman el CUBO 1 (9,13) = 1X01 ya que difieren
únicamente en la segunda posición.
CUBOS 2
- Agrupando dos CUBOS 1 de un grupo con los CUBOS I del siguiente grupo. En esta
caso el CUBO 1 (O, 2) se agrupa con el CUBO 1 (8, 10) para formar el CUBO 2 (O, 2, 8, 10) =
XOXO ya que cambia únicamente en la primera posición. En el siguiente gráfico se indica todo
el proceso para encontrar los CUBOS 2.
Mintérmino CUBOS 1
mO, m2 00X0 •^ CUBOS 2
mO, m8 000 ^^^^
"5(0,2,8,10) X O X O
m2, m3 ooox ~^^ ( 2, 3, 6, 7 ) 0 X 1X
m2, m6 0X10
m2, m10 X01 0
m8, m9 1OOX
m8, m10 1 0X0 //
t."í
í í'
m3, m7 0X1 1 w/
/
^
m6, m7 01 1 X
m9, m13 1 X01
Como se puede ver existen dos CUBOS 1 100X y 1X01 que no se combinaron para
formar CUBOS 2 por esta razón estas combinaciones formarán parte de los implicantes
primos.
236
IMPLICANTES PRIMOS
Los implicantes primos se forman con todos los cubos que no se agruparon con ningún
otro cubo para formar un cubo de mayor grado.
Por ejemplo:
Los implicantes primos son los ClIBOS 1 100X y 1X01, mientras que, como no se han
agrupado los CUBOS 2 para formar CUBOS 3 también todos los CUBOS 2 formarán parte de
los implicantes primos.
IMPLICANTES PRIMOS
(8,9) 100X
(9,13) 1X01
(0,2,810) XOXO
(2,3,6,7) OX1X
TABLA DE SIMPLIFICACIÓN
La tabla de simplificación sirve para simplificar mas los implicantes primos, ya que
algunos implicantes primos están contenidos en otros, para eso se construye una tabla, en la
que se pone una marca en cada celda que coincide con el implicante primo y el minténnino
que contiene. Por ejemplo el implicante primo OX1X contiene a los mintérminos m2, m3, mó,
m?. La tabla se indica en el siguiente gráfico.
237
TABLA DE SIMPLIFICACIÓN
0 2 3 6 7 8 9 1O 13
1 OOX * *
1 XO 1 * *
xoxo * * * *
0X1 X * * * *
o 8 1O 13
1 OOX
1 XO 1
xoxo
0X1 X
ESCENCIALES
XOXO ^B'D 5
OX1X -> A'C
1X01 -> BC'D
Una vez encontrados todos los implicantes primos esenciales y si sobran columnas que no
han sido tomadas en cuenta se procede a calcular los implicantes primos secundarios de menor
239
Esta es la tabla de simplificación para una función de 5 entradas que tiene implicantes
primos secundarios ya que el ejemplo anterior no tiene implicantes primos secundarios
TABLA DE SIMPLIFICACIÓN
3 2j 3 5 9 10 11 18 19 20 21 ?3 25 26 27
•>,' 00X0 t- nr |
r) I í í
í i !
X0101
1
|
í
|
ii | j
e
t ¡
i
V 1010X- ^ f "" -—- — f— • "~H ^j^fV
í>
í
—±—
^J 10X11- "-j— | ! í ~f— -f- ~t" -<r i 1
101X1 |
l
i
j
j í
• i
t
i
í
0X0X1 ! ¡ r í
j í j j 1 ^1
i
I
!
X10X1 jf *• i
j ) í i *
T i
%• XX01X- —^?>~ ~<5^~ — ~^— -4-~ __ái
f "i
t $• —
~4
i
•u
i,
i,/ •v/ e
"V
J
\L f ' "'fí ' % V / l< 1:
ES ENCIALES SECUNDARIOS
XX0 1 X
.¿ /-í 4 ."v, •• y
* i í i | í A
f 'O1 S W V \1
10X11
De los esenciales:
Quine HcCIuskey
MANUAL DE USUARIO.
2003
CONTENIDO.
- Procesador PI.
- 24 MB de memoria RAM.
15MB de espacio disponible en el disco Duro.
- Unidad de CD-Rom.
Método de Instalación.
Una vez comprobado que cumple con los requerimientos mínimos siga los
siguientes pasos:
Fundamento Teórico.
Iniciar simplificación.
Simplifica una función ingresando los datos ya sea en forma de tabla o en forma de
mintérminos, para luego simplificarla paso a paso o en forma directa.
Menú.
Permite Ingresar una función nueva, Abrir una función guardada, Guardar una
función, Simplificar, y salir como se indica en la figura M6.
M«.;Clusk(;y. Simplificación
Nuevo.
Sirve para ingresar una función nueva ya sea como mintérminos o como una tabla
de salida.
Abrir.
Abre una función almacenada en disco esta función tiene extensión *.boo, esta
función contiene las salidas de todas las combinaciones como se indica en la figura M7.
unctón2.boo
unctón3,boo
unctón3b.boo
uncion4.boo
uncton4b.boo
uncjon5,boo
uncionSb.boo
Guarda los datos de las salidas de cada combinación de una función en un archivo
con extensión *.boo como se Índica en la figura M8.
funcjon1Qb.boo
Íunción2boo
funcjon3.boQ
función3b.boo
func»n4.boo
funcion4b.boo
funcion5.boo
funcion5fa.boo
Fig. M8: Ventana para ingresar el nombre del archivo a ser guardado
Simplificar.
Anterior
Ingreso de mintérminos.
Tabla de mintérminos.
Cubos 0.
Es la tabla de cubos ceros es decir son todas las combinaciones que tienen coma
salida igual a 1 y además están ordenadas de acuerdo al numero de unos que tienen cada
una de las combinaciones.
10
Cubos n,
Implicantes Primos.
Es la tabla que contiene todos y cada uno de los cubos n que no se utilizaron para
formar cubos de mayor orden.
Tabla de Simplificación.
Es la tabla conformada por los mintérminos y los implicantes primos para poder
simplificar.
Implicantes Primarios.
Los implicantes primarios son los términos que necesariamente deben estar dentro
de la solución.
Implicantes Secundarios.
Los implicantes secundarios son términos adicionales con menor costo, que
también deben estar dentro de la solución.
Solución.