Está en la página 1de 235

ESCUELA POLITCNICA NACIONAL

ESCUELA DE INGENIERA

MTODO DIDCTICO DE SIMPLIFICACIN DE FUNCIONES BOOLENAS

PROYECTO PREVIO A LA OBTENCIN DEL TTULO DE INGENIERO EN ELECTRNICA Y TELECOMUNICACIONES

LUIS EDUARDO LPEZ MEDINA

DIRECTOR: ING. CARLOS NOVILLO

Quito, Noviembre del 2003

DECLARACIN

Yo LUIS EDUARDO LPEZ MEDINA, declaro que el trabajo aqu descrito es de mi autora; que no ha sido previamente presentada para ningn grado o calificacin profesional; y, que he consultado las referencias bibliogrficas que se incluyen en este documento. La Escuela Politcnica Nacional, puede hacer uso de los derechos correspondientes a este trabajo, segn lo establecido por la Ley, Reglamento de Propiedad Intelectual y por la normatividad institucional vigente.

Luis Eduardo Lpez Medina

CERTIFICACIN

Certifico que el presente trabajo fue desarrollado por LUIS EDUARDO LPEZ, bajo mi supervisin.

Ing. Carlos DIREbrOR-BPROYECTO

CONTENIDO
R. P. RESUMEN PRESENTACIN iv vi 1
1 3 3 7 12

1. INTRODUCCIN
1.1. Introduccin 1.2. Algebra de Booie 1.2.1. Resea Histrica 1.2.2. Ecuaciones Booleanasy Funciones Lgicas Bsicas 1.2.3. Tabla de Verdad

2. SIMPLIFICACIN DE FUNCIONES BOOLEANAS


2.1. Funciones Booleanas 2.1.1. Deduccin de Ecuaciones booleanasa partir de una tabla de verdad 2.1.2. Tabla de verdad a partir de una ecuacin booleana 2.2. Mtodos de Simplificacin 2.2.1. Mtodo del Algebra de Boole 2.2.2. Mtodo del Mapa de Karnaugh 2.2.3. Mtodo Quine-McCIuskey

13
13 14 19 21 21 24 33

2.2.3.1. Representacin cbica de fas funciones de Boole 33 2.2.3.2. Obtencin de los implicantes primos 36 2.2.3.3. Seleccin de un conjunto ptimo de implicantes primos. 40 2.2.4. Funciones Incompletamente especificadas 2.2.5. Comparacin de los mtodos de simplificacin 2.3.lmplementacin de las funciones booleanas simplificadas 47 49 51

3. DISEO DEL PROGRAMA COMPUTACIONAL PARA SIMPLIFICAR FUNCIONES BOOLEANAS


3.1. Introduccin 3.1.1. Breve descripcin del uso de formularios de Visual Basic 3.1.2. Controles de Visual Basic 3.1.2.1. 3.1.2.2. 3.1.2.3. TextBox Label CommandBotton

53
53 54 56 57 59 60

3.1.3. Breve descripcin del uso de comandos y sentencias en Visual Basic ,. 62 62 63 63 64 64 65 65 66 66 67 68 69 70 72 73 73 74 74 74 75 75 76 77 78 78 80 81 82 84 85 85 88 95 97 102 108 112 3.1.3.1. Fundamentos de la programacin 3.1.3.2. Variables...... 3.1.3.2.1. Alcances de las variables 3.1.3.2.2. Establecimiento del alcance de las variables 3.1.3.2.3. Variables utilizadas en un procedimiento 3.1.3.2.4. Variables utilizadas en un mdulo 3.1.3.2.5. Variables utilizadas por todos los mdulos 3.1.3.2.6. Declaracin de variables 3.1.3.2.7. Tipos de variables 3.1.3.2.8. Consideraciones 3.1.3.3. Procedimientos 3.1.3.3.1. Procedimientos generales.... 3.1.3.3.2. Procedimientos de evento 3.1.3.4. Funciones 3.1.3.4.1. Llamadas a funciones 3.1.3.4.2. Paso de argumentos a Procedimientos y funciones 3.1.3.4.3. Tipos de datos de los argumentos 3.1.3.4.4. Paso de argumentos por valor 3.1.3.4.5. Paso de argumentos por referencia 3.1.3.5. Estructuras de Control (Repeticin y decisin) 3.1.3.5.1. Do While-Loop / Do-Loop While 3.1.3.5.2. For-Next 3.1.3.5.3. Else-End If.... 3.1.3.5.4. If-Then-Else 3.1.3.5.5. Select-Case 3.2. Diagrama de Flujo del Programa 3.2.1. Teora 3.2.2. Simplificacin 3.2.3. Tutorial 3.3. Diagrama de flujo de la simplificacin 3.3.1. Ingreso de los datos en la tabla de combinaciones 3.3.2. Formacin de cubos 3.3.3. Tabla de implicantes primos 3.3.4. Tabla de simplificacin de los implicantes primos 3.3.5. Simplificacin de la tabla de implicantes primos 3.3.6. Ecuacin booleana simplificada 3.4. Resultados Obtenidos

IV

RESUMEN
Dada la importancia que tiene hoy en da el diseo de los circuitos digitales para mltiples aplicaciones, es necesario aprender a interpretar las funciones asociadas a cada una de las aplicaciones y traducirlas a tablas de verdad y funciones booleanas. Para tener un circuito adecuado es necesario simplificar la funcin booleana hasta un mnimo posible, de tal forma que se utilicen la mnima cantidad de compuertas, sin afectar el funcionamiento del circuito tanto en entradas como en salidas. Para poder simplificar una funcin booleana se pueden aplicar tanto teoremas del lgebra booleana, como el mapa de Karnaugh (Veitch), como mtodos tabulares como el mtodo de Quine-McCIuskey, que es el que se implementa en este proyecto. El mtodo del lgebra de Boole utiliza la lgica matemtica y sus teoremas para poder simplificar la funcin; sin embargo, este mtodo es conveniente cuando se tienen pocas variables de entrada. El mtodo del mapa de Karnaugh es un mtodo grfico bastante bueno, pero no es prctico cuando se tienen ms de 5 variables de entrada. El mtodo de simplificacin tabular de Quine-McCIuskey es un mtodo que compara todas las combinaciones con las siguientes dependiendo la cantidad de unos que contenga cada combinacin de las variables de entrada. Este es un mtodo recursivo y por esta razn es fcil de implementar en una rutina de programacin. El proyecto de titulacin consiste en implementar un programa tutorial que simplifica funciones booleanas utilizando el mtodo Quine-McCIuskey. El

procedimiento de simplificacin de las funciones booleanas puede realizarse paso a paso o directamente. El ingreso de datos se puede hacer de dos formas: mediante una tabla de combinaciones o utilizando un editor de mintrminos. En este trabajo se incluye un resumen de los comandos y sentencias utilizadas en Visual Basic para la programacin. Adems, se explica todo el proceso de diseo del programa de simplificacin.

VI

PRESENTACIN
Hoy en da el diseo electrnico no solo se limita a los elementos analgicos, para poder obtener resultados confiables, rpidos y econmicos, es conveniente disear circuitos electrnicos utilizando chips de compuertas lgicas; para esto es necesario transformar el problema a una funcin booleana, y luego simplificarla, para que el nmero de compuertas utilizadas sea lo mnimo posible. La simplificacin se la hace rpidamente utilizando el mtodo de QuineMcCIuskey ya que este proceso sirve para cualquier nmero de variables de entrada. En el Capitulo 1 se hace una introduccin de los sistemas digitales y su relacin con los sistemas analgicos, una resea histrica de la lgebra de Boole, las ecuaciones booleanas, funciones lgicas bsicas y las tablas de verdad. En el Capitulo 2 se explican los diferentes mtodos que existen para simplificar las funciones booleanas; tanto como lgebra de Boole, mapa de Karnaugh y el mtodo de Quine-McCIuskey, adems se hace una comparacin de los mismos; tambin se explica la implementacin de las funciones booleanas. En el Capitulo 3 se da una descripcin rpida de los formularios, comandos y sentencias utilizadas en Visual Basic; Adems, se explica el proceso de diseo del programa tutorial y de simplificacin; adems se presentan los resultados de algunas pruebas realizadas. Finalmente, en el Capitulo 4 se encuentran los comentarios, sugerencias y conclusiones sobre este trabajo.

CAPITULO 1 INTRODUCCIN 1.1.- INTRODUCCIN.


El avance de la Tecnologa y la necesidad de realizar tareas de una forma automtica, han llevado a desarrollar circuitos integrados que se pueden usar con facilidad, estos circuitos se denominan compuertas lgicas, que estn disponibles en cpsulas de circuitos integrados. Un sistema de automatizacin o de comunicaciones est diseado utilizando muchas de estas compuertas, para lo cual se deben desarrollar "tablas de verdad", en las que se indica el estado de la salida para cada combinacin de las entradas, la implementacin de estos sistemas requiere que el circuito est simplificado para que el costo de elementos sea el menor posible y as construir un sistema fcil de implementar. La simplificacin de la tabla de verdad asociada al sistema que est disendose, se puede hacer mediante varios mtodos cuya eficiencia depende de la cantidad de entradas y la habilidad de la persona que est simplificando, el proceso de simplificacin manual es demasiado tedioso, poco confiable y lleva mucho tiempo, lo cual impide que el diseador se dedique a otras cosas ms importantes y productivas, por esta razn se ha pensado en el desarrollo de este trabajo. El resultado de la simplificacin de la tabla se denomina funcin booleana la cual es una relacin lgica entre todas las entradas combinadas por medio de operadores lgicos. El presente trabajo consiste en desarrollar un programa que indique el proceso detallado de simplificacin de las tablas de verdad utilizando el mtodo tabular de Quine-McCIuskey de una manera didctica, ordenada y comprensiva,

hasta obtener la funcin booleana simplificada, este programa debe ser capaz de indicar paso por paso todos los detalles de la simplificacin, para lograr una comprensin de este mtodo. Para obtener un programa con las caractersticas descritas en el prrafo anterior, se utiliz el programa Visual Basic, que permite el fcil manejo de formularios, comando y mens estandarizados de Windows. En la Carrera de Ingeniera en Electrnica y Telecomunicaciones no existe un programa de este tipo para ayudar a la enseanza de la simplificacin de funciones booleanas utilizando este mtodo, este proyecto servir para que los alumnos de Sistemas Digitales comprendan con mayor facilidad el mtodo tabular de Quine-McCIuskey, y para los diseadores de sistemas digitales permitir simplificar las funciones booleanas asociadas a sus diseos de una manera rpida y segura, SISTEMAS ANALGICOS Y SISTEMAS DIGITALES. Representacin Analgica.- Es una cantidad que se representa por medio de otra cantidad directamente proporcional, es decir es una variacin totalmente continua, ya que puede variar gradualmente sobre un intervalo continuo de valores. Sistema Analgico.- Es un dispositivo que trabaja con magnitudes netamente analgicas o de variacin continua. Representacin Digital.- Es una cantidad que se representa por medio de dgitos los cuales son cantidades discretas de valores a pesar de que la magnitud a la que representa sea continua u analgica. Sistema Digital.- Es un sistema que trabaja con informacin discreta, estos sistemas pueden ser electrnicos, mecnicos, o magnticos.

Un sistema digital tiene muchas ventajas sobre un sistema analgico. Mayor facilidad de disear con Circuitos Integrados. Facilidad para almacenar la informacin. Ms exactitud y precisin. Flexibilidad para implementar los diseos. Es un sistema casi inmune al ruido. Tiene un alto grado de integracin. Facilidad de programacin para la operacin.

1.2. -LGEBRA DE BOOLE. 1.2.1. -RESEA HISTRICA "El concepto de variable lgica fue introducido en 1850 a travs del uso del lgebra booleana. El lgebra booleana es un mtodo muy sencillo para expresar situaciones, en forma de lenguaje matemtico. La lgica digital adquiere su dimensin prctica a travs de las compuertas y se consolida como una ciencia estructurada mediante el lgebra booleana. Sus principios tericos fueron desarrollados por el matemtico ingles George Boole en su obra "Anlisis matemtico de la lgica" publicada en 1847. Sin embargo, slo hasta 1938 se descubri su real utilidad".

"En este ao, Claude E. Shannon, estudiante de postgrado del MIT (Instituto Tecnolgico de Massachusetts, EE.UU) present un trabajo en el cual describa como el lgebra booleana se adaptaba perfectamente a la representacin y al diseo de circuitos de conmutacin, basados en rels e interruptores". "Con el advenimiento de los tubos de vaco, los transistores y los circuitos integrados y la fabricacin de compuertas, circuitos y sistemas digitales con estas tecnologas, el lgebra booleana adquiri un papel determinante en el desarrollo de la electrnica digital moderna y sus aplicaciones".

"El lgebra booleana proporciona el mtodo ms compacto y conveniente de representar, analizar y disear circuitos lgicos. La operacin completa de un circuito digital se puede describir mejor por el lgebra booleana que utilizando complicados diagramas lgicos y extensas tablas de verdad". "Cuando se disea un circuito por mtodos booleanos, el primer paso consiste generalmente en obtener su tabla de verdad de acuerdo con las condiciones de entrada y de salida. A partir de esta tabla se deriva entonces una ecuacin booleana que se simplifica y conduce al circuito lgico deseado. El circuito obtenido por este mtodo es el ptimo porque requiere de un nmero mnimo de compuertas para su realizacin. Esto reduce el costo, el tamao fsico y el consumo de potencia del mismo y mejora su confiabilidad y velocidad. Todas estas consideraciones son importantes cuando se disean circuitos digitales".1 El lgebra de Boole es un conjunto de elementos y operadores que ayudan en el diseo de circuitos combinacionales, los axiomas y teoremas que utiliza el lgebra de Boole ayudan a la simplificacin de las funciones booleanas. Todas las operaciones del lgebra de Boole actan sobre dos elementos bsicos 1 y O que representan verdad o falsedad, fsicamente estos dos estados se pueden representar como O lgico (un nivel entre Ov -- 0.8 v), y 1 lgico (un nivel de 2.5v 5v). En la figura 1.1 se representan los niveles lgicos, en funcin del voltaje.

VOLTAJE v
2.5 0.8 i
Vx

lgico

1 lgico

NIVEL

Fig. 1.1: Niveles de voltaje para cada valor lgico

http://pehuen.chiUan.ubiobio.cl/-lgaiardo/odc/algebra/

Como se puede ver en la figura 1.1 Vx es el rango de voltaje analgico prohibido, es decir que para representar un 1 lgico o un O lgico no debe existir un voltaje en este rango. La utilizacin de variables que trabajan con dos valores, la desarroll Shannon, usando algunas ideas que haban sido expresadas anteriormente por el matemtico ingls George Boole. Las variables booleanas no toman valores cuantitativos, pero pueden usarse para representar informacin cuantitativa. Para trabajar con variables booleanas, se utilizan operadores similares a los del lgebra comn. A estos operadores booleanos comnmente se los conoce como conectivos lgicos. El lgebra de Boole, como cualquier otro sistema matemtico puede ser definida por un conjunto de elementos, un conjunto de operadores, y un nmero de axiomas o postulados. En 1938 Shannon introdujo una lgebra de Boole de dos valores llamada lgebra de conmutacin en la cual l demostr que las propiedades de los circuitos de conmutacin elctrica biestables pueden ser representadas por esta lgebra. El lgebra de Boole es una estructura algebraica definida para un conjunto de elementos B juntamente con dos conectivos binarios +(or) y .(and) de tal forma que cumplan con las siguientes propiedades. 1. (a) Conjunto cerrado con respecto al conectivo + (b) Conjunto cerrado con respecto al conectivo.

2.

(a) Un elemento de identidad con respecto a + designado por el 0: x+0=0+x=x. (b) Un elemento de identidad con respecto a . designado por el 1: x.1=1.x=x.

(a) Conmutativo con respecto a +: x + y = y + x (b) Conmutativo con respecto a .: x. y = y. x

(a). Es distributivo sobre +: x.(y + z) = (x. y) + (x. z). (b) + es distributivo sobre .: x + (y. z) = (x+ y). (x+ z).

Para cada elemento xeB, existe un elemento x'eB (llamado el complemento de x) tal que: (a) x+ x' = 1 y (b) x. x' = 0.

Existen al menos dos elementos x, y e B tales que x *y.

Al comparar el lgebra de Boole con la aritmtica y el lgebra ordinaria se notan las siguientes diferencias: 1. Los postulados no incluyen la ley asociativa. Sin embargo esta ley es vlida para el lgebra de Boole y puede deducirse de otros postulados. 2. La ley distributiva de + sobre . , es decir, x+ (y. z) = (x+ y).(x+ z) es valida para el lgebra de Boole pero no para e! lgebra ordinaria. 3. El lgebra de Boole no tiene inversos aditivos o multiplicativos y por tanto no hay operaciones de sustraccin o divisin. 4. La propiedad 5 define un operador llamado complemento el cual no est disponible en el lgebra ordinaria.

5.

El lgebra ordinaria trata con los nmeros reales, los cuales constituyen un conjunto infinito de elementos. El lgebra de Boole trata con los elementos del conjunto B, que es un conjunto de solamente dos elementos, O y 1.

El lgebra de Boole se asemeja al lgebra ordinaria en algunos aspectos; escoger los smbolos + y . es intencional con el fin de facilitar las manipulaciones con lgebra de Boole por parte de personas familiarizadas con el lgebra ordinaria. Aunque no se puede usar algunos conocimientos debe ser muy cuidadoso de no sustituir las reglas del lgebra ordinaria donde no sean aplicables. Es muy importante distinguir entre los elementos del conjunto de una estructura algebraica y las variables de una sistema algebraico, por ejemplo, los elementos del campo de los nmeros reales son nmeros, mientras que las variables a, b, c, etc. usadas en el lgebra ordinaria son smbolos que se establecen para los nmeros reales. Similarmente en el lgebra de Boole se definen los elementos de un conjunto B y las variables, tales que x, y, z sean simplemente smbolos que representen los elementos. A estas alturas es importante darse cuenta que para tener una lgebra de Boole se debe demostrar: 1. 2. 3. Los elementos del conjunto B. Las reglas de operacin de los dos operadores binarios, y Que el conjunto de elementos B, juntamente con los dos conectivos, satisfagan los seis postulados. 1.2.2. -ECUACIONES BOOLEANAS Y FUNCIONES LGICAS BSICAS. Las funciones lgicas tienen analoga con los interruptores, debido a una concepcin histrica, ya que antes de la invencin de los dispositivos de estado slido y de los circuitos integrados, las funciones lgicas se construyeron con rels electromecnicos (relevadores), y las primeras computadoras tenan miles de estos dispositivos interconectados mediante conjuntos de alambres.

A continuacin se definen algunos trminos que servirn para estructurar una funcin booleana. Proposicin.- Planteamiento de un teorema o de un problema que se debe resolver. Conectivo.- Son los operadores del lgebra de Boole, similares a los del lgebra comn, y representan a los circuitos digitales ms fundamentales. Variable booleana.- Las variables booleanas solo pueden tomar dos valores lgicos "O" o "1". En un circuito lgico, una variable booleana puede representar presencia o ausencia de voltaje.

Las ecuaciones booleanas tienen las siguientes caractersticas bsicas: 1. Cada ecuacin tiene la forma F = f (A, B, C) donde F, A, B, C, etc. son variables booleanas. 2. Todas las variables son variables lgicas, caracterizadas por tener slo dos posibles valores: VERDADERO o FALSO, ALTO o BAJO, 1 o O, etc. 3. Las variables lgicas estn relacionadas con las ecuaciones mediante operadores lgicos o conectivos: EQUIVALENCIA LGICA, AND, OR e INVERSIN LGICA.

Las operaciones bsicas del lgebra de Boole son las siguientes. 1) Complementaron.- Cambia el valor de verdad de una proposicin, se representa con el smbolo"-" sobre la variable, o con un apostrofe delante de la variable (A1); la compuerta asociada a esta operacin se denomina "NOT"; la tabla y su smbolo lgico son los siguientes.

2)

Conjuncin. - Es una operacin de producto lgico. Se lo representa con el punto o con la ausencia de este. ("A.B"); esta operacin se la realiza con la compuerta "AND", su smbolo lgico y tabla son los siguientes.

r=A.B

A 0 0 1 1

B 0 1 0 1

A.B

0 0 0 1

3)

Disyuncin.- Es equivalente a la operacin suma lgica y se representa con "A+B"; la compuerta asociada a esta operacin se denomina "OR". A continuacin se muestra su smbolo lgico y su tabla de verdad.

1>A+B
4)

Disyuncin exclusiva.- Esta operacin es una variante de la operacin disyuncin y se lee "XOR"; se representa como "AB".

Basndose en estas cuatro operaciones bsicas se genera la funcin booleana simplificada a partir de la tabla de verdad asociada a cada diseo combinacional.

10

Las compuertas AND, OR y XOR tienen otras variantes, que no son ms que, a las compuertas antes mencionadas, aadir a la salida la compuerta NOT, obtenindose 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 0 0 1 1 B 0 1 0 1 A.B (A.B)' 0 1 0 1 0 1 1 0

A B

.Y=(A.B) '

OR
AB 00 01 10 11 A+B (A+B)1 0 1 1 0 1 0 1 0

f=(A+B) '

XNOR
A B AB 00 0 01 1 10 1 11 0

XA

(AB)' 1 0 0 1

Todas las compuertas antes mencionadas se las puede reemplazar nicamente con compuertas NAND o nicamente con compuertas OR, a esta caracterstica se denomina universalidad de las compuertas NAND, o universalidad de las compuertas OR respectivamente, as por ejemplo. UNIVERSALIDAD DE LAS NAND. a) NOT. A'=(A.A)'.

11
b) AND. c) OR. A.B=((A.B)')' A+B=(A')'+(B')' = (A'.B1)'

= { A ' .B 1
"-

(B.B

UNIVERSALIDAD DE LAS OR. a) NOT. b)AND. A'=(A+A)'. A.B=(A'+B')'

(=(A+A) '

A->:
B-S

(A+A) ' Y={A'+BI) (B+B)


f

c) OR.

A+B=((A+B)')'

O
booleana:

Y={(+B)')'

A continuacin se definen algunos trminos que se usan en lgebra

Literal.- Es una variable o su complemento (A, A', B, B', etc.) Trmino Producto.- Es una serie de literales relacionados con la compuerta AND, ej. AB'D, ACD'E', etc. Trmino Suma.- Es una serie de literales relacionados con la compuerta OR, ej. A+C+D', A+B+D'+E, etc.

12

Trmino normal.- Es un trmino producto o un termino suma en el cual ninguna variable aparece ms de una vez. 1.2.3. -TABLA DE VERDAD. Una tabla de verdad sirve para representar simblicamente una funcin lgica. Todas las posibles combinaciones de los valores de la variable de entrada se presentan en una tabla y, para cada combinacin nica de entradas, los valores de la variable de salida se listan en una columna separada asignada a cada una de las variables. De este modo, la tabla de verdad constituye una especificacin completa de la lgica combinacional que se va a disear. En muchos casos, la construccin de una tabla de verdad a partir de la especificacin del problema puede ser muy difcil, por lo tanto, el proceso que se implante en lgica debe ser estudiado caractersticas. en detalle, hasta que se comprendan sus

FORMAS ESTNDAR DE LAS FUNCIONES BOOLEANAS.- Es posible describir una funcin booleana mediante tablas de verdad en la que se indiquen los valores de la salida para todas y cada una de las combinaciones de las entradas, tambin es posible escribir una funcin booleana en forma de una ecuacin boofeana; esta ecuacin booleana est compuesta por la suma de productos; en este caso se denomina suma de mintrminos, tambin se puede escribir por el producto de las sumas, en este caso se dice es un producto de maxtrminos. En el siguiente capitulo se hace una profundizacin de cmo obtener la suma de productos (SOP) o producto de sumas (POS).

13

CAPITULO 2.

SIMPLIFICACIN DE FUNCIONES BOOLEANAS.


2.1 FUNCIONES BOOLEANAS
Una variable binaria puede tomar el valor O o 1. Una funcin de Boole es una expresin formada con variables binarias, los conectivos OR, AND y NOT y el parntesis. Para un valor dado de variables, la funcin puede ser O o 1. Una funcin de Boole puede ser representada por medio de la tabla de verdad, para hacerlo se necesitan 2n combinaciones de unos y ceros de las n variables binarias, donde n es el nmero de variables de entrada de la funcin. Por ejemplo, si la funcin tiene 3 variables de entrada, entonces se necesitan 23 = 8 combinaciones. En otra columna se ponen los valores de la funcin, es decir el valor que tiene la salida de este sistema 1 o O para cada una de las combinaciones en las entradas. Las combinaciones de unos y ceros se pueden obtener fcilmente para cada fifa de los nmeros binarios contando desde O a 2n-1. Para cada fila de la tabla, hay un valor para la funcin igual a 1 o 0. Las funciones booleanas se pueden transformar de una expresin algebraica en un diagrama lgico compuesto por compuertas AND, OR y NOT. Se necesita una compuerta AND para combinar dos o ms variables en un trmino y una compuerta OR para combinar 2 o ms trminos.

14

2.1.1 DEDUCCIN DE ECUACIONES BOOLEANAS A PARTIR DE UNA TABLA DE VERDAD

Consideremos la siguiente tabla de verdad:

2 3 4 5 6 7 8 9 10 11 12 13 14 15

A 0 0 0 0 0 0 0 0

B 0 0 0 0

c
0 0

D 0

1 1 1 1 1 1 1 1

1 1 1 1

1 1 1 1

0 0 0

1 1 1 1 1

0 0

Y 0 0 0 0 0 0 0 0 0 0 0

1 1

Mintrmino m?

0 0 0 0

0 0

0 0

1 1 1 1

1 1 1 1

Mintrminomn Mintrmino mi3 Mintrmino mu

0 0

0 0

1 1

A continuacin se detalla la forma de obtener la ecuacin lgica (funcin lgica) que se representa o se sintetiza en forma de suma de mintrminos o suma de trminos mnimos. El primer paso es identificar las filas o combinaciones de entrada que producen como resultado un 1 a la salida. En nuestro caso, esto es aplicable a las filas 7, 11, 13 y 14. A continuacin, se observa en cada fila los valores que toma cada variable de entrada. Si una variable determinada vale O, se reemplaza mentalmente por su complemento (A't B1, C1, D1). Si la variable vale 1, se deja tal como estaba, es decir, sin complementar (A, B, C, D). En la siguiente tabla se ilustra este paso:

15

7 11 13 14

A 0 1 1 1

B 1 0 1 1
.. B B' B B

e 1 1
0

& 1 1 1
0

-v * 1 1 1 1

7 11 13 14

A A1 A A A

c c c

o
D D D D1

%
1 1 1 1

C1

Seguidamente, se asigna a la salida de cada fila una expresin booleana equivalente a la operacin AND de las variables de entrada representadas de esta forma. En la siguiente tabla se ilustra este paso:

* PL
7 11 13 14 0

;"<**

1 0 1 1 1 1 1

^Bt. jf ^ 1 1 1 1 1 0
0

y^J^tWff?' :
flt$3 *'rtT5

A'BCD AB'CD ABC'D ABCD'

Mintrmino m7 Mintrmino mu Mintrmino m13 Mintrmino mu

Cada una de estas ecuaciones es un mintrmino. por ejemplo, el mintrmino asociado a la fila 13 es: ini3 = ABC'D A partir de estos datos se puede escribir la ecuacin booleana como una suma de mintrminos. En nuestro caso:
Y m? + rn-M+ ma + m-u

Reemplazando

cada

mintrmino

por

su

expresin

booleana

correspondiente, se obtiene la ecuacin solicitada: Y = A'BCD + AB'CD + ABC'D + ABCD1 Esta expresin se denomina SOP (Suma de productos).

16

A este tipo de ecuacin booleana, en la que en cada trmino estn presentes todas las variables de entrada, en su forma normal o en su forma complementada, se la denomina forma estndar o forma cannica disyuntiva. La misma tabla o funcin booleana se puede representar como un producto de sumas o maxtrminps.

Consideremos la misma tabla de verdad de la seccin anterior:

2 3 4 5 6 7 8 9 10 11 12 13 14 15

-*V fj ! #';.;-sjjf k -.y , 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 1 1 0 0 0 1 0 0 0 0 1 0 1 0 0 1 1 0 0 0 1 1 1 1 0 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 1 1 1 1 1 0

Maxtrmino MO Maxtrmino Mi Maxtrmino M2 Maxtrmino Ma Maxtrmino M4 Maxtrmino Ms Maxtrmino M6 Maxtrmino Ma Maxtrmino Mg Maxtrmino Mo Maxtrmino Mi2 Maxtrmino Mi 5

A continuacin se detalla la forma de obtener la ecuacin lgica (funcin lgica) que la describe o sintetiza en forma de producto de maxtrminos o trminos mximos. El primer paso es identificar las filas o combinaciones de entrada que producen como resultado un O a la salida. En nuestro caso, esto es aplicable a las filas O, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 y 15. A continuacin, se observa en cada fila los valores que toma cada variable de entrada. Si una variable determinada vale 1, se reemplaza mentalmente por su complemento (A1, Bf, C1, D'). Si la

17

variable vale O, se deja tal como estaba, es decir, sin negar (A, B, C, D). En la siguiente tabla se ilustra este paso:

2 3 4 5 6 8 9 10 12 15

A 0 0 0 0 0 0 0

B 0 0 0 0

c
0 0

o
0

Y
0 0 0 0 0

1 1 1 1 1

1 1 1 1 1

1 1

1
1

0 0 0 0 0

1 1 1

1
1

0 0 0

0 0 0 0

0 0 0 0 0 0 0

2 3 4 5 6 8 9 10 12 15

A A A A A A A A A' A' A' A1 A'

B B B B
B B' B' B' B B B B' B'

C C

D D
D' D D' D D' D D D' D D D'

C' C'

c c

C'

c c

C'

C'

Y 0 0 0 0 0 0 0 0 0 0 0 0

Seguidamente, se asigna a la salida de cada fila una expresin booleana equivalente a la operacin OR de las variables de entrada representadas de esta forma. En la siguiente tabla se ilustra este paso:

18

A
0

-vp
0 0 0 0

Y^Mo* jtf-m?itf

c
0 0

D
0

M4* M5* M6* M8* M9*

2 3 4 5 6 8 9 10 12 15

0 0 0 0 0 0 0

1 1 1 1

1 1 1

1 1

1
1

0 0 0 0 0

0 0 0

1 1 1

1 1

0 0 0

1 1

0 0

Mi*Mi2*Mi5 A+B+C+D A+B+C+D' A+B+C'+D A+B+C'+D' A+B'+C+D A+B'+C+D' A+B'+C'+D A'+B+C+D A'+B+C+D' A'+B+C'+D A'+B'+C+D A'+B'+C'+D'

Maxtrmno M0 Maxtrmino MI Maxtrmino M2 Maxtrmino M3 Maxtrmino M4 Maxtrmino M5 Maxtrmino Me Maxtrmino M8 Maxtrmino M9 Maxtrmino M-|0 Maxtrmino Mi2 Maxtrmino Mi5

Cada una de estas ecuaciones es un maxtrmino. por ejemplo, el maxtrmino asociado a la fila 12 es: Mi2 = A'+B'+C+D A partir de estos datos se puede escribir la ecuacin booleana como un producto de Maxtrminos. En nuestro caso: Y=M0* Mi* M2* M3* M4* M5* M6* M8* M9* M10* Mi2* Mi5 Reemplazando cada maxtrmino por su expresin booleana

correspondiente, se obtiene la ecuacin solicitada: Y = (A+B+C+D)(A+B+C+D')(A+B+C'+D') (A+B'+C+D) (A+B'+C+D1) (A+B'+C'+D) (A'+B+C+D) (A'+B+C+D1) (A'+B+C'+D) (A'+B'+C+D) (A'+B'+C'+D') A esta expresin tambin se la conoce como una funcin POS (Producto de sumas). A esta forma de la ecuacin booleana tambin se llama forma estndar o forma cannica conjuntiva.

19

Cualquiera de las dos formas cannicas obtenidas para las ecuaciones booleanas resulta demasiado costosa y difcil de implantar, por esta razn es necesario simplificar estas funciones. En la siguiente seccin se detallar cada uno de los pasos que se seguirn para simplificar una ecuacin booleana a una forma ms sencilla para poder implementarla con mayor facilidad.

2 . 1 . 2 TABLA DE VERDAD A PARTIR DE UNA ECUACIN BOOLEANA


Una tabla de verdad sirve para visualizar de mejor manera las salidas que tiene una funcin con todas y cada una de las entradas, la tabla se construye con un nmero de filas igual a 2n; donde n es el nmero de variables de entrada Asi por ejemplo: F<A,B,C>=A*B'*C+A'*OB*C

Esta funcin tiene 3 variables de entrada A, B y C por lo tanto la tabla tendr 8 filas = 23.

Las salidas dependen de cada uno de los trminos de la funcin, es decir: Debido al trmino A*B'*C, cuando las entradas tienen la combinacin 101 tendrn una salida 1, con el trmino A'C indica que cuando las entradas tienen la combinacin 0X1 tendrn una salida 1 y el trmino B*C indica que cuando las entradas tienen la combinacin X11 la salida es un 1. El resto de combinaciones tendrn una salida igual a 0. Estas combinaciones y la tabla resultante se puede observar en la siguiente tabla:

20

ABC 0 0 0 0 0 1 0 10 0 11 1 0 0 1 0 1 1 10

1 11

A*B'*C 0 0 0 0 0 1 0 0

A'*C 0 1 0 1 0 0 0 0

B*C 0 0 0

0 0 0

F<A, B, C,> 0 1 0 1 0

1 1

21

2.2.

MTODOS DE SIMPLIFICACIN.
Para implementar una funcin booieana mediante un diagrama lgico se lo

puede hacer a partir de la funcin obtenida de la tabla de verdad, pero la forma ptima de hacerlo es a partir de una funcin simplificada. El diagrama lgico de una funcin sin simplificar tiene ms elementos que el diagrama lgico de una funcin simplificada. Provocando que sea ms costoso, adems de complejo. Existen 3 mtodos para simplificar una expresin algebraica: Simplificacin algebraica a travs de teoremas o mtodo del Algebra de Boole. Mtodo grfico de Mapas de Karnaugh Mtodo tabular de Quine-McCIuskey 2.2.1 MTODO DEL LGEBRA DE BOOLE.

Dentro del lgebra de Boole se define algunos axiomas y teoremas que pueden ser aplicados a las funciones booleanas para su simplificacin. Los teoremas son los siguientes. 1. - Una variable solo puede tomar 1 de 2 valores: [O, 1] a) A = O cuando A * 1. b) A= 1 cuando A *0. 2. - Si A es la entrada a un inversor su salida es A'.
a) S A = O luego A' = 1

b) S A = 1 luego A' = O 3. -La suma lgica representa una Unin mientras que un producto una Interseccin a) A + B; A U B suma lgica.
0 +0 =0

22

0+1 =1 1+0=1 1 + 1=1


b) A. B; AnB producto lgico 0.0 = 0 0.1 = 0

1.0 = 0 1.1 = 1
4. -Identidad. A +0 =A 5. -Elementos Nulos. A+1 = 1 6. -Idempotencia. A +A =A 7. -Involucin. (A')1 = A. 8. -Complementos. A + A' = 1 9. -Ley Conmutativa
A+B = B+A A.B = B.A

A.1=A

A.0 = 0

A.A = A

A.AJ = O

10. -Ley Asociativa. (A + B) + C = A + (B + C) 11.-Ley Distributiva. A.B + A.C = A (B + C) A + B.C = (A + B)(A + C). (A.B). C = A. (B.C)

23
12.-Cobertura
A + A.B = A A. (A+B) = A

13.-Combinacin.
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)

15. -TEOREMA DE DeMorgan A+B=AB


B = + B A + B + C+ + N = A . B. C N

A. B. C

N = A + B + C+.... + N

16. -TEOREMA DE SHANNON. (Expansin).


F(X,X2, ,Xn) = XiF(1,X2,X3, ,Xn)-0<iF(0,X2,X3, -Xn)

F(X1X2,

,Xn)= [Xi+F(0,X2,X3,

,Xn)].[Xi+F(1,X2,X3,

Xn)]

La primera expresin sirve para la suma de productos, mientras que la segunda expresin sirve para producto de sumas. As por ejemplo:
F = xy + x'z + yz.

F = xy + x'z +yz(x+x'). = xy + x'z + xyz + x'yz = (xy+xyz) + (x'z + x'yz) = xy(1+z) + x'z(1+y) = xy + x'z

Teorema del complemento. Distributiva. Asociativa. Distributiva. Elementos nulos.

24

Si comparamos la funcin original tiene 3 trminos mientras que la funcin simplificada tiene nicamente 2 trminos, lo cual implica menos compuertas. Cuando se utiliza este mtodo no existe un solo camino sino que depende de la habilidad de la persona que est simplificando para aplicar las propiedades. 2.2.2 MTODO DEL MAPA DE KARNAUGH. El proceso del lgebra de Boole se relaciona directamente con la complejidad de la funcin booleana, este mtodo no tiene reglas especficas para predecir cada paso a seguir. El mapa de Karnaugh es un mtodo simple y directo para simplificar la funcin booleana, y que puede ser tratado no solamente en forma de una tabla de verdad, sino como una extensin del diagrama de Venn. Este mtodo fue propuesto por Veitch y modificado por Karnaugh, por esta razn se lo conoce como el mtodo de Karnaugh o de Veitch. El mapa de Karnaugh es una tabla en la que cada cuadrado representa un mintrmino. Como cualquier funcin de Boole puede ser expresada como una suma de mintrminos, se puede concluir que dicha funcin se reconoce grficamente en un mapa a partir del rea encerrada por aquellos cuadros en los que estn los "1" como parte de la funcin, de hecho, el mapa representa un diagrama visual de todas fas formas posibles en que puede ser expresada una funcin en la forma normalizada; al reconocer varios patrones, el usuario puede derivar expresiones algebraicas alternas para la misma funcin de las cuales se puede escoger la ms simple. Se asume que la expresin algebraica ms simple es aquella en la que la suma de productos o producto de sumas que tiene el mnimo nmero de literales. Un mapa de Karnaugh o mapa K es una tabla de verdad modificada que se utiliza para simplificar ecuaciones Booleanas y disear circuitos lgicos de manera sistemtica. Los mapas K aprovechan la capacidad del cerebro humano

25 de trabajar mejor con patrones grficos que con ecuaciones y otras formas de expresin analtica. Externamente un mapa de Karnaugh consiste de una serie de cuadrados, cada uno de los cuales representa una lnea de la tabla de verdad. Puesto que la tabla de verdad de una funcin de N variables posee 2N filas, el mapa K correspondiente debe poseer tambin 2N cuadrados. Cada cuadrado alberga un O o un 1, dependiendo del valor que toma la funcin en cada fila. Este mtodo se basa en dos teoremas bsicos del Algebra de Boole, estos son los siguientes. ) i) XY + X'Y = Y. X + X'Y = X + Y.

A este mtodo tambin se denomina mapa K y se puede trabajar a partir de mintrminos y o maxtrminos. El mapa de Karnaugh es un mtodo grfico que se utiliza para simplificar una ecuacin lgica, para convertir una tabla de verdad a su circuito lgico correspondiente en un proceso simple y ordenado. Este mtodo se puede aplicar para cualquier cantidad de entradas aunque su utilidad prctica se limita a un mximo de seis variables de entrada. Formato del mapa de Karnaugh. Cada casilla del mapa K corresponde a una salida de cada combinacin de la tabla de verdad, es decir contiene la misma informacin que en la tabla de verdad pero en diferente formato. Por ejemplo:

26
Para 2 variable -> 22 = 4 filas
A 0 0 1 1 B 0 1 0 X X0 Xi X2 X3

En el mapa existen 22 = 4 cuadrados.

B'

Para tres variables. 23 = 8 filas.


B 0 0 1 1 0 0 1 1

A 0 0 0 0 1 1 1 1

c
0

1 1 1 1

0 0 0

X Xo Xi X2 X3
X4

X5 X6 X7

En el mapa 23 = 8 cuadrados.
C'

27

Para cuatro variables. -> 24 = 16 filas.

A 0 0 0 0 0 0 0 0

B D 0 0 0 0 0 1 0 0 0 1 1 1 0 0 1 0 1 1 1 0

X Xo XT X2 X3
X4

1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1

1 1 1

X5 X6 X7 X8 X9 Xio Xn
Xi2 Xl3 Xu Xis

En el mapa 24 = 16 cuadrados. C'D' C'D CD CD' Xi X3 X2 X0 X4 X5 X7 X6


X-I2 Xl3 Xis Xl4

A'B' A'B AB AB'

X8

X9

Xn

Xio

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 rengln superior (X0, Xi, Xa, Xa) se consideran adyacentes a los cuadrados del rengln 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, Para que los cuadrados adyacentes difieran en una sola variable el marcado de arriba hacia abajo debe estar en el orden A'B', A'B, AB y AB', de la misma forma de izquierda a la derecha en la parte superior de la tabla. Por ejemplo: Para tres variables:
A 0 0 0 0 1 1 1 1 B 0 0 1 1 0 0 1 1

c
0

1 1 0 1
1
0

1 1

0 0 0

De acuerdo a la tabla de verdad la funcin ser. X = A'B'C1 + A'B'C + A'BC1 + ABC1. La misma informacin en el mapa de Karnaugh es:

29
Para cuatro variables:
A 0 0 0 0 0 0 0 0 B 0 0 0 0 1 1 1 1 0 0 0 0

D X 0 0 0 0 1 0 1 0 1

1 1 1 1 1
1 1
0 0 0 0

0 0 0 1 1 0 0 0 0 1 1 0

1
1

1 1
1 1 1 1

1 0 0 1 0 1 1 1 0 1 1 1

0 0 0 0 0

La funcin correspondiente para esta tabla es: X = A'B'CD' + A'B'CD + AB'C'D' + AB'CD'. Representando en el mapa de Karnaugh.
C'D' 0 0 0 1 C'D 0 0 0 0 CD 1 0 0 0 CD1 1 0 0 1

A'B' A'B AB AB'

Agrupamiento.-

La expresin de salida X se puede simplificar

adecuadamente combinando los cuadros en el mapa K que contengan 1. El proceso para combinar estos unos se denomina agrupamiento. Agrupamiento de grupos de dos.- Es el agrupamiento que se realiza entre un par de cuadros adyacentes verticalmente u horizontalmente que contengan 1 de tal manera que se logra eliminar la variable que est en forma

30

normal en el un cuadrado, y complementada en el otro cuadrado. "El agrupamiento de un par de unos adyacentes en un mapa K elimina la variable que aparece en forma complementada y no complementada". A este grupo se denomina pares. Agrupamiento de grupos de cuatro.A este grupo se denomina

cudruples y se forma con cuatro unos que estn en cuadrados adyacentes. Cuando se forman grupos cudruples se eliminan dos variables las cuales estn en forma normal y en forma complementada. Agrupamiento de grupos de ocho.- Estos grupos estn formados por ocho unos que se encuentran en cuadrados adyacentes, a este grupo se denomina octeto, cuando se forman grupos de 8 se logran eliminar las 3 variables que se encuentran complementadas y no complementadas. Proceso completo de simplificacin.- Para simplificar una funcin booleana se debe tomar en cuenta que mientras ms grande es el agrupamiento ms cantidad de variables se eliminan as, si el grupo es de 2 unos entonces se elimina una variable, si el grupo es de 4 unos se eliminan 2 variables, si es un octeto se eliminan 3 variables, etc... El proceso es el siguiente. 1. Construccin 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 ningn otro cuadrado que tenga un "1". 3. Identificar los cuadrados que pueden combinarse con otro de una sola manera. Se seala estos grupos de dos cuadrados. Los cuadrados que pueden combinarse con grupos de dos ms 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 estn ya incluidos en grupos de dos, sealarlos. De nuevo, se omiten los cuadrados que pueden combinarse con grupos de cuatro, ms de una manera. 5. Agrupar cualquier octeto aunque algunos de los cuadrados que tiene unos ya estn agrupados. 6. Bajo el mismo criterio hacer grupos de 2' cuadrados, donde i = O, 1, 2, 3,... 7. Aplicando el procedimiento anterior, si an quedan cuadrados sin agrupar, pueden combinarse con otros, ya agrupados o no, arbitrariamente, tratando de incluirlos en el menor nmero de grupos posibles. 8. Se escribe la suma OR de todos los trminos generados por cada agrupamiento. A continuacin un ejemplo para entender mejor estos pasos:
A 0 0 0 0 0 0 0 0 B 0 0 0 0 1 1 1 1 0 0 0 0

D X 0 0 0 0 1 0

1 0 1 1

1 1 1 1 1 1

0 0 0 1 1 0

0 0 0

1 1 1 1 1 1 1 1

1 1

1 1 1 0 0 1 0 1 1 1 0 1 1 1

0 0 0 1 1 0

0 0 0

0 0

32
Construimos el mapa K.
C'D' 0 0 0 0 C'D 0 CD 0 CQ'

A'B' A'B AB AB'

(U
0 0 0

^
0

^_ JJ\y
^

El cuadrado X2 es el nico que contiene un 1 que no es adyacente a ningn otro cuadrado que contiene 1. Est marcado con rojo. De este agrupamiento se obtiene el trmino A'B'CD1, no se elimina ninguna variable ya que es un uno aislado. El cuadrado Xn es adyacente solo al cuadrado X15, entre estos dos se forma un par, est marcado con color verde. De este agrupamiento se forma el trmino ACD ya que se elimina B. Los cuadrados X5, X 7j Xi3 y Xis forman un cudruple, estn encerrados con azul, de este agrupamiento se obtiene el trmino BD y se eliminan las variables A

yC.
Note que el cuadrado X15 se repite tanto en el par como en el cudruple. Todos los cuadrados que contienen unos ya han sido agrupados. Se obtiene la funcin simplificada como suma lgica de los trminos obtenidos. X=A'B'CD'+ACD

33

2.2.3

MTODO QUINE-McCLSKEY.

2.2.3.1

Representacin cbica de las funciones de Boole.

Es conveniente introducir una nueva representacin de las funciones booleanas la cual proporcionar una terminologa conveniente para el mtodo de Quine-McCIuskey. Una variable de conmutacin que puede asumir solo dos valores, se puede representar mediante dos puntos en los extremos de un solo segmento.

0.

Fig 2.1: Representacin de una variable de conmutacin. Los cuatro valores posibles de dos variables de conmutacin se pueden representar mediante los cuatro vrtices de un cuadrado. Con tres variables de conmutacin existen 8 combinaciones representacin grfica lo podemos hacer en los vrtices de un cubo. 001 A 101 B
3-* _ **

y la

o ooox-"
) B 00 B A 10
B B

I I

ior>^
111

1
1 01 A 11

oro o.

A A

110

ff ^c

Fig 2.2: Representacin de 2 y 3 variables de conmutacin

34

La extensin a ms de tres variables, se requieren figuras de ms de tres dimensiones, es geomtricamente difcil, pero bastante sencilla desde el punto de vista conceptual. En general las diferentes combinaciones posibles de n variables se representan como puntos en el espacio - n, y todos los 2n puntos posibles forman los vrtices de un cubo - n o un hipercubo de Boole. Para representar una funcin determinada se dibuja el hipercubo, se marcan con un punto los vrtices que corresponden a una combinacin que produce un "1" en fa funcin. La representacin de funciones booleanas en el cubo - n se realiza estableciendo una correspondencia uno a uno entre los mintrminos de n variables y los vrtices del cubo n. de la siguiente manera. En un cubo - 3, el vrtice 000 corresponde a mo, el vrtice 001 es mi, etc. La representacin cbica de una funcin de n variables consta, entonces, del conjunto de vrtices de un cubo - n, correspondientes a los mintrminos de la funcin. Por ejemplo.

F(A,B,C) = Zm<0, 2, 3, 7).

Esta funcin se representa en el cubo - 3, como se indica en la siguiente figura.

00 m

r I m3 j

00. m

oxo 11 m7
010 m2

I
m3 011
01X

0111 _1

m7

010 m2

Cubos - O Cubos - 1 Fig. 2.3: Representacin de un cubo-3

35 Los vrtices correspondientes a mO, m2, m3, y m7 se indican por medio de puntos negro. Estos vrtices se denominan cubos - O de la funcin. Dos cubos - O forman un cubo - 1, si difieren solo en una coordenada en el ejemplo anterior se tiene tres cubos - 1, que estn marcados en rojo, (01X, 0X0, X11), los cubos - 1 se designan colocando una "X" en la coordenada que tienen diferentes valores. Un conjunto de cuatro cubos O, cuyos valores de coordenada son iguales en todas las variables excepto en dos, forma un cubo - 2 que se representa grficamente como un plano sombreado.

Cubos - 2
Fig. 2.4: Representacin de un cubo - 2 Cuando todos los vrtices de un cubo - k est en el conjunto de vrtices que componen un cubo - k mayor, se dice que el cubo ms pequeo est contenido en/o cubierto por el cubo mayor. Resumiendo, un cubo - O se representa con un punto, un cubo - 1 se representa con un segmento, un cubo - 2 con un plano, un cubo 3 con un volumen, para un cubo - k en espacios - n mayores que 4 no hay representacin geomtrica, pero el principio de agrupacin de productos fundamentales es el mismo.

36
Entre la representacin cbica y el mapa de Kamaugh existe una correspondencia, Los cubos - O corresponden a los cuadrados del mapa K, los cubos - 1 corresponden a los pares de cuadrados adyacentes, los cubos - 2 corresponden a los cudruples de cuatro cuadrados adyacentes, etc. 2.2.3.2 Obtencin de los implicantes primos.

Definicin. - "Un implicante primo es cualquier cubo de una funcin que no est totalmente contenido en otro cubo mayor de dicha funcin". El mtodo ingeniosamente de Quine-McCIuskey es un procedimiento exhaustiva de organizado todas las

para efectuar

una bsqueda

combinaciones posibles de cubos - O en cubos mayores y, luego, seleccionar la combinacin mnima de cubos requerida para realizar la funcin. El punto de partida de este mtodo es la lista de mintrminos de la funcin. Ejemplo 1. f(A, B, C, D) = Im(0, 2, 3, 6, 7, 8, 9, 10, 13) MINTRMINO COMBINACIONES A B C D 0 0 0 0 0 0 0 0 1 1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0

NUMERO DE "UNOS" FUNCIN


0

1 1

1 1 1 1

2 1 2 2 3 1 2 2 3 2 3 3 4

1 0 1 1 0 0

1 1 1 1 1
0 0

0 0

37
En la tabla de productos fundamentales de la funcin, se dispone de la representacin binaria de las combinaciones de las variables de entrada, ya que se ha definido que se consideran lgicamente adyacentes dos trminos cuyas combinaciones de variables son idnticas excepto en una sola de ellas, se halla que una de las condiciones es que el nmero de "UNOS" en las representaciones binarias difieran solo en una unidad. Se separan nicamente los mintrminos que tienen un "UNO" asignado a la funcin, y se los ordena de acuerdo al nmero de "UNOS" existentes en las combinaciones de entrada, se separan los mintrminos en grupos con el mismo nmero de unos por medio de las lineas horizontales. "Este agolpamiento de los mintrminos se hace para reducir la cantidad de comparaciones que se deben efectuar para determinar los cubos UNO".
COMBINACIN A B C D mo 0 0 0 0 nri2 0 0 1 0 m8 1 0 0 0 1113 0 0 1 1 m6 0 1 1 0 iTlg 1 0 0 1 mo 1 0 1 0 m7 0 1 1 1 mis 1 1 0 1

#de "UNOS"
0

V V V V V V V V V

1
2

Se compara las combinaciones de cada grupo con las combinaciones del grupo siguiente, si existe una variable diferente entre las dos combinaciones que se estn comparando entonces se reemplaza como una sola poniendo en el lugar que est la variable diferente con una X anotando el mintrmino que se combina. A los trminos originales que se combinan se coloca una marca, por ejemplo "V". Tambin se debe anotar los nmeros enteros correspondientes a los mintrminos que se combinaron. En el caso de nuestro ejemplo mo se combina con m2 para formar el cubo - 1 (XOOO) esta combinacin es equivalente a la operacin algebraica A'B'C'D' + A'B'CD' = A'B'D'(C + CJ) = A'B'D'.

38

El mintrmino m0 se combina tambin con ms para formar el cubo - 1 (XOOO). Esto completa la comparacin entre los mintrminos de los dos primeros grupos, de manera que se traza una lnea por debajo de los cubos - 1 resultantes. A continuacin, se comparan en la misma forma los mintrminos del segundo y tercer grupos. Esta comparacin produce cinco cubos - 1 ms, formados de rr}2 y ms, ms y mg, etc. Se traza una recta debajo de estos cinco cubos 1 para indicar la terminacin de las comparaciones entre el segundo y tercer grupos. Cada mintrmino de un grupo se debe comparar con cada mintrmino del otro grupo, incluso si cualquiera o ambos ya han sido marcados, y han formado un cubo - 1 , se debe encontrar cada cubo - 1 . Este proceso de comparacin se repite entre los grupos sucesivos hasta que se agote la lista de mintrminos.

Cubo 1
00X0 XOOO 2,3 001 X 2,6 0X10 2, 10 X010 8,9 100X 8, 10 10X0 3,7 0X11 6,7 01 1X 9, 13 1X01

0,2 0,8

V V V V V
V

V V

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 slo 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. Una explicacin algebraica de esta combinacin es la siguiente.

39

mO + m2 + m8 + m10 = A'B'C'D1 + A'B'CD' + AB'C'D' + AB'CD' = A'B'D'(C + C') + AB'D'(C+ C1) = A'B'D' + AB'D' =B'D'(A + A) =B'D'. Al comparar el cubo - 1 (0,8) con el cubo -1 (2,10) tambin se obtiene el cubo - 2 (O, 2, 8, 10) (XOXO), el cual ya existe en la tabla de cubos 2. Luego de comparar todos y cada uno de los cubos - 1 se obtiene la siguiente tabla.

Cubo -2 0, 2, 8, 10 XOXO 2, 3, 6, 7 OX1X

Este proceso se sigue hasta cuando ya no existan elementos que se puedan combinar siendo esta tabla la de los cubos de mayor orden. Existen combinaciones que no estn marcadas razn por la cual no estn en cubos de mayor orden, a estas combinaciones se denominan implicantes primos. Un mintrmino que no se combina para formar cubos de mayor orden tambin se debe considerar como parte de los implicantes primos. Para el ejemplo anterior, la tabla de cubos - 2 tiene elementos que no se pueden combinar entre s para formar cubos - 3 es decir que todos estos son los implicantes primos, tambin en la tabla de los cubos - 1 existe algunas combinaciones que no se combinaron para formar cubos - 2, estos trminos tambin forman parte de los implicantes primos.

40

IMPLICANTES PRIMOS

1 1 X O

O X O X

O 0 X 1

X 1 O X

2.2.3.3

Seleccin de un conjunto ptimo de implicantes primos.

No todos los trminos de la tabla de implicantes primos forman parte de la solucin ya que pueden tener varias soluciones y se debe escoger la que contenga menos mintrminos. Para lograr encontrar los trminos adecuados se hace una tabla en la que en la fila se encuentran los trminos originales y en la columna estarn los implicantes primos. En el cruce de una fila y una columna se coloca una marca si ese termino est contenido en el implicante primo. Para el ejemplo anterior la tabla ser:
3 7

0
* *
*

9
T

1 0 0 X 1 X 0 1 X 0 X 0-

10

13
\

V V

n y 1 y-

y v

J ^1 '

,/
1

J y
V

J V

V V V V

Basndose en esta tabla se encuentra los implicantes primos esenciales de la siguiente manera. Buscamos en cada una de las columnas dnde se encuentra una sola marca.

41 ii) El implicante primo que se encuentra en esta fila se considera como un implicante primo esencial. iii) iv) Toda la fila se elimina para indicar que ya ha sido tomada en cuenta Las columnas en las que se encuentran las seales eliminadas tambin se eliminan. v) Se forma la tabla de implicantes primos esenciales. IMPLICANTES PRIMOS ESENCIALES
X O X O O X 1 X

1 X 0 1

vi)

A continuacin se escoge una de las seales en las columnas en las que se encuentran 2 seales y se eliminan las columnas y filas con el mismo criterio anterior. Pero en nuestro ejemplo no existen columnas sobrantes con dos o ms marcas, por esta razn la solucin es nica.

La solucin entonces es: XOXO -> B'D' OX1X -^ A'C 1X01 ->AC'D. F(A, B, C, D) = A'C + AC'D + B'D'. Ejemplo 2. F(A, B, C, D, E) = Sml, 2, 3, 5, 9, 10, 11, 18, 19, 20, 21, 23, 25, 26, 27).

42

TABLA DE COMBINACIONES. Mintr- Forma Binaria No. del's minos A B C D E mi 0 0 0 0 1 1


Tf\2

ma ms m9 mo mu mis mi9 m2o m2i m23 m25 m2e m27

0 0 0 0 0 0 1

0 0 0 1 1 1 0

0 0 1 0 0 0 0

1 1 0 0 1 1 1

0 1 1 1 0 1 0

1 0 0 1 1
1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 0 0 1 1 1

1 1 0 1 0
1 1 0 1 1

1 2 2 2 2 3 2 3 2 3 4 3 3 4

V V V V V V V V V V V V V V V

CUBOS - 0 1 0000 2 0 0 0 1 3 0 0 0 1 5 0 0 1 0 9 0 1 0 0 10 0 1 0 1 18 1 0 0 1 20 1 0 1 0 11 0 1 0 1 19 1 0 0 1 21 1 0 1 0 25 1 1 0 0 26 1 1 0 1 23 1 0 1 1 27 1 1 0 1

No. 1 's
1 0 1 1 1 0 0 0 1 1 1 1 0 1 1

43

V V V V V V V V V V V

v v
V V V

CUBOS - 1 000X1 1,3 1,5 00X01 0X001 1,9 0001 X 2,3 2, 10 0X010 2, 18 X0010 3,11 0X011 3, 19 X0011 5,21 X0101 9,11 010X1 X1001 9,25 10, 11 0101X 10,26 X1010 18, 19 1001X 18,26 1X010 20,21 1010X 11,27 X1011 19,23 10X11 19,27 1X011 21,23 101X1 25,27 110X1 26,27 1101X

V V V V V V

Cubos - 2 0X0X1 1,3,9,11 2,3, 10, 11 OX01X 2,3, 18, 19 X001X 2, 10, 18,26 XX010 3, 11, 19,27 9, 11,25,27 10, 11,26,27 18, 19,26,27 XX011 X10X1 X101X 1X01X

Cubos - 3 2, 3, 10, 11, 18, 19, 26, 27

XX01X

IMPLICANTES PRIMOS 1,5 00X01 5,21 X0101 20,21 1010X 10X11 19,23 101X1 21,23 1,3,9, 11 0X0X1 9, 11,25,27 X10X1 2,3, 10, 11, 18. 19,26,27 XX01X

44

TABLA DE REDUCCIN DE LOS IMPLICANTES PRIMOS.

2
00X01 V X0101 1010X" 10X11 101X1 0X0X1 V
- J ,,

10

11

18

19

20

21

23

25

26

27

V V
" ^|
_/
V

"N

V ^ V V V
J
_/
1

\l
tl

X10X1-

vYrn Y /v/xU ly\

-/ f

^/ f J V
-\l

/ **

_/

V j V

IMPLICANTES PRIMOS ESCENCIALES

X10X1 - BC'E

XX01X ^ C'D. Una vez que tenemos los implicantes primos esenciales, ya tenemos una parte de fa funcin simplificada ahora tendremos que ver los implicantes primos secundarios que tienen menor costo, es decir, que tienen menos variables en el trmino. Teorema: 'Sean a y b dos trminos implicantes primos de una tabla reducida de tal manera que el costo de a sea menor o igual al costo de b. Entonces, si a domina a b o si a y b son intercambiables existe una suma mnima de productos que no incluye a b. Utilizamos los implicantes que no se han tomado en cuenta como implicantes primos esenciales, con las columnas que no han sido eliminadas de la tabla de simplificacin de los implicantes primos para buscar los implicantes primos secundarios.

45

1
00X01

5 23

V V

X0101 10X11 101X1


0X0X1

V V
V
V

El implicante primo 00X01 cubre el mintrmino mi y el mintrmino m5 mientras que el implicante primo X0101 cubre nicamente al mintrmino m5 entre estos dos el que tiene menos costo es el 00X01, luego el implicante 10X11 y 101X1 ambos cubren nicamente al mintrmino m2s tomamos cualquiera de los

dos

1
*

00X01 J i 10X11 0X0X1 - V

5 i V

23
V

IMPLICANTES PRIMOS SECUNDARIOS 00X01 -> A'B'D'E 10X11 -* AB'DE.

Como se puede observar existen implicantes primos esenciales y secundarios, la funcin resultante simplificada es la operacin OR de todos estos implicantes.

F(A, B, C, D, E) = AB'CD' + BC'E + C'D + A'B'D'E + AB'DE.

46
Ejemplo 3. F(A, B,C) = Sm(1,4 ( 6,7).

MINTRMINO COMBINACIONES NUMERO DE "1S" FUNCIN A B C 0 0 0 0 0 0 1 0 0 1 1 1 2 0 1 0 1 0 3 0 1 1 2 0 4 1 0 0 1 1 1 0 1 5 2 0 6 1 1 0 1 2


7

1 1

Tabla de cubos O COMBINACIN A B C 0 0 1 1 0 0 1 1 0 1 1 1 nmero de "UNOS" 1


2 3 M

mi rru m6 m7

V V V

Tabla de cubos - 1 Combinaciones


4, 6 6, 7 1

Cubos 1
1 X 1 0 X

IMPLICANTES PRIMOS
0 0

1 X 1 1

1
0 X

47

TABLA DE IMPLICANTES

IMPLICANTES PRIMOS ESENCIALES 0 1 1 O X 1 1 O X

FUNCIN RESULTANTE

En el ejemplo anterior solamente existen implicantes primos esenciales y no existen implicantes primos secundarios por esta razn existe una nica solucin.

2.2.4

FUNCIONES INCOMPLETAMENTE ESPECIFICADAS.

Recordemos que una funcin de conmutacin es especificada en la tabla de verdad en la que se indica una lista de valores para las 2n combinaciones posibles para una funcin de n variables. Los diseos consisten en resolver un problema o una descripcin que por lo general es verbal de un trabajo lgico traduciendo en una tabla de verdad, para luego buscar una funcin especfica que satisfaga esta tabla de verdad y un costo mnimo. En algunas ocasiones el circuito que se disea es un sistema en el que ciertas combinaciones no influyen en el funcionamiento del sistema, es decir que no importa para la salida de este sistema cuando estas combinaciones de

48
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 disear.

Cuando sucede cualquiera de las situaciones antes descritas se dice que la funcin es no especificada. Este tipo de salidas se indica en la funcin como una salida "X" en lugar de poner un "O" o un "1". Estas condiciones se las conoce como opcionales y se dice que las funciones estn incompletamente especificadas. La realizacin de una funcin incompletamente especificada es cualquier circuito que produce las mismas salidas para todas las combinaciones de entrada para las cuales se especifica la salida Es conveniente tener una forma algebraica compacta para indicar una funcin incompletamente especificada. Para lo cual se usa la suma de los mintrminos mas una suma de trminos no especificados. Ejemplo una funcin no especificada es:

F(A, B, C) = Im<4, 5) + d(0, 6, 7). Esta funcin indica que los mintrminos m4 y m5 tienen como salida "1" mientras que los mintrminos mo, me y m7 tienen como salida no especificada. Representando esto en la tabla de verdad queda. B 0 0 1 1 0 0

A 0 0 0 0 1 1 1 1

C 0

F(A, B, C)
X 0 0 0

0 0

1 1 0 1 1

1 1

X X

Para simplificar las funciones incompletamente especificadas es ms practico usar el mtodo del mapa de Karnaugh ya que en este mapa se toma a

49 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 funcin ms simplificada posible.

En este caso los mintrmino me y m? se tomaron como "1" mientras que el mintrmino m0 se le tomo como riO" ya que con estas consideraciones se obtienen un grupo de ms cuadros es decir la mnima simplificacin. F(A,B)=A 2.2.5 COMPARACIN DE LOS MTODOS DE SIMPLIFICACIN. El mtodo del lgebra de Boole es complicado cuando se tienen funciones con muchas variables de entrada mientras que el mtodo de mapa de Karnaugh es un mtodo directo y simple sin importar la cantidad de mintrminos. En el mtodo del lgebra de Boole se necesita que la persona que est simplificando la funcin tenga habilidad para aplicar los axiomas apropiados ya que no existe una regla que especifique cual axioma se debe aplicar con certeza; mientras que los mtodos tanto del mapa de Karnaugh como el mtodo de Quine-McCIuskey son mtodos mecnicos y con proceso fijo lo cual se puede decir con precisin cual mtodo seguir en el siguiente paso. El mtodo del mapa Karnaugh es un mtodo muy rpido, mientras el mtodo de Quine-McCIuskey es ms elaborado por lo tanto ms largo.

50

Cuando existen ms de cuatro variables el mtodo del mapa de Karnaugh es dudoso su seguridad mientras que el mtodo de Quine-McCIuskey es seguro y confiable. Cuando son cuatro variables o menos el mtodo del mapa de Karnaugh es mucho ms confiable ya que el mtodo de Quine-McCIuskey es ms largo. El mtodo del mapa de Karnaugh no es un iterativo lo cual dificulta la posibilidad de implementar un programa computacional, mientras que el mtodo de Quine-McCIuskey utiliza una tcnica iterativa lo cual facilita la Implementacin de un programa computacional para su uso y as lograr simplificar funciones de muchas variables de entrada.

51

23

IMPLEMENTACION DE LAS FUNCIONES BOOLEANAS SIMPLIFICADAS.


Una vez simplificada la ecuacin correspondiente a la funcin obtenida

para resolver el problema planteado, se debe implementarlo objetivo y realice el trabajo planteado en el problema.

para su

funcionamiento, es decir construir el hardware necesario para que cumpla el

Para construir este hardware se utilizan las compuertas lgicas relacionas con cada una de las operaciones existentes en la funcin simplificada. En el primer ejemplo se tiene. Y = A'C + AC'D + B'D'. En esta expresin observamos que tanto las entradas A, B, C, y D estn complementadas es decir que se necesitan pasar por compuertas NOT para obtener A', B1, C1 y D'. Para obtener el primer trmino A'C es necesario las salidas de A' y C ingresarlas por una compuerta AND de dos entradas, entonces a la salida de la compuerta AND se obtendr el valor correspondiente a la expresin A'C. De la misma manera obtendremos el valor correspondiente al trmino AC'D para lo cual la variable A, la salida de C' y la variable D en forma directa se ingresan a una compuerta AND de tres entradas, o a dos compuertas AND de 2 entradas, y a la salida de cualquiera de estas compuertas se obtendr AC'D. Para obtener B'D' igualmente en una compuerta AND se ingresa la salida de B1 y la salida de D' en forma directa y se obtiene el valor correspondiente de B'D'.

52

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.

Todo esto se resume

en el siguiente

grfico

del

esquemtico

correspondiente al circuito de la funcin dada.

n
>BU-I

i'C

Y=A1C+AC'D+B'D'

Jo.B'D'

Fig. 2.5: Circuito Esquemtico de la funcin Simplificada

Para implementar este esquemtico se necesita los siguientes chips: Un chip 7404 el cual contiene 6 compuertas NOT. Un chip 7408 el cual contiene 4 compuertas AND. Un chip 7432 el cual contiene 4 compuertas OR.

Como se puede observar nicamente con tres circuitos integrados se puede construir el sistema planteado con la funcin booleana del ejemplo.

53

CAPITULO 3 DISEO DEL PROGRAMA COMPUTACIONAL PARA SIMPLIFICAR FUNCIONES BOOLEANAS.


3.1. INTRODUCCIN.
Para simplificar las funciones booleanas utilizando un computador, es necesario programar el proceso de simplificacin paso a paso, en un lenguaje que permita presentar una interfaz grfica, amigable, llamativa y fcil de usar, esto permitir entender el proceso de Simplificacin de Quine-McKIusky. El programa que se disear tendr una seccin terica en la que se explica todo el proceso de simplificacin de funciones booleanas utilizando ei mtodo de Quine-McKIusky paso a paso. Existe otra seccin en la que se presenta un tutorial de cmo utilizar el programa de simplificacin explicando cada una de las partes y objetos existentes en este programa diseado. La tercera seccin de este software, es un programa que sirve para simplificar funciones booleanas de hasta 10 entradas, el programa realiza el proceso de simplificacin utilizando el mtodo de Quine-McKIusky paso a paso presentando cada uno de los cubos hasta obtener los implicantes primos, luego indica la tabla de simplificacin o de seleccin de los implicantes primos esenciales, a continuacin realiza una optimizacin de los implicantes primos secundarios de menor costo, y por ultimo presenta la funcin totalmente simplificada. Este programa tambin permite guardar la tabla de combinaciones para que sea utilizada en otro momento.

54

El ingreso de los datos se los puede hacer directamente en la tabla de combinaciones o por medio de un editor de mintrminos. El software diseado funciona en cualquier computador que tenga el sistema operativo Windows 95 o superior. El desarrollo de este software se lo hace utilizando el lenguaje de programacin Visual Basic 6.0 ya que este lenguaje permite programar cualquier aplicacin bajo Windows. A continuacin se hace una descripcin de los ms importantes objetos de Visual Basic usados para realizar la aplicacin descrita anteriormente. 3.1.1. BREVE DESCRIPCIN DEL USO DE FORMULARIOS DE VISUAL BASIC. Un formulario en Visual Basic es un objeto en el que se presenta toda la informacin, en este objeto se pone los controles los cuadros de texto para el ingreso de datos, grficos, listas de datos, comandos, tablas etc.

Fig. 3.1: Formulario usado en VisualBasic.

55

Cuando se ejecuta el programa muestra nicamente el formulario que est definido como formulario inicial, para mostrar los dems formularios hay que escribir el cdigo respectivo. Un formulario al igual que todos los objetos de Visual Basic responden a eventos que se generan durante la ejecucin del programa. Hay cuatro mtodos para trabajar con los formularios. Show.- Como su nombre indica, el mtodo Show muestra el formulario en la pantalla, y lo pasa al primer plano del escritorio si est cubierto por otro formulario. Para ello, cuando use el mtodo Show, Visual Basic comprueba primero que el formulario est cargado en la memoria, si no lo est, lo carga. La sintaxis bsica de mtodo Show es /VombreFomru/aro.Show Load.- La palabra Load carga el formulario en la memoria pero no lo presenta. Visual Basic carga tambin el formulario en la memoria siempre que se haga referencia a sus propiedades o controles en el cdigo. Por esto, la razn principal para cargar un formulario antes de mostrarlo es disminuir el tiempo de respuesta, a cambio se emplea ms memoria, ya que Visual Basic tiene que reservar memoria suficiente para el formulario. La sintaxis es Load NombreFormularo. Cuando Visual Basic carga un formulario, restaura en todas las propiedades del mismo los valores definidos inicialmente al disearlo, y luego llama al procedimiento de evento Form_Load. Hide.- La palabra Hide retira el formulario de la pantalla, pero no lo descarga de la memoria, los controles no estn af alcance del usuario, pero puede seguir haciendo referencia a ellos en el cdigo. Los valores de fas variables al nivel de formulario no desaparecen, igual que al cargar el formulario, la ocultacin

56

del formulario aumenta la velocidad si va a necesitarlo de nuevo, pero a cambio de seguir usando la memoria para guardarlo. La sintaxis es NombreFormulario. Hide Unload.- Esta palabra borra el formulario de la memoria es decir tiene el mismo efecto que pulsar el botn de salida o pulsar dos veces en el cuadro de control en la parte izquierda de la barra de titulo, se pierde toda la informacin contenida en sus variables al nivel de formulario. La sintaxis es Unload NombreFormulario Cuando se carga, descarga y vuelve a cargar un formulario, siempre activar el evento Form_Load, pero la nica llamada al mtodo Load que activa el evento Initialize es la primera. 3.1.2. CONTROLES DE VISUAL BASIC Antes de empezar a conocer los controles bsicos veamos cuales son sus caractersticas generales: Propiedades.- Todos los controles disponen de una serie de propiedades las cuales se puede cambiar al incluirlos en nuestras aplicaciones; ejemplos de propiedades son el color, el tipo de letra, el nombre, el texto, etc... Mtodos.- Son procedimientos asociados a los controles, es decir, rutinas ya establecidas que podemos invocar desde nuestras aplicaciones para que se realice alguna operacin sobre el control. Eventos.- Son acciones que pueden ser motivadas por el propio usuario o por mismo sistema operativo. Ejemplos pueden ser el movimiento del ratn o hacer click sobre su botn. En Visual Basic se puede decir que se utiliza la programacin orientada a eventos, lo cual es una de las diferencias ms importantes respecto a la programacin lineal de MS DOS. No necesitamos

57

detectar cuando se ha producido un evento determinado, Windows lo detecta automticamente. Los eventos ya estn definidos, son bastantes y cada control cuenta con los suyos propios, aunque son muy parecidos, lo nico que se tiene que hacer es asociar el cdigo necesario al evento que necesitemos tratar. 3.1.2.1 TextBox

Fig. 3.2: Objeto TextBox Mediante este control se puede realizar tanto la entrada como la salida de datos en nuestras aplicaciones. No hace falta indicar las coordenadas de la situacin del formulario en pantalla, simplemente se tiene que marcar sobre el control de la caja de herramientas y dibujarlo con el tamao deseado en el formulario. Propiedades: Las propiedades de las que dispone el control son las siguientes Text: Aqu se indica el texto que aparecer en el control. Podemos asignarle cualquier texto en tiempo de diseo o ejecucin. Tambin podemos tomar el texto que haya introducido el usuario para tratarlo durante la ejecucin. 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 cdigo. En un mismo formulario no puede haber 2 controles con el mismo nombre. Conviene poner un nombre que represente la funcin que tiene el control en la aplicacin para que el cdigo quede ms claro. MultiLine: Permite introducir varias lneas de texto en el control en lugar de slo una.

Alignment: Es la alineacin que tendr el texto dentro del control: izquierda, centro o derecha. Para que funcione la propiedad MultiLine debe estar con el valor true. Locked: Si est con valor true bloquea el control, es decir, el usuario no puede introducir ni modificar el texto que contenga. Nos puede servir para utilizar el control como salida de datos sin que el usuario pueda modificarlos por error. Otras propiedades que son comunes a la mayora de los controles: Backcolor: color de fondo. Forecolor: color de letra. Font: tipo y tamao de letra. Mtodos Recordemos que por mtodos se entienden los procedimientos o funciones asociados a un control, los cuales nos permiten realizar ciertas operaciones tiles sobre dicho control: Ej. Ordenar sus elementos, buscar un dato, etc... Eventos: Los eventos son acciones que se pueden realizar en cualquier control: click, doble click, movimiento del ratn. A estos eventos se les puede asociar cdigo para que se ejecute al producir el evento. MouseMove: Al mover el ratn por encima del control. MouseDown: Al pulsar cualquier botn del ratn.

59

Change: Al cambiar el contenido del control. Click: Al hacer click con el botn izquierdo del ratn sobre el control. DoubleClick: Al hacer doble click con el botn izquierdo del ratn sobre el control. GetFocus: Este evento se activa cuando el control recibe el enfoque, es decir, cuando se activa el control en tiempo de ejecucin para introducir datos en l o realizar alguna operacin. LostFocus: Es el contrario del anterior evento, se activa cuando el control pierde el enfoque, es decir, se pasa a otro control para seguir introduciendo datos. 3.1.2.2 Labe!.

Fig. 3.3: Objeto Label Este control es tambin uno de los ms utilizados, aunque su utilidad queda restringida a la visualizacin de datos en el mismo, no permitiendo la introduccin de datos por parte del usuario. La forma de utilizarlo es similar a la del control anterior, dibujar el control en el formulario con el tamao que queramos y asignarle un texto en tiempo de diseo o de ejecucin esta vez sin utilizar la propiedad text puesto que no la incorpora, sino utilizando la propiedad Caption. Este control sirve para mostrar mensajes en nuestro formulario que orienten al usuario sobre la utilidad de los dems controles que tengamos en la aplicacin o para indicarnos acciones que podemos realizar.

60

Propiedades Caption: Es el texto que contendr el control. Alignment: Alineacin del texto contenido en el control, no necesita que est activada ninguna otra propiedad. BorderStyle: Si queremos que aparezca un borde alrededor del control activaremos esta propiedad. Para este control no se suelen utilizar los eventos ya que su contenido suele cambiar poco a lo largo de la ejecucin de la aplicacin. De todas formas los eventos son casi los mismos del control textbox excepto que no dispone de los eventos GetFocus y LostFocus ya que a este control no se le puede dar el enfoque. 3.1.2.3. CommandButton

Fig. 3.4: Objeto CommandButton. Este control es el tpico botn que aparece en todas las aplicaciones y que al hacer click sobre l nos permite realizar alguna operacin concreta, normalmente Aceptar o Cancelar. Aunque segn el cdigo que le asociemos podremos realizar las operaciones que queramos. Pero slo con introducir un control de este tipo con el texto salir que se introduce a travs de la propiedad Caption no basta. Habr que asociarle un cdigo que nos permita salir de la aplicacin en el evento adecuado. Y el evento por excelencia de este control es click. As pues accederemos al cdigo del control y la sentencia que nos permitir salir de la aplicacin es End, simplemente

61

tecleamos esa palabra en el evento click y comprobar que realmente finalizaremos nuestra aplicacin al pulsar sobre dicho botn. Propiedades Gaption: Aqu se pone el letrero que queremos que aparezca en el botn: aceptar, cancelar, salir, etc... Enabled: Esta es una nueva propiedad, cuando su valor es true el botn funciona normalmente, cuando su valor es false el botn se encuentra desactivado, no responde a los eventos producidos sobre l y el texto aparece en un gris claro advirtindonos de su estado. Podemos utilizar esta propiedad para activar o desactivar un botn dependiendo del estado de otros controles. Eventos Click: Es el evento tpico de este control y el que ms se utiliza. MouseMove: Como sabemos detecta el movimiento del ratn sobre el control. Puede servir para que aparezca un mensaje en un control Label que nos aporte informacin sobre la utilidad del control ampliando el texto que hayamos colocado como Caption del CommandButton.

3.1.3. BREVE DESCRIPCIN DEL USO DE COMANDOS Y SENTENCIAS EN VISUAL BASIC. 3.1.3.1. Fundamentos de la Programacin Cada mdulo de formulario contiene procedimientos de evento (secciones de cdigo donde se colocan las instrucciones que se ejecutarn como respuesta a

62

eventos especficos). Los formularios contienen controles, por cada control de un formulario, existe el correspondiente conjunto de procedimientos de evento en el mdulo de formulario; adems de procedimientos de evento, los mdulos de formulario pueden contener procedimientos generales que se ejecutan como respuesta a una llamada desde cualquier procedimiento de evento. El cdigo que no est relacionado con un control o un formulario especfico se puede colocar en un tipo diferente de mdulo, un mdulo estndar (. bas). Se deben colocar en un mdulo estndar los procedimientos que se puedan utilizar como respuesta a eventos de diversos objetos, en lugar de duplicar el cdigo en los procedimientos de evento de cada objeto. Cmo Funciona una Aplicacin controlada por Eventos? Un evento es una accin reconocida por un formulario o un control. Las aplicaciones controladas por eventos ejecutan cdigo Basic como respuesta a un evento. Cada formulario y control de Visual Basic tiene un conjunto de eventos predefinido. Si se produce uno de dichos eventos y el procedimiento de evento asociado tiene cdigo, Visual Basic llama a ese cdigo. Aunque los objetos de Visual Basic reconocen automticamente un conjunto predefinido de eventos, se decide cundo y cmo se responder a un evento determinado. A cada evento le corresponde una seccin de cdigo que se denomina procedimiento de evento, cuando se desea que un control responda a un evento, se escribe el cdigo en el procedimiento de ese evento. Los tipos de eventos reconocidos por un objeto varan, pero muchos tipos son comunes a la mayora de los controles, por ejemplo, la mayora de los objetos reconocen el evento Click: si un usuario hace clic en un formulario, se ejecuta el cdigo del procedimiento de evento Click del formulario; si un usuario hace clic en un botn de comando, se ejecuta el cdigo del procedimiento de evento Click del botn, el cdigo en cada caso ser diferente.

63

Aqu una secuencia tpica de eventos en una aplicacin controlada por eventos: Se inicia la aplicacin y se carga(LOAD) y muestra(SHOW) el formulario inicial. El formulario (o un control del formulario) recibe un evento. El evento puede estar causado por el usuario (por ejemplo, por la pulsacin de una tecla) o por el sistema (por ejemplo, un evento de cronmetro) o, de forma indirecta por el cdigo (por ejemplo un evento Load cuando el cdigo carga un formulario). Si hay cdigo en el procedimiento de evento correspondiente, se ejecuta.

La aplicacin espera al evento siguiente. 3.1.3.2. Variables.

3.1.3.2.1. Alcances de las Variables El alcance de una variable define qu partes del cdigo conocen de su existencia; cuando se declara una variable en un procedimiento, slo el cdigo de dicho procedimiento puede tener acceso o modificar el valor de la variable, tiene un alcance que es local al procedimiento. A veces, sin embargo se necesita utilizar una variable con un alcance ms general, como aquella cuyo valor est disponible para todos los procedimientos del mismo mdulo o incluso para todos los procedimientos de toda la aplicacin; Visual Basic fe permite especificar el alcance de una variable cuando la declara. 3.1.3.2.2. Establecimiento del Alcance de las Variables

64

Dependiendo de cmo se declara, una variable tiene como alcance un procedimiento (local) o un mdulo. Alcance Nivel de procedimiento Nivel de mdulo Privado Las variables son privadas del procedimiento en el que aparecen. Las variables son privadas del mdulo en el que aparecen. Pblico No es aplicable. No puede declarar variables pblicas dentro de un procedimiento. Las variables estn disponibles para todos los mdulos.

3.1.3.2.3. Variables Utilizadas en un Procedimiento Las variables al nivel de procedimiento slo se reconocen en el

procedimiento en el que se han declarado. Se las conoce tambin como variables locales. Se declaran mediante las palabras clave Dim o Static. Por ejemplo: Dim col As Integer - o bien Static col As Integer Los valores de variables locales declaradas con Static existen mientras se ejecuta la aplicacin, mientras que las variables declaradas con Dim slo existen mientras se ejecuta el procedimiento. Las variables locales resultan una eleccin apropiada para clculos temporales. Por ejemplo, puede crear una docena de procedimientos distintos que contengan una variable llamada col, como cada col se ha declarado como una variable local, cada procedimiento slo reconoce su propia versin de col. Cualquier procedimiento puede alterar el valor de su col local sin que ello afecte a las variables col de los dems procedimientos. 3.1.3.2.4. Variables Utilizadas en un Mdulo

65

De forma predeterminada, una variable al nivel de mdulo est disponible para todos los procedimientos del mdulo, pero no para el cdigo de otros mdulos. Se crea variables al nivel de mdulo declarndolas con la palabra clave Prvate en la seccin Declaraciones al principio del mdulo. Por ejemplo: Prvate col As Integer Al nivel de mdulo, no hay diferencia entre Prvate y Dim, pero es preferible Prvate porque contrasta con Public y hace que el cdigo sea ms fcil de comprender. 3.1.3.2.5. Variables utilizadas por todos los Mdulos Para hacer que una variable al nivel de mdulo est disponible para otros mdulos, se utiliza la palabra clave Public para declarar la variable. Los valores de las variables pblicas estn disponibles para todos los procedimientos de la aplicacin. Al igual que todas las variables al nivel de mdulo, las variables pblicas se declaran en la seccin Declaraciones al principio del mdulo. Por ejemplo: Public col As Integer A/o se puede declarar variables pblicas en un procedimiento, slo en la seccin Declaraciones de un mdulo. 3.1.3.2.6. Declaracin de Variables La forma de declarar las variables es la siguiente: Dim \ | Static nombre_varable As tipo 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

procedimiento o dentro de un formulario, de esta forma no sera accesible desde los dems procedimientos o formularios. Public: Las variables declaradas sern publicas y podrn estar accesibles desde todos los formularios de la aplicacin. Para conseguirlo tendremos que declararlas en un mdulo de cdigo, no en la seccin declarations de cualquier formulario de los que conste la aplicacin. Para crear un mdulo de cdigo en el men principal de Visual Basic marcamos en PROYECTO/INSETAR MDULO y aparecer junto a los dems formularios de la ventana de proyecto aunque con un icono distinto indicando que se trata de un mdulo de cdigo 3.1.3.2.7. Tipos de Variables
Tipo

Comentario Slo admite 2 valores TRUE o FALSE Admite valores entre 0 y 255 Admite valores entre -32768 y 32767 Admite valores entre -2.147.483.648 y 2.147.483.647 Admite valores decimales con precisin simple Admite valores decimales de doble precisin Vlido para valores de tipo moneda Cadenas de caracteres (Texto) Fechas, permite operar con ellas

BOOLEAN BYTE INTEGER LONG SINGLE DOUBLE CURRENCY STRING DATE

Matrices Para declarar matrices debemos colocar entre parntesis el nmero de elementos de los que constar a continuacin del nombre de la variable: Dim fl(16) as Integer

67

De esta forma tenemos una matriz de 16 elementos identificados del O al

15
Tambin se puede indicar los lmites inferior y superior de la matriz: Dim filaanulada(5 To 14) as Integer Lo que seria una matriz de 10 elementos cuyos ndices van del 5 al 14 Las matrices multidimensionales se declaran de la siguiente forma: Dim Tabla(1 To 1023, 1 To 1023) as Integer 3.1.3.2.8. Consideraciones Al trabajar con Visual Basic es preferible que se active la opcin 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 producindose un conflicto difcil de resolver. En cambio si se intenta declarar 2 variables con el mismo nombre, en el mismo formulario o procedimiento se produce un error en tiempo de edicin avisndonos de la situacin. Otra opcin que es interesante activar, es la de Guardar los cambios en la ficha entorno, la cual guarda una copia del cdigo antes de ejecutarlo por si acaso luego no podemos, se bloquea la aplicacin etc... de esta forma se asegura que lo ltimo que se haya ejecutado se tiene guardado en el disco. 3.1.3.3. Procedimientos

Se puede simplificar las tareas de programacin si se divide los programas en componentes lgicos ms pequeos. Estos componentes, llamados

68

procedimientos, pueden convertirse en bloques bsicos que le permiten mejorar y ampliar Visual Basic. Los procedimientos de texto y controles. Hay dos ventajas principales cuando se programa con procedimientos: Los procedimientos permiten dividir los programas en unidades lgicas discretas, cada una de las cuales se puede depurar ms fcilmente que un programa entero sin procedimientos. Los procedimientos que se utilizan en un programa pueden actuar como bloques de construccin de otros programas, normalmente con poca o ninguna modificacin. En Visual Basic se utilizan varios tipos de procedimientos: Procedimientos Sub que no devuelven un valor. Procedimientos Function que devuelven un valor (normalmente conocidos como funciones). Un procedimiento Sub es un bloque de cdigo que se ejecuta como respuesta a un evento. Al dividir el cdigo de un mdulo en procedimientos Sub, es ms sencillo encontrar o modificar el cdigo de la aplicacin. La sintaxis de un procedimiento Sub es la siguiente: [Prvate | Public][Static]Sub nombre_procedimiento (argumentos) instrucciones
End Sub

resultan muy tiles para condensar las tareas

repetitivas o compartidas, como clculos utilizados frecuentemente, manipulacin

69

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 mdulos estndar, mdulos de clase y mdulos de formulario. De forma predeterminada, los procedimientos Sub son Public en todos los mdulos, lo que significa que se les puede llamar desde cualquier parte de la aplicacin. Los argumentos de un procedimiento son como las declaraciones de variables; se declaran valores que se pasan desde el procedimiento que hace la llamada. Resulta muy til en Visual Basic distinguir entre dos tipos de procedimientos Sub, procedimientos generales y procedimientos de evento. 3.1.3.3.1 Procedimientos generales

Un procedimiento general indica a la aplicacin cmo realizar una tarea especfica. Una vez que se define un procedimiento general, se le debe llamar especficamente desde la aplicacin. Por el contrario, un procedimiento de evento permanece inactivo hasta que se le llama para responder a eventos provocados por el usuario o desencadenados por el sistema. Por qu se crean procedimientos generales? Una razn es que muchos procedimientos de evento distintos pueden necesitar que se lleven a cabo las mismas acciones. Es una buena estrategia de programacin colocar las instrucciones comunes en un procedimiento distinto (un procedimiento general) y hacer que los procedimientos de evento lo llamen. Esto elimina la necesidad de duplicar cdigo y tambin hace que la aplicacin sea ms fcil de mantener. 3.1.3.3.2. Procedimientos de evento Cuando un objeto en Visual Basic reconoce que se ha producido un evento, llama automticamente al procedimiento de evento utilizando el nombre

70

correspondiente al evento. Como el nombre establece una asociacin entre el objeto y el cdigo, se dice que los procedimientos de evento estn adjuntos a formularios y controles. Un procedimiento de evento de un control combina el nombre real del control (especificado en la propiedad ame), un carcter de subrayado (_) y el nombre del evento. Por ejemplo, si desea que un botn de comando llamado siguiente llame a un procedimiento de evento cuando se haga clic en l, Se utiliza el procedimiento siguiente_Click. Un procedimiento de evento de un formulario combina la palabra "Form", un carcter de subrayado y el nombre del evento. Si desea que un formulario llame a un procedimiento de evento cuando se hace clic en l, se utiliza el procedimiento Form_Click, (Como los controles, los formularios tienen nombres nicos, pero no se utilizan en los nombres de los procedimientos de evento.) Todos los procedimientos de evento utilizan la misma sintaxis general. Sintaxis de un evento de control Sintaxis de un evento de formulario. Prvate Sub nombrecontrol_nombreevento (argumentos) instrucciones End Sub Prvate Sub Fotrn_nombreevento (argumentos) instrucciones End Sub Aunque se puede escribir procedimientos de evento nuevos, es ms sencillo utilizar los procedimientos de cdigo que facilita Visual Basic, que incluyen automticamente los nombres correctos de procedimiento.

71

Se puede seleccionar una plantilla en la ventana Editor de cdigo si selecciona un objeto en el cuadro Objeto y selecciona un procedimiento en el cuadro Procedimiento. Tambin es conveniente establecer la propiedad ame de los controles antes de empezar a escribir los procedimientos de evento para los mismos. Si se cambia el nombre de un control tras vincularte un procedimiento, se deber cambiar tambin el nombre del procedimiento para que coincida con el nuevo nombre del control. De lo contrario, Visual Basic no ser capaz de hacer coincidir el control con el procedimiento. Cuando el nombre de un procedimiento no coincide con el nombre de un control, se convierte en un procedimiento general. Llamadas a Procedimientos. Un procedimiento Sub difiere de un procedimiento Function en que, al procedimiento Sub no se le puede llamar mediante su nombre en una expresin. La llamada a un procedimiento Sub es una instruccin nica. Adems, un procedimiento Sub no devuelve un valor en su nombre como hace una funcin. Sin embargo, al igual que Function, un procedimiento Sub puede modificar los valores de las variables que se le pasan. Hay dos formas de llamar a un procedimiento Sub: Ambas instrucciones llaman a un Sub denominado MostrarTabla. Cali MostrarTabla (PrmerArgumento, SegundoArgumento) MostrarTabla PrmerArgumento, SegundoArgumento

72

Cuando se utiliza la sintaxis Cali, se debe poner los argumentos entre parntesis. Si omite la palabra clave Cali, se debe tambin omitir los parntesis alrededor de los argumentos. 3.1.3.4. Funciones

La sintaxis de un procedimiento Function es la siguiente: [ Prvate \ nombre_j>rocedimiento(argumentos) tipo] instrucciones End Function Al igual que un procedimiento Sub, un procedimiento Function es un procedimiento diferente que puede tomar argumentos, realizar una serie de instrucciones y cambiar el valor de los argumentos. A diferencia de los procedimientos Sub, los procedimientos Function pueden devolver un valor al procedimiento que realiza la llamada. Hay tres diferencias entre los procedimientos Sub y Function: Generalmente, se llama a una funcin incluyendo el nombre y los argumentos del procedimiento en la parte derecha de una instruccin o expresin mayor (Vaior_Retorno = funcinQ). Los procedimientos Function tienen tipos de datos, al igual que las variables. Esto determina el tipo del valor de retorno. (En ausencia de la clusula As, el tipo es el tipo predeterminado Variant.) Se devuelve un valor asignndole al propio Nombre_Procedimiento. Cuando el procedimiento Function devuelve un valor, se puede convertir en parte de una expresin mayor. 3.1.3.4.1. Llamadas a Funciones. [As

73

Normalmente se llama a un procedimiento de funcin que se ha escrito de la misma forma en que se llama a una funcin intrnseca de Visual Basic como Abs; es decir, utilizando su nombre en una expresin: Tambin es posible llamar a una funcin igual que se llama a un procedimiento Sub. Las instrucciones siguientes llaman a la misma funcin: Cali Year(Now) YearNow Cuando llama a una funcin de esta manera, Visual Basic desecha el valor de retorno. 3.1.3.4.2 Paso de Argumentos a Procedimientos y Funciones

Normalmente el cdigo de un procedimiento necesita cierta informacin sobre el estado del programa para realizar su trabajo. Esta informacin consiste en variables que se pasan al procedimiento cuando se le llama. Cuando se pasa una variable a un procedimiento, se llama argumento.

3.1.3.4.3

Tipos de datos de los argumentos

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. 3.1.3.4.4 Paso de argumentos por valor

74

Slo se pasa una copia de la variable cuando se pasa un argumento por valor. Si el procedimiento cambia el valor, el cambio afecta slo a la copia y no a la variable propiamente dicha. 3.1.3.4.5 Paso de argumentos por referencia

El Paso de argumentos por referencia le da al procedimiento acceso al contenido real de la variable en su ubicacin de direccin de memoria. Como resultado, el procedimiento al que se pasa el valor de la variable se puede modificar de forma permanente. La forma predeterminada de pasar valores en Visual Basic es por referencia. Si especifica el tipo de dato de un argumento que se pasa por referencia, debe pasar un valor de ese tipo para el argumento. Se puede eludirlo si pasa una expresin en vez de un tipo de dato como argumento. Visual Basic evala la expresin y la pasa como el tipo requerido si puede. La forma ms sencilla de convertir una variable en una expresin es ponerla entre parntesis.

3.1.3.5 3.1.3.5.1

Estructuras de Control (Repeticin y Decisin) Do While - Loop / Do - Loop While.

El bucle Do se utiliza para ejecutar un bloque de instrucciones un nmero indefinido de veces. Hay algunas variantes en la instruccin Do...Loop, pero cada una evala una condicin numrica para determinar si contina la ejecucin.

75

Como ocurre con If.Then, la condicin debe ser un valor o una expresin que d como resultado False (cero) o True (distinto de cero). En el ejemplo de Do...Loop siguiente, las instrucciones se ejecutan siempre y cuando condicin sea True: Do While condicin instrucciones Loop Cuando Visual Basic ejecuta este bucle Do, primero evala condicin. Si condicin es False (cero), se salta todas las instrucciones. Si es True (distinto de cero), Visual Basic ejecuta las instrucciones, vuelve a la instruccin Do While y prueba la condicin de nuevo. Por tanto, el bucle se puede ejecutar cualquier nmero de veces, siempre y cuando condicin sea distinta de cero o True. Nunca se ejecutan las instrucciones si condicin es False inicialmente. Por ejemplo, este procedimiento cuenta las veces que se repite una cadena de destino dentro de otra cadena repitiendo el bucle tantas veces como se encuentre la cadena de destino. Otra variante de la instruccin Do...Loop ejecuta las instrucciones primero y prueba condicin despus de cada ejecucin. Esta variacin garantiza al menos una ejecucin de instrucciones:

Do
instrucciones Loop While condicin Hace el bucle al menos una vez Do Until condicin instrucciones Loop Do

76

instrucciones Loop Until condicin 3.1.3.5.2 For-Next.

Los bucles Do funcionan bien cuando no se sabe cuntas veces se necesitar ejecutar las instrucciones del bucle. Sin embargo, cuando se sabe que se va a ejecutar las instrucciones un nmero determinado de veces, es mejor elegir el bucle For...Next. A diferencia del bucle Do, el bucle For utiliza una variable llamada contador que incrementa o reduce su valor en cada repeticin del bucle. La sintaxis es la siguiente: For contador = iniciar To finalizar [Step incremento] instrucciones Next [contador] Los argumentos contador, iniciar, finalizar e incremento son todos numricos. El argumento incremento puede ser positivo o negativo. Si incremento es positivo, iniciar debe ser menor o igual que finalizar o no se ejecutarn las instrucciones del bucle. Si incremento es negativo, iniciar debe ser mayor o igual que finalizar para que se ejecute el cuerpo del bucle. Si no se establece Step, el valor predeterminado de incremento es 1. Al ejecutar el bucle For, Visual Basic: Establece contador al mismo valor que iniciar. Comprueba si contador es mayor que finalizar. Si lo es, Visual Basic sale del bucle. (Si incremento es negativo, Visual Basic comprueba si contador es menor que finalizar.)

77

Ejecuta instrucciones.

Incrementa contador en 1 o en instrucciones, si se especific. Repite los pasos 2 a 4.

3.1.3.5.3

Else-Endlf.

Se usa la estructura If.Then para ejecutar una o ms instrucciones basadas en una condicin. Se puede utilizar la sintaxis de una lnea o un bloque de varias lneas: If condicin Then instruccin Aqu no hace falta cerrar con End If If condicin Then instrucciones Endlf Condicin normalmente es una comparacin, pero puede ser cualquier expresin que d como resultado un valor numrico. Visual Basic interpreta este valor como True o False; un valor numrico cero es False y se considera True cualquier valor numrico distinto de cero. Si condicin es True, Visual Basic ejecuta todas las instrucciones que siguen a la palabra clave Then. Puede utilizar la sintaxis de una lnea o de varias lneas para ejecutar una instruccin basada en una condicin. 3.1.3.5.4 If...Then...Else

Se utiliza un bloque lf...Then...Else para definir varios bloques de instrucciones, uno de los cuales se ejecutar: If condicin 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 da.

WdUd

Uiuque

U t

79

instrucciones contiene cero o ms instrucciones. Si ms de un Case coincide con la expresin de prueba, slo se ejecutar el bloque de instrucciones asociado con la primera coincidencia. Visual Basic ejecuta las instrucciones de la clusula (opcional) Case Else si ningn valor de la lista de expresiones coincide con la expresin de prueba. Observe que la estructura Select Case evala una expresin cada vez al principio de la estructura.

80

3.2

DIAGRAMA DE FLUJO DEL PROGRAMA


Este programa presenta un formulario inicial desde el que se puede

acceder a las diferentes opciones que tiene el programa como son: Una parte terica, que explica el proceso de simplificacin de Quine-McCIuskey, la segunda seccin en la que se da un tutorial de cmo utilizar el programa de simplificacin, y la tercera parte es para la simplificacin de funciones de hasta diez variables de entrada, en este programa el ingreso de los datos y el proceso de simplificacin se lo realiza paso a paso hasta obtener la respuesta de la funcin simplificada. Tambin hay la opcin de correr el programa en un solo paso, y por ltimo hay la opcin de salir. En la fig. 3.5 se indica el diagrama de flujo correspondiente al primer interface del programa.

Men Principal

Fundamento Terico

Iniciar / Simplificacin /""

Presentacin

\e la Teora

J Presentacin del tutorial

Proceso de

Simpl

Fig. 3.5: Diagrama de Flujo del inicio del programa

81

3.2.1 TEORA

Regresar al Men

Comando presionado

Imprimir-

Flechas de Navegacin

Navegaren el Texto

Imprimir el Texto completo

Fig. 3.6: Diagrama de flujo de la presentacin de la Teora, Es una explicacin terica, en la que se presenta todo lo referente a la teora, con respecto al mtodo de simplificacin de Quine-McCIuskey, para esto lo que se hace es abrir un documento realizado en Word y guardado con una extensin rtf. La explicacin se la hace siguiendo todo el proceso de simplificacin para un ejemplo en particular, el cual est compuesto de tres variables de entrada [A,

82

B, C]. Esta seccin es una parte de consulta en la que se explica paso a paso todo el proceso de simplificacin de las funciones booleanas utilizando el mtodo de Quine-McCIuskey. La presentacin de la teora se hace nicamente presentando en un objeto RichTextBox el documento realizado en Word y guardado con el nombre "Texto, rtf, la navegacin y revisin del texto se lo hace con la barra de navegacin existente en el objeto RichTextBox.. En esta ventana tambin existe la opcin de imprimir todo el contenido del Texto; y se puede seleccionar y copiar una parte del texto y pegarlo en alguna otra aplicacin. La figura 3.6 muestra el diagrama de flujo de la rutina de presentacin de la teora en la pantalla del monitor 3.2.2 SIMPLIFICACIN En esta parte existe un programa que permite simplificar paso a paso una funcin booleana de hasta diez variables o entradas utilizando el mtodo 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 combinacin, el programa se encarga de poner los mintrminos respectivos en el editor de mintrminos. Tambin se puede ingresar directamente todos y cada uno de los mintrminos en este caso el programa se encarga de calcular el nmero de entradas y construir la tabla de combinaciones correspondiente a la suma de los mintrminos asociados, este programa tambin permite guardar la tabla de datos ingresada para recuperarla en otro momento, la extensin de los archivos tipo texto con los que se guarda es *.boo, tambin se puede abrir un archivo o una tabla ingresada anteriormente para simplificarla. En el figura 3.7 se presenta el diagrama de flujo del programa para la simplificacin de funciones lgicas.

83

^Simplificacin

Presenta la pantalla de ingreso de datos

-Abrir

Abrir el Archivo

Ingresar datos por mintrminos iF Presentar Tabla de Combinaciones y mintrminos

Ingresar datos por tabla

Comando Ingresado Tiene la respuesta final?

Est la tabla de combinaciones

Simplifica el siguiente paso

Simplifica el paso anterior

Fig. 3.7: Diagrama de flujo para la simplificain de las funciones.

84

3.2.3

TUTORIAL El tutorial ensea paso a paso a utilizar el programa de simplificacin para

lo cual se utiliza un ejemplo de 4 variables de entrada, la presentacin es igual que la presentacin de la simplificacin, tambin se explica paso a paso la forma de utilizar este programa tanto en el ingreso de datos como en el proceso de simplificacin. En la figura 3.8 est el diagrama de flujo para el tutorial.

Inicio Tutorial Presenta la Teora

Ingresar Comando

/Siguiente

Comando Ingresado

Anterior /

Ultima xplicacin?

Primera xplicacin?

Presentar la siguiente explicacin

Presentar la anterior explicacin

Fig. 3.8: Diagrama de flujo del Tutorial.

85

33.

DIAGRAMA DE FLUJO DE LA SIMPLIFICACIN.


Para realizar la simplificacin de una funcin se siguen los siguientes pasos: Ingreso de los datos en la tabla de verdad Formacin de los cubos n Construccin de la tabla de implicantes primos Construccin de la tabla de simplificacin Simplificacin de la tabla de implicantes primos Obtencin de la ecuacin booleana

3.3.1. INGRESO DE LOS DATOS EN LA TABLA DE COMBINACIONES. El ingreso de los datos se puede hacer de dos formas: directamente en la tabla, o ingresando los mintrminos. Si el ingreso se hace en la tabla los mintrminos se actualizan automticamente, para esto se debe saber cuantas entradas o variables tiene la funcin. Si el ingreso de datos es por medio de los mintrminos la tabla de combinaciones se actualiza automticamente, tambin se calcula inmediatamente el nmero de entradas de acuerdo a los mintrminos ingresados. Si el ingreso de datos se lo hace por medio de la tabla, la salida debe ser un 1 o un O caso contrario aparece un mensaje que indica que se ha ingresado un dato incorrecto, la combinacin que tiene como salida un 1, da lugar a un mintrmino, este mintrmno se actualiza en un vector r(i), luego se actualiza en el indicador de mintrminos, Cuando la salida de la funcin es O o 1, tambin se actualiza el indicador de mintrminos, a continuacin se revisa que se haya ingresado todos los datos de la tabla, si es as se habilita el botn del comando <siguiente> para estar preparado y empezar en cualquier momento el proceso de simplificacin.

86

Mientras se ingresa las salidas de la funcin se puede regresar a cambiar cualquier dato errado o fallante, el cambio o correccin tambin se puede hacer en el indicador de mintrminos. Las combinaciones se ponen automticamente de acuerdo al nmero de entradas de tal forma que una funcin de n entradas tendr 2n combinaciones. En la figura 3.9 se indica una funcin con 4 entradas que contiene 16 combinaciones.

Nmero de entradas A

Indicador \s

/Tabla de

-x

V Combinaciones^

Fig. 3.9: Tabla de una funcin con 4 entradas Cuando se ingresa los datos por medio de la tabla se debe tambin analizar si el dato ingresado es O o 1 caso contrario se debe volver a pedir el ingreso del dato correspondiente, tambin estos datos ingresados en la salida de la funcin se almacena en un vector r(i), que es el que tienen los datos de salida de la funcin. Basndose en el valor del r(i) se actualiza el indicador de mintrminos.

87

(jngresoj Nuevo

~z_

Ingresar Mintrminos Ver indicador de Mintrminos

Calcular n Actualizar r(i) Actualizar Tabla <Space>


<Enter>

<Otro>

Calcular n Actualizar r(i) Actualizar Tabla Ingresar Tabla * ~ Ingresare! nmero de entradas Indicar Combinacin / / Ingresar la / funcin /

No r(i)=f Actualizar mintrminos

Habilitar botn Siguiente Habiliotar Men Guardar C Fin )

Fig. 3.10: Diagrama de flujo para el ingreso de los datos.

88

Cuando se ingresa los datos por medio de la ecuacin o mintrminos en cambio la posicin r(i) se escribe un 1 basndose en el mintrmino ingresado y en las posiciones r(i) que no tiene dato alguno se pone el 0. Inmediatamente y basndose en el mintrmino ms alto ingresado se calcula el valor de n, y finalmente se actualiza la tabla de combinaciones. Cuando se presiona la tecla <Enter> quiere decir que ya se han ingresado todos los mintrminos correspondientes a esta funcin entonces habr que completar la tabla de combinaciones y dejar listo para empezar el primer paso de la simplificacin. En la figura 3.10 se indica el diagrama de flujo para el ingreso de los datos ya sea directamente en la tabla o como un mintrmino.

33.2. FORMACIN DE CUBOS.


La formacin de los cubos O, cubos 1, cubos 2, etc... depende del nmero de entradas. Para poder realizar la formacin de cubos se utiliza una matriz de cubos c(i, j) que est definida como una matriz de orden 2047 x 16 debido a que el programa se har de hasta 10 variables y para seguridad por el nmero de combinaciones en cada uno de los cubos se define de 2047. la primera columna de la matriz contiene los cubos O, la segunda columna tiene el cubo 1, la tercera columna tiene los cubos 2, y as sucesivamente, los datos de cada una de los cubos de simplificacin se indican en dos objetos llamados ListBox. Para llevara el control de que cubos han sido calculados se utiliza una variable llamada (coi), para tener control de cuantos elementos existen en cada columna de la matriz se utiliza un vector fil() en el que se almacena el nmero de elementos en cada una de las filas. Tambin se debe almacenar los mintrminos, y combinaciones de mintrminos utilizados para construir los respectivos cubos, este almacenamiento se hace en otra matriz O(i, j).

Los cubos se forman nicamente con las combinaciones que tienen como salida un 1, se ordena estas combinaciones de acuerdo al nmero de 1s que tiene cada combinacin. Finalmente e resultado se muestra en un ListBox. Si ya fueron calculados fos cubos O nicamente se muestran sin necesidad de volver a calcularlos. En la fig. 3.11 se muestra una tabla de cubos ceros para la funcin anterior.
rnrri[ilifu:.i<Mnn

Nmero de entradas 4

MINTERMINOS

CUBOS O

0001 001 1 0101 0111 1 001 1011 1101

0001 001 1 0101 1 001 0111 1011 1101

1111

1111
Fig. 3.11: Tabla de Cubos ceros para una funcin de 4 entradas Los cubos O se almacenan en la primera columna de la matriz c(i, j) los dems cubos se almacenaran en las dems columnas de la misma matriz. En las figura 3.12 y 3.13 se indica el diagrama de flujo para la obtencin de los cubos 0. 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 seala la combinacin asociada ubicando unas marcas en la misma posicin de la matriz c(i, j) en otra matriz

90

llamada marca(, j), basndose en esta matriz se encontraran los implicantes primos. En las figuras 3.14, 3.15 y 3.16 se indica el diagrama de flujo para obtener los cubos n de una funcin booleana. En la figura 3.17 se indica las tablas de cubos 1 y cubos 2 para una funcin booleana de 5 entradas.

Ocultar la Tabla de combinaciones col=col"M

No

fila=fila+1 c(fila,0)=i

Fig. 3.12; Diagrama de Flujo para la obtencin de los cubos 0.

91

i u
3r Mn

*^-"~*"'r7V-T^"1""fc-^^

Si
cont=0 |
^ pos=1 * fi\ Bit=Val(Mid( Hv 1\ P05 ';/
i i.^-^^fi-T

1^> -""""^

s
No
J>

pos=pos+1
J L

I cont=cont+1 I

if
Si

J*

No

-r-*^*rnnf~iTi^*^^-^

1 Si
raya = raya + 1 fila * fila + 1 c(fila, col) = f(i) O(fila, col) = Str(i)
*---"""^T?* n^ i""?"**- Nn

i: +1 it

j=j+1 ^i

Si ^-nrr"^-

M~

4)

Si
Y

fil(col)=fila Mostra * cubos 0 Habilitar Comandos Actuiiza MaxCol y Max in_^> O7F*

Fig. 3.13: Continuacin del diagrama de flujo para la obtencin de los cubos 0.

92

cont=cont+1 spos=j cpos = pos

Fig. 3.14: Diagrama de flujo de obtencin de los cubos n

93

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

c(fila, col + 1) = c(k, col+

O(fila,col O(i, col) & " " & Ospos, col)

Fig. 3.15: Continuacin del diagrama de flujo de obtencin de los cubos n

94

fil(col + 1) = fila Actualizar MaxColCubos, MaxCol, Max col=col+1 fila = O Or col = Aux

ultima = True fl(col) = auxiliar Mostrar los cubos n o los implicantes primos

Fig. 3.16: Continuacin del diagrama de flujo de obtencin de los cubos n

95

Simplificacin

1(1235910111819202123252627)

Nmero de entradas 6

CUBOS 1

CUBOS 2
0X0X1 OX01X X001 X XX01 O XX01 1 X1 0X1 XI 0 1 X 1 X01 X

000X1 00X01 0X001 0001X 0X01 O X001O

0X01 1 X001 1 X01 01 01 0X1 XI 001 01 01 X XI 01 O 1 001 X 1X010

Fig. 3.17: Tabla de cubos 1 y cubos 2 para una funcin de 5 entradas.

3.3.3. TABLA DE IMPLICANTES PRIMOS 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. Como se puede ver en el diagrama de flujo de la figura 3.18, nicamente si los implicantes primos no han sido hallados antes aux1<>col se hace el clculo de los implicantes primos caso contrario se muestra directamente. En ai figura 3.19 se indica una tabla de implicantes primos de una funcin de 5 entradas.

96

No

No

fila = fila + 1 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 Fin^>

Fig. 3.18: Diagrama de flujo para la obtencin de los implicantes primos.

funcionSb boo

(12359101118192021232526271:3

Nmero de entradas b

IMPLICANTES PRIMOS

00X01

X01 01 1 01 OX 1 0X1 1 1 01X1


0X0X1

XI 0X1 XX01 X

Fig. 3.19. Tabla de implicantes primos para una funcin de 5 entradas.

3.3.4. TABLA DE SIMPLIFICACIN DE LOS IMPLICANTES PRIMOS. La tabla de simplificacin de implicantes primos es una tabla que se construye en base de todos los implicantes primos y los mintrminos, poniendo una marca en cada casillero que pertenece al mintrmino y al implicante primo en el que est contenido; para construir esta tabla de simplificacin se ubica en la primera columna a todos los implicantes primos, y todos los mintrminos ordenado en la primera fila y en cada celda que corresponde al implicante primo con sus respectivos mintrminos se ubica una marca.

Los mintrminos se encuentran en forma desordenada dentro de la matriz O(i, j) pero en la tabla se debe poner en forma ordenada ascendentemente para lo cual la primera columna de la matriz O(i, j) la pasamos a un vector s(i) para poder ordenarlo. En la figura 3.20 se indica una tabla de simplificacin para una funcin de 5 entradas.

98

235310111819202123252627

Numero de entradas 5

TABLA DE SIMPLIFICACIN

0 oso i
X 0 1 0 1 1 O 1 OX

Para poder construir esta tabla de simplificacin primero se debe construir una matriz tabla(i, j) en la que se guardan las marcas en la misma posicin que se ubica dentro de la tabla. La matriz tabla(i, j) tiene el mismo nmero de filas que el nmero de implicantes primos, y el mismo nmero de columnas que el nmero de mintrminos o del vector S(i, j). Cada elemento de la ltima columna de la matriz O(i, j) se compara con cada uno de los elementos del vector S(i) y en el caso de que coincidan quiere decir que el mintrmno correspondiente contiene al elemento S(i) entonces se pondr una marca en esa posicin de a tabla. Luego comparamos cada elemento del vector s(i) con cada uno de los elementos de la matriz Q(i, j) para ver cual mintrmino coincide con los elementos del vector. Como se puede observar en el diagrama de flujo si la tabla ya ha sido calculada lo nico que se hace es indicarla, sin necesidad de volver a calcularla. En las figuras 3.21, 3.22 y 3.23 se indica el diagrama de flujo para construir la tabla de simplificacin.

99

aux = s(i) s(i) = aux

Fig. 3.21: Diagrama de flujo para la construccin de la tabla de simplificacin.

100

subndice = Mid(O(i, col), p1, P2-P1)


1f

No

al(subindice) = Val(s(j))

O-

Fig. 3.22. Continuacin del diagrama de flujo para la construccin de la tabla de simplificacin.

101

3ps = Len(O(i, col)] T Si

subndice = Mid(O(i, col), p1, p2 - p1 + 1)

al(subtndice) = Val(s

Dibujar Tabla Tablalmplicantes = True marcas = True

Fig. 3.23. Continuacin del diagrama de flujo para la construccin de la tabla de simplificacin.

102

33.5.

SIMPLIFICACIN DE LA TABLA DE IMPLICANTES PRIMOS

La simplificacin de la tabla de implicantes primos consta de dos partes la primera parte corresponde a encontrar los implicantes primos esenciales.

xxoix
1010X X1 0X1

Fig. 3.24: Tabla de los implicantes primos esenciales y la tabla de implicantes primos secundarios. La segunda parte corresponde a encontrar los implicantes columnas. En la figura 3.24 se indica una tabla de implicantes primos esenciales y secundarios para una funcin de 5 entradas. Para encontrar los implicantes primos esenciales seguimos el siguiente criterio. Buscamos la primera columna que tiene una sola marca y lo marcamos como anulada, para esto se crea un vector ColumnaAnulada(i) en el que se almacenar los valores True o False segn sea la columna anulada o no. El implicante primo que est en la fila de la marca encontrada se toma como implicante primo esencial y forma parte ya de la solucin y le ponemos una marca como fila anulada, esto se hace utilizando un vector FHaAnulada(i) en el que se almacena un True o un False. primos

secundarios si existen ya que es posible que no estn cubiertas todas las

103

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

ablai, i) = T

contv(i)=contv

contvmax < contv T Si contvmax = contv(i)

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

abiafj, i) = "*" And filaAnuladai) = False

filaAnulada(j) = True numeroFila(i) = j fila = fila + 1 c(fila, col + 1) = c(j, col) 2 = 1

No

Tabla(j, 2) = "*" olumnaAnulada(2)

fs o

cok columnaAnulada(2) True numeroFiia(i2)

fe~*

Poner las marcas fil(col+1)=fila Actualizar MaxCo Actualizar Max MostrarEsenciales esenciales=True

Fig. 3.26: Continuacin 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 mximo. i) En cada fila se cuenta cuantas marcas tiene dentro de las columnas no anuladas, para esto se crea un vector ContH(i) en el que se almacena el nmero de marcas que tiene cada fita en tas columnas no anuladas. ii) Empezando por la fila que tiene el mayor nmero de marcas y se toma ese implicante primo como secundario y formar parte de la solucin y se anula la fila para lo cual utilizamos el vector FilaAnulada(i). iii) Se eliminan todas las columnas que tienen marca en el implicante primo tomado en el numeral anterior. iv) Repetimos este proceso hasta que todas las columnas estn anuladas. Tanto los implicantes primos primarios y secundarios se almacenan en la matriz c(i, j)f en las posiciones c(col+1, j) y c(col+2, j) respectivamente, para tomarlas luego de esas columnas para hallar la solucin.

En las figuras 3.27 y 3.28 se indica el diagrama de flujo para la obtencin de los implicantes primos secundarios.

106

marcasmax=0

contH(i)=0

filaAnulada(i): lumnaAnulada(j)

conth(i) = conth(i) + 1 marcasmax < conthfi

marcasmax conth(i)

Si

Fig. 3.27: Diagrama de flujo par obtener los implicantes primos secundarios.

107

conthQ) = marcasmax And filaAnulada(j) = False nd marcasmax > O

sihay=False 2 = 1 TablaG, 2) = "*" lumnaAnulada(2)

columnaAnulada(i2) = True numeroFla(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

Fig. 3.28: Continuacin del diagrama de flujo para obtener los implicantes primos secundarios.

108

33.6.

ECUACIN BOOLEANA SIMPLIFICADA La ecuacin booleana simplificada se calcula basndose en los implicantes

primos esenciales y basndose en los implicantes primos secundarios, de la siguiente manera. La ecuacin booleana simplificada es una suma de productos. Cada uno de los productos se forman de los implicantes primos obtenidos tomando en cuenta que las variables que estn con un 1 se toman las variables directamente; la variable que est con un O se toma la variable complementada; mientras que las variables que estn con una X no se les toma en cuenta. El resultado lo ponemos en un TextBox. Como se puede ver primero analiza los implicantes primos esenciales luego los implicantes primos secundarios. En las figuras 3.29 y 3.30 se indican los diagramas de flujo para obtener la solucin de la ecuacin booleana.

109

disolucin 1' Text6="Y=" i=1

'Text6=Text6+Variable Complementada

XxText6=Text6+Variable

Fig. 3.29: Diagrama de flujo para obtener la solucin.

LIO

Text6=Text6+Variable Complementada

Text6=Text6+variable

-^Mostrar Solucin ^^

Fig. 3.30: Continuacin del diagrama de flujo para la obtencin de la solucin

111
3.4 RESULTADOS OBTENIDOS.
Para probar los resultados del programa diseado se hizo con varias funciones existentes en el libro de Hill and Peterson y se obtuvo los siguientes resultados.

La funcin de 4 entradas: f(A, B, C, D)=Zm(0, 2, 3, 6, 7, 8, 9, 10, 13).

'nter minos 1 0 2 3 6 7 8 9 1 0 1 3 )

Fig. 3.31: Editor de mintrminos Una vez ingresada la ecuacin dentro del indicador de mintrminos automticamente se construye la tabla de combinaciones y se calcula el valor de n correspondiente. 14

1000(1"

1001 ["

Fig. 3.32: Tabla de combinaciones de la funcin ingresada como mintrminos. Como se puede comprobar la tabla de combinaciones esta de acuerdo con los mintrminos ingresados sin ningn error el tiempo de calculo fue de menos de un segundo.

112

A continuacin presionamos el comando para calcular el cubo O y obtuvimos el siguiente resultado.

0 2 3 6 7 8 9 10 13

0000 001 0 001 1 0110 0111 1 000 1 001 1010 1101

0000
001O 1 000

001 1 01 1 O 1 001 1010 0111 1101

Fig. 3.33: Tabla de cubos 0. El tiempo de demora fue mucho menos que un segundo, efectivamente los mintrminos estn ordenados de acuerdo al nmero de unos que tiene cada combinacin. Y nicamente coge como cubos O a las combinaciones que tienen como salida un 1. Todos los clculos hechos en el programa concuerdan con los clculos realizados a mano. A continuacin calcularemos los cubos 1 obteniendo el resultado que se indica en la figura 3.34. Los cubos 1 son las combinaciones resultantes de combinar dos cubos O como se puede ver en la parte inferior de la tabla de cubos 1, el cubo 1 10X0 viene de combinar el m8 y el m10. El tiempo de clculo de los cubos 1 fue de aproximadamente 1 seg., lo cual hace que sea bastante rpido.

113

* 0000 "0010 * 1 000 "0011 "0110 * 1 001 "1010

xooo
001 X 0X1 O X01 O 1 OOX 0X1 1 01 1 X 1X01

00X0

* 01 1 1 * 1 1 01

Fig. 3.34: Cubos 1 de una funcin de 4 variables de entrada. A continuacin calculamos los cubos 2.

CUBOS 2 * 00X0 " XOOO 0X1 X


1(0, 2. 8.

* 001 X * 0X1 O * X01 O * 1 0X0 * 0X1 1 * 01 1 X 1 X01


Fig. 3.35: Tabla de cubos 2 para la funcin de 4 variables de entrada. Combinando los cubos 1 se calcula los cubos 2 por ejemplo el cubo 2 XOXO se formo combinando los cubos 1 (0,2) y (8, 10) mientras que los cubos 1 que no se combinaron para formar cubos 2 como es el caso de los cubos 1 (8, 9) y los cubos 1 (9, 13), pasarn a formar parte de los implicantes primos.

114

Las combinaciones del cubo 1 que se combinaron para formar cubos 2 se marcan con una "*" como se puede ver en la tabla de la parte izquierda, mientras que los cubos 1 que no se combinaron no se marcan. En la figura 3.36 se indican, los cubos 3 si es que existiera pero en este caso ya no existen cubos de mayor orden es decir el siguiente paso ser calcular los implicantes primos.

GMBOS2

IMPLICANTES PRMOS

xoxo
0X1 X

xoxo
11,2,3.6,7)1

100X 1X01

Fig. 3.36: Tabla de implicantes primos Los implicantes primos son los cubos anteriores que no se combinaron para formar cubos de orden superior como se puede ver en el grfico el cubo 2 0X1X forma parte tambin de los implicantes primos. Una vez calculado los implicantes primos se procede a optimizarlos utilizando una tabla de simplificacin de los implicantes primos.

o
1 0 0 X 1 X 0 1

6 * *

9 * *

10

13 *

xoxo
0 X 1 X

Fig. 3.37:Tabla de Simplificacin de los implicantes primos. En la Figura 3.37 podemos ver que el implicante primo 100X contiene a los mintrminos m8 y m9 mientras que el implicante primo 0X1X contiene a los mintrminos m2, m3, m6, m7. Es decir esta tabla se forma con los implicantes primos y los mintrminos involucrados en estos implicantes primos.

115

El clculo de los implicantes primos esenciales se los hace tomando los implicantes primos que coinciden con las columnas que tienen una sola marca. 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.

c
1 0 0X
( \s >

TABLA DE SIMPLIFICACIN
2
3 j
-

9 i
jii

i3

fk i )
,

( > \ 3

t j

/\ >i>

xoxo
1X01

oxix

;
;

Fig. 3.38: Tabla de los implicantes primos esenciales. Como todas las columnas de la tabla estn sealadas como anuladas no existe implicantes primos secundarios y nicamente existen implicantes primos esenciales. El siguiente paso ser entonces calcular la solucin basndose en estos implicantes.

Fig. 3.39: Solucin simplificada de la funcin de 4 entradas La solucin obtenida es una solucin de compuesta por una suma de tres trminos, es igual que la calculada manualmente. A continuacin se realiza una pruebe con una funcin de 5 entradas o variables.

116

La funcin a probarse es:


f(A, B, C, D, E) = Z(0, 6, 8, 10, 12, 14, 17, 19, 20, 22, 25, 27, 28, 30)

En este caso haremos el ingreso de los datos directamente en la tabla de combinaciones de 5 entradas, para este caso utilizamos el men, como se indica en la figura 3.40.
Quine McCIuskey Simplificacin

Fig. 3.40: Comando para una funcin de 5 entradas. Una vez ejecutada este comando aparece la siguiente ventana en la que ingresaremos las salidas para cada una de las combinaciones.
Mint i minos |(Q6810121417 192022 25 27 28 30)31

|OQQQQ[|IOOOO[O'
0 0 0 0 1 [0 00010JO 0 0 0 1 1 0 001 00|0 10001 |1 10G1QJO 1001 1 1 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

Cuando se ingresa la tabla automticamente se actualizan los mintrminos cuando se termina de ingresar todas las salidas se habilita el comando de siguiente para proceder a la simplificacin.

CUBOS O
"00000 * 01000 "00110 "01010 "01100 * 10001 "10100

0X000
01 0X0 01 XOO

"01110 "10011 "10110 "11001

0X1 1 O X01 1 O 01X10 01 1X0 X1 1 00 1 00X1 1 X001 1 01X0 1 X1 00

Fig. 3.42: Primera pgina de los Cubos O y cubos 1 de una funcin de 5 entradas. En este caso como el nmero de cubos 1 es mayor que 16 mostramos por paginas verticales de 16 en 16 para lo cual se muestra un comando para poder ver las siguientes pginas con los otros cubos 1.

"11011 "11110

1X011 1X110 1 1 0X1 1 1 1 XO

Fig. 3.43: Segunda pgina de los cubos O y de los cubos 1. Cuando se indica la siguiente pagina aparece otro comando para mostrar la pagina anterior.

118

01 XXO

XX1 1 O X1 1 XO 1X O X 1 1X1 XO

0X000 01 XXO XX1 1 O X1 1X0 1 XOX1 1 XI XO

Fig. 3.44: Cubos 2 e Implicantes primos.

TABLA DE SIMPLIFICACIN
0
* _ _ __

10 ,
4 '

12
-; -. -4

l'l

17

19

2O

22

25

27 '

\
f -\ {

c s { >

/, \

X 1 1 X0
1 X O X1

< >, J ^ *, >

1 X 1 X Q-

l !?
*

! '

Fig. 3.45: Primera pgina horizontal de la tabla de simplificacin

2
*

30

A U U Lr^ 1 A A Lr^

>i >

X 1 1 X0
A A U A 1 A 1 U^

/ !> \l .'

SCEENCiALES 0X000
XX1 1 O

01XXO
1X0X1 1X1X0

Fig. 3.46: Segunda pgina horizontal de la tabla de simplificacin e implicantes primos esenciales.

Y^AWE'+CDE'+A'SE'+AC'E+ACE' Fig. 3.47: Solucin simplificada de la funcin de 5 entradas

119

En esta funcin tambin nicamente existe implicantes primos esenciales y la funcin obtenida es igual a la obtenida manualmente. A continuacin se prueba con otra funcin tambin de 5 entradas.

f(A, B, C, D, E) = Zm(1, 2, 3, 5, 9, 10, 11, 18, 19, 20, 21, 23, 25, 26, 27).
Esta funcin fue guardada anteriormente en el disco para lo cual tenemos que abrirlo utilizando el men como se indica a continuacin el siguiente grfico.

Quine McCtuskey: Simplificacin

Funcin TutoMi Teora

Fig. 3.48: Ejecucin del comando para abrir un archivo guardado en el disco Ejecutando este comando aparece la siguiente ventana en la que se selecciona el archivo deseado.

[MASTER tunctnICb.boo functn2.boo funcin3.boo Iunctn3b.boo Iuncion4boo Iuncion4b.boo luncionSboo

I Consultas Qj Piimef Texto presentado C3 TEXTO

JfuncionSb boo
L ^J i

m \. 3.49: Ventana para seleccio

120

Este comando abre la funcin, construye la tabla de combinaciones, actualiza los mintrminos y actualiza el nmero de entradas quedando listo para proceder a la simplificacin. En la figura 3.50 y figura 3.51 se indica el proceso de obtencin de implicantes primos.

|oooon|o
|OOQ1o[l"p' 001 00

OOQO[0

|OOOQl[T'f' 0001 [o

ioooiifi~p' 0011

ooiopr

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

F oioopr

fT

lonnJTp
Fig. 3.50: Funcin abierta

En la figura 3.51 se indica todo el procedimiento para obtener los respectivos Cubos O, Cubos 1, Cubos 2, cubos 3 y los implicantes primos correspondientes a esta funcin que estamos utilizando como ejemplo.

121

CUBOS O
* 0001 O

CUBQS1
000X1 00X01 0X001 0001X 0X01 O X001 O

CUBOS2
0X0X1 OX O1 X X OO1 X XX01O XX01 1 XI 0X1 X 1 O1 X 1 X O1 X

CUBOS 3
| XX 0 1 X

00011
00101 01001 01010 10010 10100 01011 10011 10101 1 1 001 11010

IMPUONTES PRfWOS
00X01 X01 01 1 01 OX 1 0X1 1 101X1 0X0X1 XI 0X1 XX01 X

10111 11011

1 01 OX X I 01 1 1 0X1 1 1 X01 1 101X1 1 1 0X1 1 1 01 X

Fig. 3.51: Proceso de obtencin de los implicantes primos.

En las figuras 3.52 y 3.53 presentaremos la tabla de simplificacin de los implicantes primos, los implicantes primos esenciales, los implicantes primos secundarios y la funcin simplificada.

:-'-

]
f\

T/s.81A DE;S.M PiIF Gid 01 e 9 1 D i i 13


>1 >
1

19

2 ' f\\

X 0 1 0 1
*

f- \ \
1 0 1 X 1 0 X 0 X 1 X 1_ 0 X __ 1 _ _ _ _ H

/ \>, >

ir =
*

.. ., -H 1

-. >

M|

Fig. 3.52: Primera pgina de la tabla de simplificacin.

En el sentido horizontal no alcanzan todos mintrminos por esta razn hace falta otra pgina horizontal para poder mostrar todos los mintrminos.

122

25
*

26

27

X U

JT^

X 0 1 0 1
*

U
U

1 U Jt~
A 1 1 ~

1 0 X X

0 X 1 X

1 0 0 0

X X X 1

1 1 1 X-

':y I

,;

'ESCENeALESSeCUNDARiOS XX01X 00X01 1 01X 10X1 1 XI 0X1


Fig. 3.53: Segunda pagina de la tabla de simplificacin e implicantes primos

En este grfico se puede comprobar que fa funcin tiene 3 implicantes primos esenciales y dos implicantes primos secundarios.

La primera fila de la tabla de simplificacin

contiene a todos los

mintrminos, mientras que la primera columna contiene a los implicantes primos. Tambin se observa que a la izquierda de los implicantes primos estn las marcas de los implicantes primos que son tomados en cuenta como esenciales o secundarios.

Fig. 3.54: Solucin simplificada de la funcin abierta

La solucin contiene los tres primeros trminos que provienen de los implicantes primos esenciales y los dos ltimos trminos que salen de los implicantes primos secundarios.

Funcin 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

( oooooo (irI o 10000(0 | looooo fT 11 0000(1 joooooT 010001|1 f l O O C i G I [T 11 0001(0


(QOQQ1Q

I Q O O O I I [i"loiooii(o(ioocni [o [110011 [o*


000100 (000101 1 (010101 ( 0 0 0 1 1Q,|T|01 011 O o

(ioono|o'|noiio I O O Q I I I |cT|oioTii 0 ( 1 0 0 1 1 1 lo"! 110111'


"l 1 0 1 0 0 0 (fl 111_000|1

J 0 0 1 0 0 1 [v [o 1001(1 (101 d o i

To.

1 J11101 o|o 10011 oo|oj011100(011011 oo[i~|i 11100(0 1111 01 (O 001101 fo 011101 101110(1" 111110(1 O 01110 Jo" 0 1 1 1 1 0
001111 [ O j 0 1 1 111JO J 1 0 1 1 11 ff (1 11 11 1 (0

Fig. 3.55: Tabla de combinaciones de una funcin de 6 entradas.

* oooooi
* * * * 00001 O 000100 001000 100000

CUBOSo
* 101000
* 1 10000 "010101 "011001 "100101 " 101001 "101010 "101100 * 1 1 1000 "011011 "101011 "101101 "101110 Fig. 3.56: Tabla de cubos 0.

CUBOS0
"101111 "111011 "111110

* 00001 1 * 000101 * 001001


* 00101 O

* 010001 "010100
* 01 1000

* 100001
* 10001 O

* 100100

124

CUBOS 1 0000X1 000X01 00X001 0X0001 XOOOOI 00001X 00X01 O X0001O 0001OX 0X0100 X00100 001OOX 0010X0 0X1000 X01000 1OOOOX

CUBOS 1 1000X0 100X00 10X000 1XOOOO 0X0101 X00101 0X1001 X01001 X0101 O 010X01 01X001 0101OX 011OOX X11000 100X01

CUBOS 1
10X001 10X01O 1 OO1 O X 1 OX 1 O O 1 01OOX 1010X0 101X00 1X1000 1 01 1 O X 1011X0 XI 101 1 101X11 1X1011 1011X1 101 1 1 X 1X1110

1 xooo
01 1 0 X 1 10X101 1010X1 01X01 1 0 10 1X 1 0 1X 1 0

Fig. 3.57: Tabla de cubos 1,

CUBOS 2 0X0X01 XOOX01 OXX001 XOX001 XOX01O 0X01OX XQ01OX 0X1OOX X01OOX X010X0 XX1000 * 1OOXOX

CUBOS 3 1 OXXOX

"1OXX01 * 1 0X1 OX * 1 01OXX * 101XOX "101 XXO

1 01 XXX

* 1 01XX1 * 101XIX * 1 01 1 XX

* 1OXOOX 10X0X0 * 1OXXOO 1XXOOO


Fig. 3.58: Tabla de cubos 2 y de cubos 3.

125

IMPLICANTES PRIMOS IMPLICANTES PRIMOS XX1000 0000X1 10X0X0 00001X 1XXOOO 0110X1 1OXXOX X11011 1 01 XXX 1X1011 1X1110 0X0X01 XOOX01 OXX001 XOX001 XOX01O 0X01OX X001OX 0X1OOX X01OOX X010X0 Fig. 3.59: Tabla de implicantes primos.

]
*

TABLA DE SIMPLIFICACIN c 3 2 4 e
G

17

2D

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
X _0 X_ 0 0 _ 1 _ _ _ _ _
'
*

( \

(1 1

\
X 0 0 1 0 X
_

{ >, \t

U X 1 U O X

--

1-1

X 0 1 0 0 X X 0 1 0 X0
,..,,

_J id
simplificacin

Fig. 3.60: Primera pgina Horizontal y Primera pgina Vertical de la tabla de

126

TABLA DE SIMPLIRCACION

1
X X 1 0 0 O 1 0 X 0 X 0 1 X X 0 0 0
-

8 *

10

17

20

21

i
Simplificacin.

^^'1

Fig. 3.61: Primera Pgina Horizontal y Segunda Vertical de la tabla de

TABLA DE SIMPLIFICACIN
24

25

27

32

33

34

36

37

40

41

42

0 O 0 0 1X 0 1 1 0 X 1

c\ \
i

1 X 1 0 1 1

0 X 0 X 0 1

X 0 0 X0 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

pcsr^crur-iAi t=c

r~
simplificacin.

QPi^iiunADiric

Fig. 3.62: Segunda Pgina Horizontal y primera pgina Vertical de la tabla de

TABLA DE SIMPLIFICACIN
24 X X 1 0 0 0 f
! i

25

27

32 ir

33

34 i f

36 { \7 f \0

41

42

1 0 X 0 X 0 1 X X 0 0 0

i i

: 1

^^^^^j ^^B^S

Fig. 3.63: Segunda pgina Horizontal y segunda pgina vertical de la tabla de simplificacin.

127

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

( \\
s \

1 X 1 0 1 1

A l l Lr^

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 X X

0 X 0 0

0 1 1 1

1 0 0 0

0 X 0 X0 X X0

A * -t-r*

Fig. 3.64: Tercera Horizontal y primera vertical de la tabla de simplificacin. TABLA DE SM PURGACIN
43 44

1
*

45

46

47

48

56 -

59

62

X X 1 0 0 0 1 0 X 0 X 0 1 XX0 0 0
U
U

T;

A A U A
1 A A A

<

} \i

ri y ^^

(. 7 \

( V \

(. \>

ce

Fig. 3.65: Tercera pgina Horizontal y segunda pgina vertical de la tabla de simplificacin. ESCENCIALES
0X01OX 101XXX 1XXOOO 1X1110

SECUNDARIOS
OXXOQ1 0X1OOX XOX010 1OXXOX X11011 0000X1

Fig. 3.66: Implicantes primos esenciales y secundarios.

Fig. 3.67: Solucin simplificada de la funcin

128

Funcin 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).

0000000 J0000001 0000010 0000011 0000100 0000101 0000110 0000111 0001000 00010D1 0001010
D00101 1

0 0010QOOJO

0100000
01000D1

1 1 1
0

1
0

1
0 0

0001 1 00 o 0001101 o 0001 1 10 0


0001 1 1 1

110 0 \ 1 1 1 1 1 0 " 0101 i joomi i 0101111 1 0111 111 j F"

0010001 0010010 0010011 00101 00 0010101 00101 10 00101 11 001 1000 001 1001 001 1010 001101 1 0011100 001 1101 J001 1110

0 0100010

1
0

p 0100011 P 01 0 0 1 0 0 p 0100101
F ir ir

01001 10 0 1 0 0 1 11 01101 1 1 0 0101000 01 1 1 0 0 0 [T 0 1 0 1 0 0 1 0111001J 0 0 1 0 1 0 1 0 0 01 1 1 0 1 0 J 010101 1 0111011

1 1

0110000| 0110001 | 011001 O J 011001 1 | 0110100] 0110101 | 01111QJ

p
ir r
1

o "

0101 100 0 0111 100


0101 101 011 1 101

Fig. 3,68: Tabla de combinaciones.

1
2 3 5 7 9 11 15 17 19 21 22 23 25 27 29

000000 1 00000 10 000001 1 0000 10 1 0000 1 11 000 100 1 000 1011 000 1 1 1 1 00 1000 1 00 100 1 1 00 10 10 1 00101 10 00101 1 1 00 1 1 00 1 00 1 10 1 1 00 1 1 101

MINTERMINOS

MINTERMINOS

30 31 33 37 38 39 41 43 45 47 49 51 53 55 57 59

0 0 1 1 1 1 1) 001111 01 0000 010010 01 001 1 ) ( 010011 010100 010101 0101 10 010111


01 1 000 01 1 001 011010 011011 011100 011101

61 65 66 67 69 71 73 75 77 79 81 83 85 87 91 93

01 1 1 1 01 1 0 000 0 1 1 00 00 1 0 1 0000 1 1 1 0 00 1 0 1 1 000 1 1 1 1 00 1 00 1 1 00 1 0 1 1 1 00 1 1 0 1 1 00 1 1 1 1 1 0 1 000 1 1 0 1 00 1 1 1 01 01 01 1 01 01 1 1 1 0 1 1 01 1 1 01 1 1 01

Fig. 3.69: Mintrminos.

129

95 97 99 101 103 105 107 109 111 113 115 117 119 121 123 125

1011111 1 100001 1 1 0001 1 1100101 1100111 1 1 01 0 0 1 1101011 1101101 1101111 1 1 10001 1110011 1110101 1110111 1111001 1111011

Al H |

MINTERMINOS 127 1 1 1 1 1 1 1

1111101

IB

*j .

Fig. 3.70: Mntrminos.

A continuacin se indica los cubos ceros.

CUBOS O *OOOOOQ1 * 000001 0


* 0 0 0 0 0 11 "0000101 * 000 100 1 * 001 0001 * 0 1 0000 1 * 100 0 001 * 1000010

* 001 1 001 * 01 0 0 1 01
0 1 0 0 1 10 " 0 1 0 1 001 * 01 1 0 0 0 1
* 1000011 '' - ; * 1 0 0 0 1 01

Al * 01 0 0 1 1 1 jQ " 0 1 0 1 0 1 1
0 1U1 10 1 "0110011 * 01 1 0 1 01 "0111001 "1000111 "1001011 "1001101 "1010011 iU 1 U 1U1 "1100011 " 1 1 0 0 1 01 * 1 1 01 0 0 1 "1110001

Al " 0 0 1 1 1 1 1 JH " 0 1 0 1 1 1 1
0110111 "0111011 . - * 01 1 1 1 0 1 * 10 0 1 1 11 "1010111

A] " 1 0 1 1 1 1 1 JH " 1 1 0 1 1 1 1 "1110111 J: " 1 1 1 1 0 1 1 "1111101 "1111111

* 1 o o 1o n i
" 1 01 0 0 0 1 * 1 100001 * 0001 1 11 "0010111 "0011011

* 1o 1 1n 1 i
"1011101 "1100111
1 1 v I U I 1 - *

* 00001 11 * 0001 0 1 1 " 001 001 1

"1101101
"1110011 * 1 11 01 01


v v. ; ;,,

" 001 o 01 [si * 0 0 1 1 1 01 * oo 1 o 1 1 o IB * n n 1 1 1 1 n

wi

jA
n-?M

"1111001

m
"3$

Fig. 3.71: Cubos O

130

Desde la figura 3.72 hasta la figura 3.74 se indican los cubos unos.
CUBOS1 CUBOS 1

00000X1 0000X01 000X001 00X0001 0X00001 X000001 000001X X00001 0 0000X1 1 000X01 1 00X001 1 X00001 1 00001X1 00X0101 0X00101

X000101 00010X1 00X1 001 0X01 001 X001 001 001 00X1 001 0X01 001 X001
f\v i f\ i

Al 100x001 TI 10X0001 1X00001 1 00001 X 000X1 1 1 00X01 1 1 0X001 1 1


V f\ U 1 1U A U

CUBOS 1

X01 001 1 T | 00101X1 001X101


0X1 0 1 0 1 X01 01 01 001 01 IX

Al

CUBOS 1

Al 0 1 0 1 X 0 1 3 0 1 X 1 0 0 1
XI 01 01 01 XI 01 001 1 00X1 1 0X01 1 X001 1 0001

001X110
001 1 0X1 001 1 X 0 1 0X1 1 001

UX 1 U 0 1

1 1 1

* | 10000x1 W\J1000X01

X01 0001 01 00X01 01 0X001 01 X0001 XI 00001

jy 001x01 1
T | 0X1 001 1

0001 XI 00X1 01 0X01 01 X001 01 001 0X1

1 1 1 1 1

01001X1
01 0X1 01 01 X01 01 XI 001 01 * | 0 10 0 1 1 X 5 ] 0 1 0 1 0X1

1 000X1 1 1 00X0 1 1 1 0X001 1 1 X0001 1


1 0001 XI 1 00X1 01 1 0X01 01 Jl 1 X001 01 ' W 1 001 0X1

Fig. 3.72: Cubos 1

CUBOS 1

CUBOS 1

i 001 x o i
1x01001
1 01 0 0 X 1 1 01 0X01 1 XI 0 0 0 1 1 1000X1 1 100X01 1 1 0X001 1 1X0001 00X1 1 1 1 0X01 1 1 1 X001 1 11 001X111 0X10111 X 0 1 01 1 1

Al 0 0 1 1 x 1 1 JQ o x i 1 0 1 1
X 0 1 1 01 1 001 1 1X1 0X1 1 1 01 X 0 1 1 1 01 001 1 1 1 X 01 0X1 11 01 X 0 1 1 1 X I 0 0 1 11 0101X11 01X1011 XI 01 01 1 01011X1 fr) 01X1101 X 1 0 1 10 1

CUBOS 1 0110X11 01 1 X 0 1 1 XI 1 001 1 01101X1 011X101 XI 1 01 01 0 1 1 1 0X1 01 1 1 X01 XI 11 0 0 1 1 00X1 1 1 1 0X01 1 1 1 X001 1 1 1001X11 1 0X1 01 1 1 1 1 X 0 1 01 1 10011X1

Al 1

CUBOS 1 Al Tj 1 X 0 1 1 01 1 01 0X1 1 101X011 1X10011 10101X1 101X101 1X10101 1 1 00X1 1 1 1 0X011 1 1 X001 1 11001X1 1 1 0 X 1 01 1 1 X 0 1 01 jlj 1 1 0 1 o x i W\ o1 x1i 011 0x 10 1

CUBOS 1 Si 1 1 1 00X1 1 1 1 0X01 1 1 1X001

X01 1 1 1 1 XI 01 1 1 1 XI 1 01 11 X1 1 1 0 1 1 XI 1 1 1 01 1 0X1 1 1 1 1 X01 1 1 1 101X111 1X10111 jrj 1 0 1 1 X 1 1 AjW\1 1 X 1 1 0 1 1

Fig. 3.73: Cubos 1

131

CUBOS 1

CUBOS 1

lonixi
1X11101 1 1 0X1 1 1 1 1X01 1 1 1101X11 11X1011 11011X1 11X1101 1 1 1 0X1 1 111X011 11101X1 111X101 1 1 1 1 0X1 1 1 11X01

11X1111 j ] 111X111 1111X11 11111X1

Al

1x11111

1 X VI

Fig. 3.74: Cubos 1

Desde la figura 3.75 hasta la figura 3.77 se indican los cubos 2.

CUBOS 2
OOOOXX1 000X0X1 00X00X1 XOOOOX1 00X0X01 0X00X01 XOOOX01 OOXX001 0X0X001 XOOX001 OXX0001 XOX0001 XX00001 X00001 X OOOXX1 1 ffl

CUBOS 2
00X0X11 XOOOX11 OOXX01 1 XOOX01 1 XOX0011 0 0 X 0 1 X1 0 X 0 0 1 XI X 0 0 0 1 XI O X X 0 1 01 X O X 0 1 01 XX001 01 00X1 0X1 0X01 0X1 X 0 0 1 0X1 XX01001 Al 10

n y 11v n\J n 11 U y /\S

Al 0 X 0 1 X I 1 T| X 0 0 1 X 1 1 O X X 1 01 1 X01 00X1 X O X 1 01 1 001 XX01 X X 0 1 01 1 0X1 0X01 001 XX1 1 X01 0X01 0X1 0X1 1 0X1 X001 X01 0X1 1 XX1 0001 0X1 X01 1 01 O X X 0 1 OOXX1 1 1 X01 X01 1 01 X O X 0 1 0X0X1 1 1 X X I 00 1 1 XI 0 0 X 0 1 XOOX1 1 1 001X1X1 01 X X O Q 1 OXX01 1 1 0 X 1 01 XI XI 0 X 0 0 1 X 0 1 01 XI XOX01 1 1 n y i y i ni yU n\Jn 1 y y 1 .A. U ) XV 1 .A. 1 \J 1 />. 1 1 /*^yo v vn U o 1 i ^tl ^H A. 1 1 1 1 i i. ^ t l 1 0 0 0 X X 1 Tj X " 0 0 x 1 xi i T] 0 1 X I 0 1 001X0X1 100X0X1 T\1 1 00 0X X0 10 X 1 1X000X1 1 OOXX01 1 0X0X01 1X00X01 1X0X001 1XX0001

CUBOS 2 ooioxxi

Al

Fig. 3.75: Cubos 2

133

CU8OS8
OOXOXX1 XOOOXX1 OOXXOX1 XOOXOX1 XOXOOX1 OXXOX01 XOXOX01 XXOOX01 OXXX001 XXOX001 XXX0001 OOXXX1 1 XOOXX1 1 XOXOX1 1

CUBOS3

oxxoixi
XOX01X1 XX001X1 XXX0101 OXX1 0X1 XX010X1 001 XXX1 0X1 O X X 1 X01 OXX1 0X1X0X1
r
X X I 00X1

'M x i x x o o i
H .

i ooxxxi

M XX1 0X1 1 l X X 1 X 0 1 1
X01X1X1 XX1 0 1 X 1 X X 1 XI 01 XI 0 X 1 X 1 X1 X 0 1 X1 X 1 X X 1 01 X I 01 X X I X1X1 0X1 X1 X I X 0 1 XI 1 O X X 1 X1 1 X 0 X 1 XI 1 X X 0 1 1 OXXX1 1 1XOXX1 1

10XOXX1 1XOOXX1 1X0X0X1 1XXOOX1 1XOXX01 1XXOX01 XOXX1 11 XXOX1 11 XXX01 11 X O X 1 XI 1 X X 0 1 XI 1

0X1 XX01 XX 1 0 X 0 1 01 X X X 0 1 [jg

xoxxoi 1 \m

xioxxoi

X1XOX01

a| x x x i o n 1H< x o i x x n

mt m

Fig. 3.78: Cubos 3

CUBOS3

1XXOX11 1XXX01 1 1 OXX1XI 1XOX1X1 1XX01XI 1XXX101 1X01XX1 1X1OXX1 11OXXX1 11XOXX1 11XXOX1 11XXX01 1XXX111 1XX1XI1 1XX11X1

1X1XX11 1X1XIX1 1 1XXX1 1 11XXIXI 1 1X1XXI 1 1 1XXXI

Fig. 3.79: Cubos 3

134

CUBOS 4

xoxoxxf
XXXOX01 XOXXX11 XXX01X1 XXIOXX1 X1XXX01 1XOXXX1 1XXOXX1 1XXXX11 1XXX1X1 11XXXX1

Fig. 3.80: Cubos 4 En la figura 3.81 se indican los implicantes primos. IMPLICANTES PRIMOS IMPLICANTES PRIMOS IMPLICANTES PRIMOS 01001 1 X X01X1X1 11XXXX1

X00001X 001XI1X OOXXOX1 XOOXOX1 OXXX001 XXOX001 OXX10X1 XX010X1 001XXX1 0X1X0X1 0X1XX01 XXOX111 XX01X11 XXXI011 XXIX011

XX1X101 XI0X1X1 X101XX1 XIXI0X1 X11X0X1 XOXOXX1 XXXOX01 XOXXX11 XXX01X1 XX1OXX1 X1XXX01 1XOXXX1 1XXOXX1 1XXXX11 1XXX1X1
Fig. 3.81: Implicantes primos

Desde la figura 3.82 hasta la figura 3.96 se indican la tabla de simplificacin

135

TABLA DE SIMPLIFICACIN

2
/ s 4. ;

3
fL \
1

7
1

15

17

19

X O U O O 1 JS~

-,

0 0 X X 0 X 1

.
0 X X X 0 0 1
X X 0 X 0 0 1

T _

( \1
~

"
X X 0 1 0 X 1
*

T ,
T

0 X 1 X 0 X 1 0 X 1 X X 0 1 X X 0 1 X 1 1 X XX 1 0 1 1 X X 1 X0 1 1

*
T

Fig. 3.82: Tabla de Simplificacin

TABLA DE SIMPLIFICACIN
21
*

22

23

25

27

29

30

31

37

f\
0 0 X X 0 X 1

t \
*

i )

f\3

0 X X X 0 0 1 X X 0 X 0 0 1 isfl 7 X X0 1 0 X 1

f \
0 X 1 X 0 X 1 0 X 1 XX0 1 X X0 1 X 1 1 X XX 1 0 1 1 X X 1 X0 1 1
T

* *

Fig. 3.83: Tabla de Simplificacin

136

3
"

39

41

43

47
, <

49

53

55

( -, \ J

c\ )

1.

0 0 X X 0 X 1 0 X X X 0 0 1 X X Q X 0 0 1 X X 0 1 0 X 1

t t
(3

\5

1
0 X 1 X 0 X 1 0 X 1 X X 0 1
X O X 1 1 1

t
1

X X 0 1 X 1 1 X X X 1 0 1 1 X X 1 X 0 1 1
1
i

'

j ii
i
1

"V

Fig. 3.84: Tabla de Simplificacin

TABLA DE SIMPLIFICACIN
57
59

61

65

6 / \f

6 t \h t

69

71

75

* *
0 0 X X0 X 1

_
( \ \

0 XXX0 0 1 X X 0 X 0 0 1

* *

X X 1 O X 1

f.

)
T

X X 0 1 0 X 1 0 X 1 X 0 X 1 0 X 1 X X 0 1
X U X 1 1 1

* V

i V m

X X 0 1 X 1 1 X XX 1 0 1 1
X X 1 X 0 1 1

4
Fig. 3.85: Tabla de Simplificacin

137

77
-"

TABLA DE SIMPLIFICACIN 79 91 81 83 e 5 87

93

95

97

*
a

0 0 X X 0 X 1 0 X X X 0 0 1 ;

X X0 X 0 0 1 X X 0 1 0 X 1

'.
i

*
0 X 1 X 0 X 1

o xi r xoi
X X 0 1 X 1 1

1
T

m mm

X X X 1 0 1 1 X X 1 X 0 1 1

Wf

Fig. 3.86: Tabla de Simplificacin

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

^
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
Fig. 3.87: Tabla de Simplificacin

fV*

138

119
*

12 1

12 3

12 5

127

..1 , 0 0 X X 0 X 1 u u x u & i
0 X X X 0 0 1 X X 0 X 0 0 1
_]

i j
i

1
i

X X 0 1 0 X 1
U 1 X A X 1

h""
~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 X X X 1 0 1 1 X X 1 X0 1 1

Fig. 3.88: Tabla de Simplificacin

i 1
*

3L X 0 1 X 1 X1 X X 1 X 1 0 1 X 1 0 X 1 X 1 X X X X X X X X 1 1 1 1 1 0 0 X X 1 X X 0 X 1 X X X 1 X 0 X 1 1 X 0 X 0 O X X 0 X 0 0 X X 1 X X X X X X X X 1 1 1 1

11

15

17

19

*
f
.**
w
;*-

f \
1 1 X 1 X 1 0 1 X 1 X 1

-'

f il \f

'f ;_

-- -.

.4.

( _

,_

1 XX X X 1 1 1 X X X 1 X 1-

, . -^ .

^.~

fH

Fig. 3.89: Tabla de Simplificacin

139

TABLA DE SIMPLIFICACIN
21

22

23

25

27

29

30

X X X X X X X

0 X 1 1 1 1 0

1 1 0 0 X 1 X

X X X 1 1 X 0

1 1 1 X 0 0 X

X 0 X X X X X

1 1 1 1 1 1 1
/ l

31

33

37

k)

f. \ {

/. \ \

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
Fig. 3.90: Tabla de Simplificacin

P >

TABIA DE SIMPLIFICACIN
39
X 0 1 X 1 X1 X X1 X1 0 1

39

41

43

! 45

47

49

53

55

X 1 0 X 1 X1
X X X X
*

1 1 1 0

0 X 1 X

1 1 X 0

X 0 0 X

X X X X

1 1 1 1

Jr
t

i /1 1. > / , v > i

X 0 X X X 1 1 X X X 0 1 X 1
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

Fig. 3.91: Tabla de Simplificacin

140

57
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 i X 0 X 0 X X 1
* 1 '

TABLA DE SIMPLIFICACIN 59 61 65 66 67 69
1

73

75

'

/ > 1)
X 0 X X X 11 X X X 0 1 X 1
1 A A A U 1-

/ .,, <! & 1


T-

1 X 0 X X X 1 1 X X 0 X X 1 1 X X X X 1 1 1 X X X 1 X 1-

'

\ 1

J! J[ ^

* .

Fig. 3.92: Tabla de Simplificacin

77
X 0 1 X 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
*

TABLA DE SIMPLIFICACIN 79 a 1 83 85 87 91
1

93 ir i

95 iF

97

f\ 'i

f ! i V. 7
T-

X 0 X X X 1 1 X X X 0 1 X 1
V _ _ _ _ _ . _ .

1k

- '.

<s ) ^

1" "

.
f

X 1 A X A U 1

1 X0 X X X 1 1 X X 0 X X 1

T
1

_..

1 X X X X 1 1 1 X X X 1 X1 .
*-_-

*
,,

!*~

* ^r_.

^^ ^

Fig. 3.93: Tabla de Simplificacin

141

TABLA DE SfM PI.1 FICACION


99
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
1

1C

10 3

1C 5

10 7

10 9

11 1 11

11 5 11

1
1

X 1 X1 0 X1 X i 1 X0 X1
X 0 X 0 X X 1
*

f
i
v r*

\> ^

f s >

/ ,

\ &

OA2 X 1 1

*r

ir

*r

X XX0 1 X 1
X 1 U A A 1
')
1

1 X 0 X X X 1
1 X X 0 X X 1 1 X X X X 1 1
4 - 1 *T X T X * X 1 X1

-y

Fig. 3.94: Tabla de Simplificacin

DE SfMPUPCAGION 11 9 12 1 12 3 12 5
X X X X X X X 0 X 1 1 1 1 0
U

12 7

1 1 0 0 X 1 X

X X X 1 1 X 0

1 1 1 X 0 0 X

X 0 X X X X X
1

1 1 1 1 1 1 1
1

' 1'

'

A A U A U 1
A A A

X X X 0 1 X 1
A 1 U A A i

ih r

r
.. ..

1 & A A U 1

'fl

1 X 0 X X X 1 1 X X 0 X X 1 1 X X X X 1 1

Fig. 3.95: Tabla de Simplificacin

142

TABLA DE SIMPLIFICACIN 1 5 7 2 3 9 11
| 1 1 21
22

15

17

19

| t 1
23

| T 1

^W
27
29

25 1 1

30

31

33

37

TABLA DE SIMPLIFICACIN
38 39 1 1

41 ,
!

43 I 1 1

45

47 1

49 1 1

51

53 55 | 1

A i iro

TABLA DE SIMPLIFICACIN

57 i

59 1 I

61

65
i

66

67 | I

69

71 i

1 1

73 J 1 1

75

TABLA DE SIMPLIFICACIN
77
1

79

81

83

85

87
!

91

93
1

95

97

^E9r

TABLA DE SIMPLIFICACIN
99
101

jfSr

1 1 X X X X 1-

103 A

105

107
\\

109
T

111

113

115
l.

117

T T

TABLA DE SIMPLIFICACIN
119 1 1 X X X X 1121
T

123
(ti

125

127 ,
;

'T

Fig. 3.96: Tabla de Simplificacin

En la figura 3.97 se presenta los implicantes primos esenciales y secundarios

SECUNDARIOS
X00001X 001X1IX 01 0 0 1 I X XXXOX01. X1XXX01 1XXX1X1 11XXXX1 XOXXX11 OXX10X1 XX1OXX1 XOOXOX1 001XXX1J

XXOX11 Fig. 3.97: Tabla de Simplificacin

144

CAPITULO IV CONCLUSIONES. 4.1


-

COMENTARIOS.
El mtodo de simplificacin Quine-McCIuskey es un mtodo tabular que se debe tener cuidado en el desarrollo del mismo para no cometer equivocaciones, lo cual provocar que la simplificacin no sea mejor.

El programa de simplificacin del presente proyecto de titulacin es muy simple de utilizar, ya que est hecho para correr bajo el sistema Windows y prcticamente en cualquier Computador Personal, ya que fue desarrollado en una mquina Pentium I, con 24 MB de memoria RAM.

Para desarrollar el programa se us el lenguaje de programacin Visual Basic 6.0, ya que tee las herramientas necesarias para disear este programa.

Cada uno de los cubos n se almacena en una matriz que tiene el nmero de filas de acuerdo al mayor nmero de cubos encontrados durante el desarrollo, por ejemplo si se encontraron 80 cubos, entonces la matriz tendr 80 filas; mientras que el nmero 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.

La tabla de simplificacin tambin se construye basndose en una matriz en la que se ubican las marcas, dependiendo de los implicantes primos(filas), y los mintrminos de la funcin original (columnas).

Si se usa el programa hasta 5 variables de entrada se ha incluido un retardo en cada uno de los pasos para visualizar de mejor manera, y entender el proceso de simplificacin, estos retardos se incluyen para facilitar el proceso de aprendizaje, puesto que se trata de un proyecto de titulacin didctico. Mientras que para un nmero mayor de variables no se introducen estos

145

retardos de tiempo porque, en este caso se necesita simplificar lo ms rpido posible y obtener la funcin simplificada sin importar el proceso. El archivo que contiene la teora del mtodo de simplificacin tabular QuineMcCIuskey se encuentra en el CD con el nombre Texto.rtT.

4.2

CONCLUSIONES.
Luego de terminar este trabajo se pueden obtener las siguientes

conclusiones: Las ecuaciones con ms de 6 variables de entrada no se pudieron comprobar manualmente debido a que el mtodo grfico del mapa de Karnaugh ya no es aplicable, y el tiempo que tomara la simplificacin manual de una funcin de tantas variables de entrada, sera demasiado largo, y poco confiable. El programa puede ser usado como un tutorial de aprendizaje usando hasta 5 variables de entrada, mientras que se puede usar profesionalmente para un nmero mayor de variables de entrada. Este programa encuentra la funcin simplificada verdadera debido a que calcula los implicantes primos esenciales, y los implicantes primos secundarios de menor costo. El tiempo de demora de simplificacin del programa es casi imperceptible hasta una funcin de 3 entradas; mientras que hasta 6 entradas, el tiempo que emplea es de nicamente unos pocos segundos; para un nmero alto de variables el tiempo empleado es un poco alto, pero adecuado y aceptable, considerando la cantidad de operaciones que se deben realizar hasta obtener la funcin totalmente simplificada. 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

clculos involucrados en el proceso. Esto ayuda a revisar el proceso de simplificacin y regresar a cualquier paso del mismo.

4.3
-

RECOMENDACIONES.
Este programa se puede usar tanto como un tutorial de aprendizaje de simplificacin de funciones booleanas utilizando el mtodo de Quine-McKIusky como para simplificar funciones booleanas de hasta 10 variables de entrada con propsitos profesionales.

Este programa se puede cambiar, para utilizarlo en la simplificacin de una funcin de ms de 10 variables de entrada, nicamente utilizando una computadora ms veloz y con una cantidad grande de memoria RAM para almacenar las matrices de los cubos y la tabla de simplificacin.

Los cambios que se deben hacer son: Definir matrices de mayor orden en la rutina de mdulos, ya que este programa est desarrollado definiendo matrices lo suficientemente grandes como para no tener problemas en la simplificacin de hasta 10 variables de entrada, adems en la rutina de escritura de la solucin se debe incluir ms lneas de programacin que permitan ingresar las variables adicionales.

El programa permite realizar la simplificacin de una funcin mientras se revisa la teora de simplificacin o tambin se revisa el tutorial de uso del programa, permitiendo de esta manera utilizar el programa como una gua de aprendizaje y manejo.

147

BIBLIOGRAFA.
M. MORRIS MANO, Lgica Digital y Diseo de Computadoras, Prentice hall, 1982. Mxico. Cornell Gary, Visual Basic 6.0 Manual de Referencia, Me Graw Hill, 1999, Espaa. Ronald J. TOCCI, Sistemas Digitales. Principios y aplicaciones, Sexta edicin, 1996. Mxico. Fredrick J. Hill/ Gerald R. Peterson, Switching Theory & Logical Design, Tercera Edicin, 1981, New York. John F. Weakerly, Diseo Digital, Principios y prcticas, 1992, Mxico Maurice Bird & Roy Schmidt. Practica! Digital Electronics, Laboratory Workbook, Hewlett- Packard, Santa Clara California, 1974. Manual de circuitos integrados TTL de la Texas Instruments, Second Edition, 1981. Apuntes de Sistemas Digitales EPN. 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.
LISTADO DEL CDIGO DEL PROGRAMA. MODULO 1 Public ColorInicialBotones As ButtonConstants Public ColorEnfoque As ButtonConstants Public e As Integer Public f(0 To 1023) As String
Public FigNum As Integer

Public n As Integer Public num_tema As Integer 'indica el numero de frame que se va a mostrar es utilizada en la forma Indice_tutorial
Public m As Integer

Public pagina As Integer Public paginal As Integer Public paginaO As Integer Public r(0 To 1023) As Integer Public Tutor 'contiene el valor que indica el tema del tutorial Function valida_Numero(k) Select Case k CaseS, 13, 32,46,48 To 57 valida_Numero = k Case Else valida_Numero = O End Select End Function FORM1.
Prvate Type Registro

combinacin As String * 20 respuesta As Strng * 1 End Type Prvate dato As Registro Prvate Grupo(2047,16) As Integer Prvate s(2047) As String Prvate c(2047, 16) As String * 20 Prvate O(2047,16) As String Prvate contv(2047) As Integer Prvate conth(2047) As Integer Prvate fl(16) As Integer Prvate Marca(2047, 16) As String Prvate Tabla(2047, 2047) As String Prvate flaAnulada(2047) As Boolean Prvate columnaAnulada(2047) As Boolean Prvate numeroFa(2047) As Integer Prvate fila As Integer Prvate col As Integer

149

Prvate MaxColCubos As Integer Prvate max As Integer


Prvate MaxCol As Integer

Prvate Auxl As Integer Prvate Aux2 As Integer Prvate ultima As Boolean Prvate Implicantes As Boolean Prvate Tablalmplicantes As Boolean Prvate marcas As Boolean Prvate lineas As Boolean Prvate Resultado As Boolean Prvate escenciales As Boolean Prvate ancho Prvate alto
Prvate valizcom

Prvate PaginaHorizontal Prvate PaginaVertcal Prvate NumeroGrupo Prvate espacio Prvate ColorLinea Prvate Tiempo
Const ColumnasDeTabla =17

Sub simplifiqueQ 'Esta funcin simplifica la funcin directamente y da la respuesta Commandl.Enabled = False 'Para desabilitar el comando de siguiente Simplificar.Enabled = False 'Para desabilitar el men de simplificar Commandl4,Enabled = False 'Para desabilitar el comando de terminara Simppaso.Enabled = False Tara desabilitar el men de simplificar el siguiente paso Command2.Enabled - False 'Para desabilitar el botn de paso anterior Simplificaranterior = False 'Para desabilitar el Men de paso anterior Command3,Enabled = False 'Para desabilitar el botn de Salir Menu.Enabled = False Tara desabilitar el Men Text4,Locked = Truc 'Bloque el Editor de minterminos MousePointer = vbHourglass 'Cambia la forma del cursor del mouse a un reloj Titulo(2).Visible = False 'Esconde el titulo Mensaje.Top = Text4.Top + Text4.Height + 500 'Posicin vartical del mensaje Mensaje.Visible = True 'Hace visible el mensaje raya = " " 'borra la variable raya For i = 1 To n 'Ubica tantas lineas como se necesiten raya = raya & "--" Next i DoEvents 'Actualiza los eventos ejecutados If lineas = True And Resultado = False Then 'Esta seccin Genera la solucin Titulo(O). Visible = False Titulo(l). Visible = False Mensaje.Caption = "Generando la solucin!" Mensaje.Left = (Forml.Width - Mensaje.Width) / 2 Command 10. Visible = False Commandl 1.Visible = False Commandl2.Visible = False Commandl3.Visible = False

150

Picturel. Visible = False List2(0). Visible = False List2(l). Visible = False Texto = "Y = " F o r i = l Tofil(col+l) Ifn<5Then Timer 1 = Timer Do DoEvents Loop While Timer - Timer 1 <= Tiempo Else DoEvents Endlf For j = 1 To Len(c(i, col + 1)) If Mid(c(i, col + 1), j, 1) = "O" Then If j = 2 Then Texto = Texto & "A1" If j = 4 Then Texto = Texto & "B'M If j = 6 Then Texto = Texto & "C" If j = 8 Then Texto = Texto & "D"1 If j = 10 Then Texto = Texto & "E1" If j = 12 Then Texto = Texto & "F" If j = 14 Then Texto = Texto & "Gm If j = 16 Then Texto = Texto & "H"' If j - 18 Then Texto = Texto & "I"' If j = 20 Then Texto = Texto & "J"' Endlf If Mid(c(i, col + 1), j, 1) = "1" Then If j = 2 Then Texto = Texto & "A11 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 - Text6 & "H" If j = 18 Then Texto = Texto & T' If j = 20 Then Text6 = Texto & "J" Endlf Nextj If i o fil(col + 1) And Mid(c(i, col + 1), j, 1) o "X" Then Texto = Text6 + " + If Len(Text6) < 50 Then Texto,Width - 130 * Len(Text6.Caption) + 130 / Len(Text.Caption) + 200 Text6.Height *= 500 Else Text6.Height = 4*330 Text.Width = 130 * 50 + 130 / 50 + 200 Endlf Text.Left = ((Forml .Width / 2) - (Text.Width / 2)) + 200 Text.Top = (Forml.Height / 2) - Text.Height

151

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

Texto.Width = 130 * Len(Text6.Caption) + 130 / Len(Text6.Caption) + 200 Text.Height = 500 Else Text.Height = 4 * 330 Texto.Width = 130 * 50 + 130 / 50 + 200 Endlf Text.Left = ((Forml.Width / 2) - (Texto.Width / 2)) + 200 Text.Top = (Forml.Height / 2) - Text.Height Texto. Visible = Truc DoEvents Next i If fil(col + 2) > O Then Texto = Texto & " + " For i = 1 To fl(col + 2) If n < 5 Then Timer 1 = 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"1 If j = 4 Then Texto = Texto & "B"' If j = 6 Then Texto = Texto & "C" If j = 8 Then Texto - Texto & "D1" If j = 10 Then Texto = Texto & "E"1 If j = 12 Then Texto = Texto & "F" If j = 14 Then Texto = Texto & "G"1 If j = 16 Then Texto = Texto & "H1" If j = 18 Then Texto = Texto & "I"' 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(Text)<50Then

171

Texto.Width = 130 * Len(Text.Caption) + 130 / Len(Text6.Caption) + 200 Text.Height = 500 Else Text6.Height = 4 * 330 Texto.Width = 130 * 50 + 130 / 50 + 200 Endlf Text.Left = ((Forml.Width / 2) - (Texto.Width / 2)) + 200 Text.Top = (Forml.Height / 2) - Text.Height Text.Visible = True DoEvents Next i Resultado = True Endlf If escenciales = True And lineas = False Then Mensaje.Caption = "BUSCANDO IMPLICANTES PRIMOS SECUNDARIOS!" Mensaje.Left = (Forml.Width - Mensaje.Width) / 2 fila-O Do marcasmax = O For i = 1 To fil(col) conth(i) = O Forj = lTofil(0) If Tabla(i, j) = "*" And fIaAnulada(i) = False And columnaAnulada(j) = False Then conth(i) = conth(i) + 1 If marcasmax < conth(i) Then marcasmax = conth(i) Endlf Nextj Next i For j = 1 To fil(col) If conth(j) = marcasmax And filaAnulada(j) = False And marcasmax > O Then sihay = False For i2 = 1 To fil(O) If Tabla(j, i2) = "*" And columnaAnulada(i2) = False Then co1umnaAnulada(i2) = True numeroFila(i2) = j mostrarmarcas Ifn<5Then Timerl = Tmer Do DoEvents Loop Whle Timer - Timerl <= Tiempo Else DoEvents Endlf sihay = True Endlf Next 2 If sihay = True Then

172

flaAnulada(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 fl(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 If marcas = Truc And escenciales = False Then Mensaje.Caption- "BUSCANDO IMPLICANTES PRIMOS ESENCIALES!" Mensaje.Left = (Forml.Width - Mensaje.Width) / 2 Mensaje.Visible = True DoEvents contvmax = O For i - 1 To fil(O) contv(i) = O For j = 1 To fil(col) If TablaQ, i) = "*" Then contv(i) = contv(i) + 1 Nextj If contvmax < contv(i) Then contvmax - contv(i) Next i fila = O ColorLinea = RGB(0, 255, 0) For i = 1 To fl(O) If contv(i) = 1 And columnaAnulada(i) = False Then columnaAnulada(i) = True mostrarmarcas Ifn<5Then Timerl = Timer Do

173

DoEvents Loop While Timer - Timerl < Tiempo Else DoEvents Endlf Forj = lTofd(col) If TablaG, i) = "*" And filaAnuladaO) = False Then flaAnulada(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 fl(col+l) = fila fila = fil(col-l) If MaxCol < col + 1 Then MaxCol = col + 1 If max < fil(col + 1) Then max = fl(col +1) escenciales = True Endlf If Implicantes = True And Tablalmplicantes = False Then Tara construir la tabla de simplificacin

174

Mensaje.Caption = "Construyendo la tabla de simplificacin!" Mensaje.Left = (Forml.Width - Mensaje.Width) / 2 DoEvents If Aux2 o col Then For i = 1 To fil(O) s(i) = O(i, 0) Next i For i - 1 Tofil(O)- 1 Forj = i + l T o f i l ( 0 ) If Val(s(i)) > Val(sG)) Then aux = s(i) s(j) = aux Endlf Nextj Next i For i = 1 To fl(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 combinacin con la que hay el cambio cpos = pos 'rescata la posicin del bit que cambia Endlf DoEvents Next pos If cont - 1 Then fila = fila+1 c(fla, 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(fla, 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 fl(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

Titulo(0).Caption = "CUBOS " & col - 2 Listl(0).ToolTipText = "Tabla de cubos " & Str(col - 2) mostrarlistlO Listl(l).ToolTipText = "Tabla de cubos " & Str(col - 1) Titulo(l).Caption = "CUBOS " & col - 1 mostrarlistl 1 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=lTofl(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).Capton= "IMPLICANTES PRIMOS" Listl(l).ToolTipText = "Tabla de Implicantes primos " mostrarlistll If MaxCol < col + 1 Then MaxCol = col + 1 If max < fl(col) Then max = fil(col)

178

Implicantes = True Endlf If col = O Then 'Para Construir la tabla de los cubos O Command4.Enabled = False Command4. Visible = False CommandS.Enabled = False Command5. Visible = False CommandS.Enabled = False Mensaje.Caption = "Calculando los cubos O!" Mensaje.Le = (Forml.Width - Mensaje.Width) / 2 DoEvents For i = O To Text2.UBound Text3(i).Visible = False Text2(i).Visible = False Next DoEvents col = col + 1 IfMaxCol = OThen fila = O For i = O To 2 A n - 1 Ifr(i)=lThen fila = fila+1 c(fila, 0) = f(i) O(fila, 0) - i Endlf Next i fil(O) = fila fila = O Forj = OTon sihay = False For i = O To 2 A n - 1 Ifr(i)=lThen cont = O For pos = 1 To 2 * n Bit = Val(Mid(f(i), pos, 1)) If Bit = 1 Then cont = cont + 1 Next pos If cont = j Then fila = fila + 1 c(fila, col) = f(i) O(fla, col) = Str(i) Grupo(fila, col) = j sihay = True Endlf Endlf Next i If sihay = True Then fila = fila + 1 c(fila, col) = raya

179

O(fla, col) ="-" Grupo(fla, col) = j Endlf Nextj fl(col) = fila Endlf Label3(0). Visible - False Label3(l). Visible = False Titulo(0).Caption = "MTNTERMINOS" Titulo(0).ToolTipText = "Tabla de MINTERMINOS" mostrarlistlO Titulo(l).Capton = "CUBOS O" TituLo(l).ToolTipText = "Tabla de cubos O" mostrarlistll If MaxCol < col Then MaxCol = col If max < fl(col) Then max = fl(col) Endlf If Resultado = False Then Commandl .Enabled = True Simplificar.Enabled = True 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 Prvate Sub Commandl_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Commandl.BackColor = ColorEnfoque Command2.BackColor = ColorlnicialBotones CommandS.BackColor = ColorlnicialBotones Commandl 4.BackColor = ColorlnicialBotones End Sub Prvate Sub Commandl0_Click() PaginaVertical = PaginaVertical + 1 mostrarTabla mostrarmarcas If fil(col + 1) > O Then mostraresenciales If fil(col + 2) > O Then mostrarsecundarios End Sub

180

Prvate Sub Commandl l_Click() PaginaVertical = PaginaVertical - 1 mostrarTabla mostrarmarcas If fil(col + 1) > O Then mostraresenciales If fil(col + 2) > O Then mostrarsecundarios End Sub Prvate Sub Commandl2_Click() PaginaHorizontal = PaginaHorzontal + 1 mostrarTabla mostrarmarcas If fl(col + 1) > O Then mostraresenciales If fl(col + 2) > O Then mostrarsecundarios End Sub Prvate Sub Commandl3_Click() PaginaHorizontal = PaginaHorizontal - 1 mostrarTabla mostrarmarcas If fl(col + 1) > O Then mostraresenciales If fil(col + 2) > O Then mostrarsecundarios End Sub Prvate Sub Commandl4_Click() Tiempo = O Do Cali simplifique Loop Until Resultado = True Tiempo = 1 End Sub Prvate Sub Commandl4_MouseMove(Button As Integer, Shi As Integer, X As Single, Y As Single) Commandl 4.BackColor = ColorEnfoque Commandl.BackColor = ColorInicialBotones Command2.BackColor = ColorInicialBotones CommandS.BackColor = ColorInicialBotones End Sub Prvate Sub Command2_Click() If col > O Then Commandl.Enabled = False Simplificar.Enabled = False Commandl 4.Enabled = False Simppaso.Enabled = False Command2. Enabled = False Simplificaranterior = False Command3. Enabled = Fiase Menu.Enabled = False Text4.Locked = True

181

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 Simplifcar.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

Picturel. Visible = False CommandlO. Visible = False Commandl 1.Visible = False Commandl2.Visible = False Commandl 3. Visible = False Titulo(0).Visible = False Titulo(l).Caption= "IMPLICANTES PRIMOS" DoEvents Listl(l).ToolTipText = "Tabla de implicantes primos" Listl(0).ToolTipText = "Tabla de cubos " & Str(col - 2) Listl(0).Left = 3000 mostrarlistl 1 Titulo(0).Caption - "CUBOS " & col - 2 mostrarlistl O Tablalmplicantes = False Else If ultima = True Then col = col -1 Titulo(l).Caption = Titulo(0).Caption Listl(l).ToolTipText = Listl(0).ToolTipText Listl(0).ToolTipText - Listl(0).ToolTipText mostrarlistl 1 Titulo(0).Caption = "CUBOS " & col - 2 mostrarlistl O Implicantes = False ultima = False Else col = col - 1 Ifcol> 1 Then Titulo(l).Caption = Titulo(0).Caption Listl(l).ToolTipText = Listl(0).ToolTipText Listl(0).ToolTipText = "Tabla de cubos " & Str(col - 2) mostrarlistll Titulo(0).Caption = "CUBOS " & col - 2 mostrarlistl O Else If col= 1 Then Listl(l).Visible = False CommandS.Visible = False Command9.Visible = False Titulo(l).Caption = "CUBOS O" Listl(l).ToolTipText = "Tabla de CUBOS O" mostrarlistl 1 Titulo(0).Caption = "MINTERMINOS" Listl(0).ToolTipText = "Tabla de MINTERMINOS" mostrarlistl O Else Titulo(0).Visible = False List 1(0). Visible = False

183

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 Private Sub Command2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

184

Commandl .BackColor = ColorlnicialBotones Command2.BackColor = ColorEnfoque Command3.BackColor = ColorlnicialBotones Commandl 4.BackColor = ColorlnicialBotones End Sub Prvate Sub Command3_Click() Unload Me End Sub Prvate Sub Command3_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Commandl.BackColor = ColorlnicialBotones Command2. BackColor = ColorlnicialBotones Command3.BackColor = ColorEnfoque Commandl 4.BackColor = ColorlnicialBotones End Sub Prvate Sub Command4_Click() Command5.Left = Text2(63).Left + Text2(63).Width - CommandS.Width Command5.Top Command4.Top CommandS.Enabled = True CommandS. Visible = True
pagina = pagina - 1 For i = O To 63

Text3(i).Text = f(i + pagina * 64) Text2(i).ToolTipText - "f(" & i + pagina * 64 & ")" If r(i + pagina * 64) = O Or r(i + pagina * 64) = 1 Then Text2(i).Text = r(i + pagina * 64) Else Text2(i).Text="" Endlf Nexti If pagina = O Then
Command4.Enabled = False

Command4. Visible = False Endlf End Sub Prvate Sub Conunand5_Click() Command4.Left = Text3(15).Left Command4.Top = CommandS.Top Command4.Enabled = True Command4. Visible = True pagina = pagina + 1 For i = O To 63 Text3(i).Text = f(i + pagina * 64) Text2(i).ToolTipText = nf(" & i + pagina * 64 & ")"
If r(i + pagina * 64) = O Or r(i + pagina * 64) = 1 Then Text2(i).Text = r(i + pagina * 64)

185

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 Prvate Sub Command6_Click() paginaO = paginaO -1 Command.Left = CommandT.Left Command.Top = Listl(0).Top Command6.Enabled = False Command6.Visible = False Command7.Enabled = True CommandT.Visible = True Listl(0).Clear If col = 1 Then For i = paginaO * 16 + 1 To fil(O) If i <= paginaO * 16 + 16 Then IfVal(O(i,0))<=9Then Listl(0).AddItem (" " & O(i, 0) + " " & c(i, 0)) Else IfVal(O(i,0))<=99Then Listl(0).AddItem (" " & O(i, 0) + " " & c(i, 0)) Else Listl(0).AddItem ( IIM & O(i, 0) + " " & c(i, 0)) Endlf Endlf Endlf If paginaO > O Then Command.Left = Command.Left Command.Top = Listl(0),Top Command.Enabled = True Command. Visible = True Endlf DoEvents Nexti Else For i = paginaO * 16 + 1 To paginaO * 16+16 If i <= paginaO * 16 + 16 Then If Marca(i, col - 1) = "*" Then Listl(0).AddItem (Marca(i, col - 1) & " " & c(i, col - 1)) Else Listl(0).AddItem (" " & c(i, col - 1)) Endlf Endlf

186

If paginaO > O Then Command.Left = Command.Left Command.Top = Listl(0).Top Command.Enabled = Truc Command.Visible = True Endlf DoEvents Nexti Endlf End Sub Prvate Sub Command7_Click() paginaO = paginaO + 1 Command.Left = Command7.Left Command.Top = Listl(0).Top Command.Enabled = True Command.Visible = True Command7.Enabled = False Command7.Visibie = False Listl(0).Clear If col = 1 Then For i = paginaO * 16 + 1 To fil(O) If i <= paginaO * 16 + 16 Then IfVal(O(i,0))<=9Then Listl(0).AddItem (" " & O(i, 0) + " (t & c(i, 0)) Else IfVal(O(i,0))<=99Then Listl(0).AddItem (" n & O(i, 0) + " " & c(i, 0)) Else Listl(0).AddItem ("" & O(i, 0) + " " & c(i, 0)) Endlf Endlf Else Command7.Left = Listl(0).Left + Listl(0).Width Command7.Top = Listl(0).Top + Listl(0).Height - Command7.Height Command7.Enabled = True Command7.Visible = True Endlf DoEvents Nexti Else For i = paginaO * 16 + 1 To fil(col - 1) If i <= paginaO * 16 + 16 Then If Marca(i, col - 1) = "*" Then Listl(0).AddItem (Marca(i, col - ! ) & " " & c(i, col - 1)) Else Listl(0).AddItem (" " & c(i, col - 1)) Endlf Else Command7.Left = Listl(0).Left + Listl(0).Width Command7.Top = Listl(0).Top + Listl(0).Height - Command7.Height

187

CommandT.Enabled = True CommandT.Visible = True Endlf DoEvents Next i Endlf End Sub Prvate 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 Prvate 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

Prvate Sub CuatroEntradas_Click() n=4 Forml.Caption = "Simplificacin" Cali Empezar End Sub Prvate Sub DiezEntradas_Click() n=10 Forml.Caption = "Simplificacin" Cali Empezar End Sub Prvate Sub DosEntradas_Click() n =2 Forml.Caption = "Simplificacin" Cali Empezar End Sub Prvate Sub FormJLoad() Tiempo = 1 Commandl.BackColor = ColorInicialBotones CommandH.BackColor = ColorInicialBotones Command2.BackColor = ColorInicialBotones Command3.BackColor = ColorInicialBotones End Sub Prvate Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Commandl.BackColor - ColorlmcialBotones Command2.BackCoior = ColorInicialBotones CommandH.BackColor = ColorInicialBotones Command3.BackColor = ColorInicialBotones End Sub Prvate Sub Guardar_Click() FormS.Drvel.Drve = Mid(App.Path, 1, 3) Form2.Dirl .Path = App.Path Form2.Textl.Text="" Form2.Show End Sub Prvate Sub IngresarMinterminos_Click() Limpiar Forml.Caption = "Simplificacin" Label2.Visible = Truc Text4. Visible = True Labell. Visible = True Textl.Text= Ilfl Textl.Visible = True Text4.Text = "("

189

Text4.SetFocus Text4.SelStart = Len(Text4.Text) m=0 End Sub Prvate 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 Prvate 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 Prvate Sub Menu_Click() Command3_Click End Sub Prvate Sub NueveEntradas_ClickQ n=9 Forml.Caption = "Simplificacin" Cali Empezar End Sub Prvate Sub OchoEntradas_Click() n =8 Forml.Caption = "Simplificacin" Cali Empezar End Sub Prvate Sub SeisEntradas_Click() n=6 Forml.Caption= "Simplificacin" Cali Empezar End Sub Prvate Sub SieteEntradas_Click() n=7 Forml.Caption = "Simplificacin" Cali Empezar End Sub Prvate Sub Simplificar_Click() Do Commandl Click

190

Loop Until Resultado = True End Sub Prvate Sub Simplificaranterior_Click() Cali Command2_Click End Sub Prvate Sub Simppaso_Click() Cali Commandl_Click End Sub Prvate Sub Teoria_Click() Texto. Show End Sub Prvate Sub Textl_Change() DosEntradas.Checked = False TresEntradas.Checked = False CuatroEntradas.checked = False CincoEntradas.Checked = False SeisEntradas.Checked = False SieteEntradas.Checked = False OchoEntradas.Checked = False NueveEntradas.Checked = False DiezEntradas.Checked = False If n = 2 Then DosEntradas.Checked = True If n = 3 Then TresEntradas.Checked = True If n = 4 Then CuatroEntradas.checked = True If n = 5 Then CincoEntradas.Checked = True If n = 6 Then SeisEntradas.Checked = True If n = 7 Then SieteEntradas.Checked = True If n = 8 Then OchoEntradas.Checked = True If n = 9 Then NueveEntradas.Checked = True If n = 10 Then DiezEntradas.Checked = True End Sub Prvate Sub Text2_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer) DoEvents If Text2(Index).Text= "1" Then r(Index + pagina * 64) = 1 Else If Text2(Index).Text = "O" Then r(Index + pagina * 64) = O Else r(Index + pagina * 64) = 2 Endlf Endlf a = Text2(Index).Text If a o "O" And a o "1" And a o "" Then mensage = MsgBox("Ingrese solamente O o 1", vbOKOnly, "Peligro") Text2(Index).Text=""

191

r(Index + pagina * 64) = 2 Endlf Cali Limpiar Cali Contar Cali ActualizarT4 End Sub Prvate Sub Text2_KeyPress(Index As Integer, KeyAscii As Integer) If KeyAsc = vbKeyRetnrn Then KeyAscii = O Endlf DoEvents If Text2(lndex).Text = "1" Then r(Index + pagina * 64) = 1 Else
If Text2(Index).Text= "O" Then

r(Index + pagina * 64) = O Else r(Index + pagina * 64) = 2 Endlf Endlf a = Text2(Index).Text If a o "O" And a o " 1" And a o "" Then mensage = MsgBox("Ingrese solamente O o 1", vbOKOnly, "Peligro") Text2(Index).Text ="" r(Index + pagina * 64) = 2 Endlf Cali Limpiar Cali Contar Cali ActualizarT4 End Sub Public Sub Text2_KeyUp(Index As Integer, KeyCode As Integer, Shift As Integer) If KeyCode = 38 And Index > O Then Text2(Index - l).SetFocus If (KeyCode = 40 Or KeyCode = 13) And ndex < (2 A n - 1) - pagina * 64 Then If Index < 63 Then Text3(Index + l).Height = 150 Text2(Index + l).Height = 150 Text3(Index + l).Width = Text3(Index).Width Text2(Index + l).Width = Text2(Index).Width Text3(Index + l).Left - Text3(Index).Left Text2(Index + l).Left = Text2(Index).Left Text3(Index + l).Top = Text3(Index).Top + Text3(Index).Height Text2(Index + l),Top = Text3(Index + l).Top Text3(Index + l).Text = f(Index + 1 + pagina * 64) Text2(Index + 1 ).ToolTipText = n f( M & Index + 1 + pagina * 64 & ")" Endlf If Index = 15 Or Index = 31 Or Index = 47 Then If Text3(Index + 1).Visible = False Then For il = O To ndex Text3(il).Left = Text3(il).Left - (Text3(il).Width + Text2(il).Width) / 2 Text2(il).Left = Text3(il).Left + Text3(il).Width

192

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

Prvate Sub Text4_KeyPress(KeyAscii As Integer) KeyAscii = valida_Numero(KeyAscii) End Sub Prvate Sub Text4_KeyUp(KeyCode As Integer, Shi As Integer) If KeyCode = 32 Or KeyCode = 13 Then Text4.Enabled = False 'Esta seccin ubica la posicin donde inicia y donde termina el numero dentr 'dentro del Text4 p2 = 2 For i = 3 To Len(Text4.Text)

193

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 Ifp2-pl>lThen subndice = 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

Text2(0). Visible = True CommandS.Enabled = False Command5. Visible = False Command4.Enabled = False Command4.Visible = False m=n Endlf IfKeyCode = 32Then For i = O To Val(subindice) Ifr(i) = 2Thenr(i) = 0 Nexti Endlf IfKeyCode=13Then For i = O To (2 A n) - 1 Ifr(i) = 2Thenr(i) = 0 Nexti Endlf Textl.Text = n Actualizarf ActualizarT4 DoEvents If(2 A n)<=64Then For i = O To (2 A n) -1 Text3(i).Text=f(i) Ifr(i)-OOrr(i)-lThen Text2(i).Text = r(i) Else Text2(i).Text="" Endlf Cali Text2_KeyUp((i), (40), (0)) DoEvents Nexti Else For i - O To 63 Text3(i).Text - f(i + pagina * 64) If r(i + pagina * 64) = O Or r(i + pagina * 64) = 1 Then Text2(i).Text = r(i + pagina * 64) Else Text2(i).Text="" Endlf Cali Text2_KeyUp((i), (40), (0)) DoEvents Next i Command4.Le = Text3(15).Left Command4.Top = Text3(15).Top + Text3(15).Height + 20 Command4,Enabled = True Command4.Visible = True Endlf Text4.Width - Text4.Width + 200 Contar

195

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-OTofl(O) Tabla(iJ)="" Nextj Next i For i = O To max filaAnulada(i) = False Next i For i - O To fl(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
fl(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 Prvate Sub TresEntradas_Click() n=3 Forml.Caption^ "Simplificacin" Cali Empezar End Sub Prvate Sub Tutoria_Click() Tutorial.Show End Sub FORM2. Prvate Type Registro combinacin As String * 20 respuesta As String * 1 End Type Prvate dato As Registro Prvate Sub Cancelar_Click() Unload Me Forml.Enabled = True Forml. Show End Sub Prvate Sub Commandl_Click() nombrecarpeta = InputBox("Nombre de la Carpeta") MkDir (Dirl.Path & "\ & nombrecarpeta) Dirl.Path = Dirl.Path & "\ & nombrecarpeta

197

End Sub Prvate Sub Dirl_Change() Filel.Path = Dirl.Path End Sub Prvate Sub Drivel_Change() Dirl .Path = Drivel .Orive End Sub Prvate Sub Filel_Click() lonar = Len(Filel.FileName) extensin = Mid(Filel.FileName, lonar - 3, 4) If extensin = ".boo" Then Textl.Text = Mid(Filel.FileName, 1, lonar - 4) Else Textl.Text = Filel.FileName Endlf Textl.SetFocus End Sub Prvate Sub Form_Unload(Cancel As Integer) Cancelar_Click End Sub Prvate Sub Guardar_Click() If Textl.Text o ""Then encuentra = vbNo For i = O To Filel .ListCount - 1 If Textl.Text & ".boo" = Filel.List(i) Then resp = MsgBox("El archivo ya existe desea sobreescribir", vbYesNo) encuentra = vbYes Exit For Endlf Nexti If resp = vbYes Or encuentra = vbNo Then archivo = Dirl.Path + "\ + Textl.Text + ".boo" Forml.Caption = Textl.Text & ".boo" Forml.Enabled = True Open archivo For Random As 1 Len = Len(dato) For i = 1 To 2 A n dato.combinacion - f(i - 1) dato.respuesta = r(i - 1) Put 1, i, dato Nexti Cise 1 Cancelar_Click Endlf Else resp = MsgBox("Ingrese un nombre", vblnformation, "Informacin") Endlf End Sub

198

Prvate Sub Textl_KeyPress(KeyAscii As Integer) If KeyAscii =13 Then Cali Guardar_Click Endlf End Sub FORM3 Prvate Type Registro combinacin As String * 20 respuesta As String * 1 End Type Prvate dato As Registro Prvate Sub Commandl_Click() IfTextl.Texto ""Then Forml.Textl.Enabled = False Forml.Text4.Enabled = False Forml.Mensaje.Caption = "Abriendo el archivo" Forml.Mensaje. Visible = True DoEvents Cali Forml.Limpiar Cali Forml.Desactivar Forml.Enabled = True archivo - Dirl.Path + "\ + Textl.Text Forml.Caption = Textl.Text Open archivo For Random As 1 Len = Len(dato) nreg = LOF(l) / Len(dato) n = (Log(nreg))/(Log(2)) For i = O To UBound(r) f(i) = "" r(i) = 2 Next i Cali Forml.ActualizarT4 For i = 1 To nreg Get 1, i, dato f(i - 1) = dato.combinacion r(i - 1) = Val(dato.respuesta) Next i Form3. Visible = False Forml .Visible = True DoEvents For i = O To Forml .Text2.UBound Forml. Text3 (i). Visible = False Forml.Text3(i).FontSize = 8 Forml.Text3(i).Locked = False Forml .Text2(i).Visible = False Forml.Text2(i).FontSize = 8 Next i Forml. Text3(0).Height = 150 Forml.Text2(0).Height = 150

199

FormLText3(0).Width - n * 150 + 150 / n Forml.Text2(0).Width = 200 Forml.Text3(0).Top = 2880 Forml.Text2(0).Top = 2880 Forml .Text3(0).Left = Forml .Width / 2 - (Forml .Text3(0).Width + Forml.Text2(0).Width) - 400 Forml .Text2(0).Left = Forml.Text3(0).Left + Forml.Text3(0). Width FormLText3(0).Visible = True Forml.Text2(0). Visible = True Forml.Command5.Enabled = False Forml. Command5. Visible = False Forml.Command4.Enabled = False Forml .Command4.Visible - False pagina = Int(((2 A n)-l)/64) Forml.Text2(0).ToolTipText = "f(" & pagina * 84 & ")" If2 A n<-64Then For i - O To (2 A n) - 1 Forml.Text3(i).Text = f(i) Ifr(i) = OOrr(i)=lThen Forml.Text2(i).Text = r(i) Else Forml .Text2(i).Text="" Endlf Cali Forml.Text2_KeyUp((i), (40), (0)) DoEvents Next i Else For i = O To 63 Forml.Text3(i).Text = f(i + pagina * 64) If r(i + pagina * 64) = O Or r(i + pagina * 64) = 1 Then Forml.Text2(i).Text - r(i + pagina * 64) Else Forml. Text2(i).Text="" Endlf Cali Forml.Text2_KeyUp((i), (40), (0)) DoEvents Next i Forml. Command4.Left = Forml. Text3(15).Left Forml.Command4.Top = Forml.Text3(15).Top + Forml.Text3(15).Height + 20 Forml.Command4.Enabled = True Forml.Command4.Visible = True Endlf Glose 1 Forml.Guardar.Enabled True col = 0 m=n Forml .Cls Forml.Labell. Visible = True Forml.Textl.Visible = True Forml .Textl .Text = n

200

Forml.Mensaje.Caption = "Actualizando los registros" DoEvents Cali Forml.ActualizarT4 Cali Forml.Contar Command2_Click Forml.Mensaje.Visible = False Forml.Text4.Enabled = True Else MsgBox ("Ingrese un nombre de archivo") Endlf End Sub Prvate Sub Command2_ClickQ Unload Me Forml .Enabled = True Forml. Show End Sub Prvate Sub Dirl_Change() Filel.Path = Dirl.Path End Sub Prvate Sub Drivel_Change() Dir 1 .Path = Drive 1 .Drive End Sub Prvate Sub Filel_Click() Textl .Text = Filel .FileName Textl .SetFocus End Sub Prvate Sub Filel_DblClick() Textl .Text = Filel .FileName Cali Commandl_Click End Sub Prvate Sub Form_Unload(Cancel As Integer) Command2_Click End Sub Prvate Sub Textl_KeyPress(KeyAsc As Integer) If KeyAscii = 13 Then Commandl_Click Endlf End Sub FORMULARIO INICIAL Prvate Sub Commandl_Click() Texto.Show 'Abre el formulario del Texto End Sub

201

Prvate Sub Commandl_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'Actualiza los colores de los comandos. Commandl .BackColor = ColorEnfoque Conunand2.BackColor = ColorlnicialBotones Command3.BackColor = ColorlnicialBotones Command4.BackColor = ColorlnicialBotones

End Sub Prvate Sub Command2_Click() Forml.Show 'Abre el formulario de la simplificacin End Sub Prvate 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 Prvate Sub Command3_Click() End Termina la ejecucin del programna. End Sub Prvate 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 Prvate Sub Command4_Click() Tutorial.Show 'Indica el formualario del tutorial de uso del programa. End Sub
Prvate Sub Command4_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 = ColorlnicialBotones Command4.BackColor = ColorEnfoque End Sub Prvate Sub Forrn_Load() 'Actualiza los colores de los comandos.
ColorlnicialBotones = &HFF8080 ColorEnfoque = &HCOFFFF

Commandl .BackColor = ColorlnicialBotones Commandl.BackColor = ColorlnicialBotones Command3.BackColor = ColorlnicialBotones

202

Command4.BackColor = ColorlnicialBotones End Sub Prvate Sub Form_MouseMove(Button As Integer, Shi As Integer, X As Single, Y As Single) 'Actualiza los colores de los comandos, Commandl.BackColor = ColorlnicialBotones Command2.BackColor = ColorlnicialBotones CommandS.BackColor = ColorlnicialBotones Command4.BackColor = ColorlnicialBotones End Sub Prvate Sub Framel_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 = ColorlnicialBotones Command4.BackColor = ColorlnicialBotones End Sub Prvate Sub Labell_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'Actualiza los colores de los comandos. Commandl .BackColor = ColorlnicialBotones Commandl.BackColor = ColorlnicialBotones CommandS.BackColor = ColorlnicialBotones Command4.BackColor = ColorlnicialBotones End Sub Prvate Sub Picturel_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 Command3.BackColor = ColorlnicialBotones Command4.BackColor = ColorlnicialBotones End Sub FORMULARIO SPLASH Option Explicit Prvate Sub Form_KeyPress(KeyAscii As Integer) Unload Me Formulariolnicial. Show End Sub Prvate Sub Form_Load() IblVersion.Caption = "Electrnica y Telecomunicaciones" IblProductName.Caption = "Simplificacin de Funciones Booleanas" End Sub Prvate Sub Timerl_Timer()
Unload Me

203

Formulariolnicial. Show End Sub FORMULARIO TEXTO Prvate Sub Commandl ClickQ Unload Me FormularioInicial.Show End Sub Prvate Sub Commandl JVouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Commandl .BackColor = ColorEnfoque Command2.BackColor = ColorlnicialBotones End Sub Prvate Sub Conimand2_Click() n = Printers.Count - 1 Combo l.Clear For i = O To n Combo 1 .Addltem (Prnters(i).DeviceName) Next i Combo 1 .Text = Printer.DeviceName Frame2.Visible = Truc End Sub Prvate Sub Command2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Command2.BackColor = ColorEnfoque Commandl.BackColor = ColorlnicialBotones End Sub Prvate Sub Command3_Click() Dim X As Printer For Each X In Printers If X.DeviceName = Combo 1.Text Then ' La define como predeterminada del sistema. Set Printer = X ' Sale del bucle. Exit For Endlf Next Printer. DrawMode = 1 RichTextBoxl.SelPrint (Printer.hDC) Printer.EndDoc Frame2.Visible = False End Sub Prvate Sub Command4_Click() Frame2.Visible = False End Sub Prvate Sub Forrn_Load() RichTextBoxl.LoadFile (App.Path & "\Texto.rtf')

204

End Sub Prvate Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Commandl .BackColor ColorlnicialBotones Command2.BackCoIor = ColorlnicialBotones End Sub Prvate Sub Programa_Click() Me.Hide Forml .Show End Sub Prvate Sub Tutoria_Click() Me.Hide Tutorial.Show End Sub FORMULARIO TUTORIAL Dim re(16) As String Dim ce(12, 6) As String
Dim mo(12, 6) As String

Dim TablaT(4, 9) As String


Dim so(9) As Integer

Dim Ultimo As Boolean Const Tiempo = 0.5 Prvate Sub MostrarTutorialQ 'esta seccin consta todo el cdigo para mostrar el tutorial Ultimo = False 'Sirve para controlar y saber si ya se ha llegado a la ultima pantalla de la simplificacin Me.Cls 'Borra todo el formulario If Tutor <= 22 And Commandl4.Enabled = True Then Comrnandl4.Enabled = False Endlf If Tutor <= 18 Then Labell. Visible = False Textl. Visible = False Else Labell. Visible = True Textl .Visible = True Endlf Select Case Tutor Case O
Funcin. Visible True Programa. Visible = True

Teoria. Visible = True Tutorial.Picture = LoadPicture(App.Path & "\fondoTutorial.bmp") LabeB.Caption = "Para iniciar el Tutorial presione SIGUIENTE"' & vbCrLf & "Para ir a la simplificacin Presione el men Simplificar" & vbCrLf & "Para ver la teora presionar el men Teoria" Case 1

205

Tutorial.Picture = LoadPicture(App.Path & "\Tutorl.bmp") LabeO.Caption = "El programa de Simplificacin esta compuesto por: MEN, EDITOR DE MINTERMINOS, INDICADOR DE VARIABLES, TABLA DE COMBINACIONES, Y COMANDOS" Case 2 Tutorial.Picture = LoadPicture(App.Path & "\Tutor2.bmp") LabeO.Caption = "El Men tiene 3 opciones principales:" & vbCrLf & " FUNCIN, TUTORIAL y TEORA" Case 3 Tutorial.Picture = LoadPicture(App.Path & "\Tutor3.bmp") LabeO.Caption = "El men FUNCIN contiene: Nuevo, Abrir, Guardar, Simplificar, Simplificar Siguiente Paso, Simplificar Paso Anterior y Pantalla Inicial" Case 4 Tutorial.Picture = LoadPicture(App.Path & "\Tutor4.bmp") LabeO.Caption = "El men TUTORIAL le permite pasar de la simplificacin a este tutorial" Case 5 Tutorial.Picture = LoadPicture(App.Path & "\Tutor5.bmp") LabeO.Caption = "El men Teora sirve para pasar del proceso de simplificacin a la teora sobre el mtodo Quine McCluskey" Case 6 Tutorial.Picture = LoadPicture(App.Path & "\Tutor6.bmp") LabeO.Caption = "La opcin FUNCIN / NUEVO permite ingresar una funcin nueva ya sea como ECUACIN DE MINTERMINOS, o como TABLA DE COMBINACIONES" Case 7 Tutorial.Picture = LoadPicrure(App.Path & "\Tutor7.bmp") LabeO.Caption = "La Opcin ABRIR permite leer una tabla grabada previamente en disco con extensin .boo por ejemplo: 'funcionSb.boo'" Case 8 Tutorial.Picture = LoadPicture(App.Path & "\Tutor8.bmp") LabeO.Caption - "La opcin GUARDAR graba en disco una tabla de combinaciones o funcin con extensin .boo (el programa la pone automticamente)" Case 9 Tutorial.Picture = LoadPicture(App.Path & "\Tutor9.bmp") LabeO.Caption = "La opcin SIMPLIFICAR Simplifica completamente la funcin booleana hasta el final en forma automtica" Case 10 Tutorial.Picture = LoadPicture(App.Path & "\Tutorl0.bmp") LabeO.Caption = "Simplifica paso por paso la funcin y es equivalente a presionar el comando SIGUIENTE" Case 11 Tutorial.Picture = LoadPicture(App.Path & "\Tutorl l.bmp") LabeO.Caption = "Regresa al paso anterior del proceso de simplificacin de la funcin" Case 12 Tutorial.Picture = LoadPicture(App.Path & "\Tutorl2.bmp") LabeO .Caption = "Regresa al men principal" Case 13 TutoriaLPicture = LoadPicture(App.Path & "\Tutorl3.bmp")

206

Label3.Caption = "Esta opcin permite INGRESAR LOS MTNTERMINOS de una nueva funcin booleana" Case 14 Label2.Visible = False Text4.Visible = False Fori = O T o l 5 Text3(i).Visible = False Text2(i).Visible = False Next i Funcion.Enabled = False Funcin. Visible = False Programa. Visible = False Teoria.Visible = False Tutorial.Picture = LoadPicture(App.Path & "\Tutorl4.bmp") LabeO.Caption = "Esta opcin sirve para ingresar la TABLA DE COMBINACIONES de una funcin nueva (Mximo 10 variables de entrada)" Case 15 Tutorial.Picture = LoadPicture(App.Path & "\fondoTutorial.bmp") Label2.Visible = False Text4.Visible = False Fori = OTo 15 TextS (i). Visible - False Text2(i). Visible = False Next i Funcion.Enabled = True Funcion.Visible = True Programa. Enabled = False Programa. Visible = True Teoria.Enabled = False Teora. Visible = True Abrir.Enabled = False IngresarTabla.Enabled False Label3.Caption = "A continuacin se har un ejemplo de simplificacin con 4 variables de entradas Para eso haga clic en:" & vbCrLf & " FUNCIN / NUEVO / INGRESARMINTRMINOS " IngresarMinterminos. Enabled = True Ultimo = True Case 16 Tutora!. Cls Text3 (i). Visible = False Text2(i).Visible = False Next i IngresarMmterminos_Click Me.Cls Commandl .Enabled = False LabeB.Top = Text4.Top + Text4.Height Label3.Caption - "Mientras escribe los mintrminos, en la tabla de combinaciones aparecer el valor ingresado" Label3.Left = Tutorial.Width / 2 - Label3.Width / 4

207 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 mintrminos, 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 Teora. 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 funcin 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

LabeO.Caption = "Para ingresar los valores en la tabla de combinaciones se " LabeO.Caption = LabeB.Caption & "presiona: FUNCIN / NUEVO / INGRESAR TABLA / n ENTRADAS (en este ejemplo n=4)" Funcion.Enabled = Truc Programa.Enabled = False Teoria.Enabled = False IngresarTabla.Enabled = True IngresarMinterminos.Enabled = False Ultimo = True Case 19 Titulo(0).Visible = False List 1(0). Visible = False Fori = O T o l 5 Text3(i).Visible = False Text2(i). Visible = False Next i Text4.Text="" CuatroEntradas_Click Commandl .Enabled = False F o r i - O T o 15 Text3(i).Visible = True Text2(i).Text = "" Text2(i).Visible = True LabeO.Caption = "Mientras se van poniendo las salidas, automticamente se irn ecribiendo los mintrminos en el editor de mintrminos" Text2(i).SetFocus Me.Line (Text4.Left + 200, Text4.Top + Text4.Height)-(Label3.Lefs LabeB.Top + Label3.Height/2) Timerl = Timer Do DoEvents Loop Until Timer - Timerl > Tiempo Ifio9Then Text2(i).Text = re(i) Else Text2(i).Text = "O" Endlf If re(i) = " 1" And i o 9 Then Text4.Text = Text4.Text & " " & Str(i) Beep Endlf Text2(i).SeIStart = Len(Text2(i).Text) Text2(i).SetFocus Timerl = Timer Do DoEvents Loop Until Timer - Timerl > Tiempo If Len(Text4.Text) < 50 Then Text4.Width = 75 * Len(Text4.Text) + 200 Text4.Height =

210

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 funcin sea con los mintrminos 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 correccin se puede hacer ya sea en la tabla de combinaciones, como en el editor de mintrminos, como se indica a continuacin. Haga clic en el botn 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 mintrminos la tabla de combinaciones se actualizar automticamente 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 correccin tambin se lo puede hacer en la tabla de combinaciones como se muestra a continuacin." 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 correccin se hace en la tabla de combinaciones entonces el editor de mintrminos se actualizar automticamente" 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 Untl 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 simplificacin se puede realizar paso a paso presionando el botn Siguiente, , puede ir directamente a la solucin haciendo clic en el botn 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

Listl(0).Top = Titulo(0).Top + Titulo(0).Height Listl(0).Left = 3000 Listl(0).Width = 2.75 * TextWidth("0 0000") Titulo(0).Left = 3000 Listl(0).Height = 21 * TextHeight("0") Listl(0).Clear Titulo(0).Visible = True
Listl(O). Visible = True

For i = 1 To 9 IfVal(mo(i,0))<10Then Listl(0).AddItem (mo(i, 0) & " " & ce(i, 0)) Else Listl(0).AddItem (mo(i, 0) & " " & ce(i, 0)) Endlf DoEvents Next i LabeB.Caption = "Esta es la tabla de MINTERMINOS y de CUBOS 0. Como se ve, esta tabla est ordenada de acuerdo al nmero de UNOS en cada combinacin que tiene salida 1" Titulo(l).Top = LabeO.Top + LabelS.Height Titulo(l).Capton= "CUBOS O" Listl(l).Top = Titulo(l).Top + Titulo(l).Height Listl(l).Left = Listl(0).Left + Listl(0).Width + 1000 Listl(l).Width = 3 * TextWidth("0000") Titulo(l).Left = Listl(0).Left + Listl(0).Width + 1000 Listl(l).Height = 28 * TextHeight("0") Listl(l).Clear Titulo(l). Visible = True List 1(1). Visible = True Fori=lTol2 Listl(l).AddItem(ce(i 9 l)) DoEvents Next i Case 25 Titulo(0).Top = LabeB.Top + Label3.Height
Titulo(0).Caption = "CUBOS O"

Listl(0).Top = Titulo(0).Top + Titulo(0).Height List l(0).Left = 3000 Listl (O).Width = 2.75 * TextWidth("0 0000") Titulo(0).Left = Listl(0).Left + Listl(O).Width / 2 - Titulo(0).Width / 2 Listl(0).Height = 28 * TextHeight("0")
Listl(0).Clear Titulo(0).Visible = True

Listl(0).Visible = True F o r i = l Tol2 If i o 2 And i o 5 And i o 10 Then Listl(0).AddItem ("* " & ce(i, 1)) Else Listl(0).AddItem (" " & ce(i, 1)) Endlf

214

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 estn 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).Wdth = 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).Capton= "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 estn 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 'Construccin de la tabla de simplificacin 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 simplificacin se forma con los implicantes primos y con los mintrminos; la marca se pone en todas las celdas que coinciden con los implicantes y los mintrminos 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 SIMPLIFICACIN" 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 12TextWidth(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 'Clculo 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 12TextWidth(Str(so(i))) Picturel.CurrentY = O Picturel,Print so(i) DoEvents Nexti For i = 1 To 4 Picturel.CurrentY = i * alto

218

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 T o 9

IfTablaT(iJ)="*"Then
Picturel.CurrentX = ancho + espacio + ancho * (j - 1) + ancho / 2 TextWidth("*") Picturel.CurrentY = i * alto + TextHeight("*") / 8 Picturel .Print TablaT(i, j); DoEvents Endlf Nextj Picturel.Print DoEvents Next i Picturel.CurrentY = 5 * alto Picturel.Line (O, Picturel.CurrentY - alto / 20)-(Picturel.Width, Picturel.CurrentY), ,BF Label3.Caption = "Los implicantes primos esenciales formarn parte de la solucin" Titulo(l).Left = Picturel.Le Titulo(l).Top = Picturel.Top + Picturel. Height Titulo(l).Capton= "ESENCIALES" Titulo(l). Visible = True List2(0).Left = Titulo(l).Left List2(0).Top = Titulo(l).Top + Titulo(l).Height List2(0).Clear List2(0).Visible = True ColorLinea = RGB(255, O, 0) Picturel.CurrentX = ancho + espacio + ancho * (1 - 1) + ancho / 2 Picturel.CurrentY = 5.5 * alto Picturel.Circle (Picturel.CurrentX, Picturel.CurrentY), 25, ColorLinea Picturel.CurrentX = ancho + espacio + ancho *(!-!) + ancho / 2 Picturel.CurrentY = 5.5 * alto Picturel.Line (Picturel.CurrentX, Picturel.CurrentY)-(Picturel.CurrentX5 alto / 2), ColorLinea Timerl = Timer Do DoEvents Loop Until Timer - Timerl >= Tiempo Picturel .CurrentX = ancho / 2 Picturel.CurrentY = 3.5 * alto Picturel.Circle (Picturel.CurrentX, Picturel.CurrentY), 25, ColorLinea Picturel.CurrentX = ancho + 0.85 * espacio Picturel.CurrentY = 3.5 * alto Picturel.Line (Picturel.CurrentX, Picturel.CurrentY)-(Picturel.Width, Picturel.CurrentY), ColorLinea Picturel.CurrentX = ancho + espacio + ancho * ( ! - ! ) + ancho / 2

219

Picturel.CurrentY = 3.5 * alto Picturel.Circle (Picturel.CurrentX, Picturel.CurrentY), 1.5 * TextWidth("*"), ColorLinea List2(0).AddItem ("XOXO") Timerl = Timer Do DoEvents Loop Until Timer - Timerl >= Tiempo Picturel.CurrentX = ancho + espacio + ancho * (2 - 1) + ancho / 2 Picturel.CurrentY = 5.5 * alto Picturel.Circle (Picturel.CurrentX, Picturel.CurrentY), 25, ColorLinea Picturel .CurrentX = ancho + espacio + ancho * (2 - 1) + ancho / 2 Picturel .CurrentY = 5.5 * alto Picturel.Line (Picturel.CurrentX, Picturel.CurrentY)-(Pictiirel.CurrentX, alto / 2), ColorLinea Timerl = Timer Do DoEvents Loop Until Timer - Timerl >= Tiempo Picturel .CurrentX = ancho + espacio + ancho * (6 -1) + ancho / 2 Picturel.CurrentY = 5.5 * alto Picturel.Circle (Picturel.CurrentX, Picturel.CurrentY), 25, ColorLinea Picturel .CurrentX = ancho + espacio + ancho * (6 - 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 Picturel.CurrentX = ancho + espacio + ancho * (8 - 1) + ancho / 2 Picturel.CurrentY = 5.5 * alto Picturel.Circle (Picturel.CurrentX, Picturel.CurrentY), 25, ColorLinea Picturel .CurrentX = ancho + espacio + ancho * (8 - 1) + ancho / 2 Picturel.CurrentY = 5.5 * alto Picturel.Line (Picturel.CurrentX, Picturel.Curren:Y)-(Picturel.CurrentX, alto / 2), ColorLinea Timerl = Timer Do DoEvents Loop Until Timer - Timerl >= Tiempo ColorLinea = RGB(0, 255, 0) Picturel.CurrentX = ancho + espacio + ancho * (3 - 1) + ancho / 2 Picturel.CurrentY = 5.5 * alto Picturel.Circle (Picturel.CurrentX, Picturel.CurrentY), 25, ColorLinea Picturel .CurrentX = ancho + espacio + ancho * (3 - 1) + ancho / 2 Picturel.CurrentY = 5.5 * alto Picturel.Line (Picturel.CurrentX, Picturel.CurrentY)-(Picturel.CurrentX, alto / 2), ColorLinea

220

Timerl = Timer Do DoEvents Loop Until Timer - Timerl >= Tiempo Picturel.CurrentX = ancho / 2 Picturel .CurrentY = 4.5 * alto Picturel.Grele (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.Grele (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 trmino de la solucin y de cada implicante primo esencial sale un trmino de la solucin 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

CurrentX = List2(0).Left + List2(0).Width CurrentY = List2(0).Top + 2 * TextHeight("X") Me.Line (CurrentX, CurrentY)-(CurrentX + 1000, CurrentY), RGB(0, 255, 0) CurrentY = CurrentY - TextHeight("X") / 2 Print "A'C" Timerl = Timer Do DoEvents Loop Until Timer - Timerl >= Tiempo CurrentX = List2(0).Left + List2(0).Width CurrentY = List2(0).Top + 3.25 * TextHeightfX") Me.Line (CurrentX, CurrentY)-(CurrentX + 1000, CurrentY), RGB(0, O, 255) CurrentY = CurrentY - TextHeight(nX") / 2 Print "AC'D" Case 31 'Construccin de la funcin Resultante Titulo(O). Visible = False Titulo(l). Visible = False Picturel. Visible = False List2(0).Visible = False Label3.Caption = "La solucin tiene tres trminos" Label.Visible = True DoEvents Label.Caption = "Y = B'D'" Label.Left = Tutorial.Width / 2 - Labelo,Width / 2 Timerl = Timer Do DoEvents Loop Until Timer - Timerl >= Tiempo Label.Caption = "Y = B'D' + A'C" Label.Left = Tutorial.Width / 2 - Labelo.Width / 2 Timerl = Timer Do DoEvents Loop Until Timer - Timerl >= Tiempo Label.Caption = "Y = B'D' + A'C + AC'D" Label.Left = Tutorial.Width / 2 - Labelo.Width / 2 Ultimo = True Case El se End Select End Sub Prvate Sub CincoEntradas_Click() Beep End Sub Prvate Sub Commandl_Click() Commandl.Enabled = False CommandH.Enabled = False Command2.Enabled = False Command3.Enabled = False

223

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 Prvate Sub Commandl _MouseMove(Button As Integer, Shi As Integer, X As Single, Y As Single) Commandl .BackColor = ColorEnfoque Command2.BackColor = ColorlnicialBotones Command3.BackColor = ColorlnicialBotones End Sub Private Sub Commandl4_Click() CommandH.Enabled = False Do Command 1 _C1 ick Loop Until Ultimo = True
End Sub

Private Sub Command2_Click() Commandl .Enabled = False Command 14.Enabed = False Command2.Enabled = False CommandB. Enabled = False Tutor = Tutor - 1 MostrarTutorial If Tutor o 21 Then CommandS.Enabled = True If Ultimo - False Then Commandl .Enabled = True Commandl .SetFocus Endlf If Tutor > O Then Command2.Enabled = True If Tutor o 21 Then Command2. SetFocus Endlf End Sub Private Sub Command2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Commandl.BackColor = ColorlnicialBotones

224

Command2.BackColor = ColorEnfoque CommandS.BackColor = ColorlnicialBotones Commandl4.BackColor = ColorTnicialBotones End Sub Prvate Sub Command3_Click() Unload Me End Sub Prvate Sub Command3_MouseMove(Button As Tnteger, Shift As Integer, X As Single, Y As Single) Commandl.BackColor = ColorlnicialBotones Command2.BackColor = ColorlnicialBotones Commandl4.BackColor = ColorlnicialBotones Command3.BackColor = ColorEnfoque End Sub Prvate Sub CuatroEntradas_Click() Label2.Visible = True Text4.Text="(" If Len(Text4.Text) < 50 Then Text4.Width = 75 * Len(Text4.Text) + 200 Text4.Height = 215 Else Text4.Height = 2 * 2 3 7 Text4.Width - 75 * 50 + 75 / 50 + 200 Endlf Text4.Visible = True Text3(0).Visible = True Text2(0).Text = "" Text2(0).Visible = True LabelS.Caption = "Para cada combinacin de las variables de entrada se ingresa el valor correspondiente a la funcin de salida como se ve a continuacin. Haga clic en Siguiente." Text2(0).SetFocus Funcion.Enabled = False Programa.Enabled = True Teoria.Enabled = True Commandl.Enabled = True End Sub Prvate Sub DiezEntradas_Click() Beep End Sub Prvate Sub DosEntradas_Click() Beep End Sub Prvate Sub Form_Load()

225

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( 1,0) -"0000" ce(2,0) = lt0010" ce(4 O)- M 0110" ce(5, 0) = I10111" ce(6,0) = fl 1000" ce(7,0) = "1001" ce(8,0) = lf1010n ce(9,0) = "1101" ce(l, 1) = "0000H
06(2,1) = " --------

ce(3, l) = "0010n ce(4, 1) = "1000" ce(5, 1) = " -------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
,,8 40,, = (2

,,9 ti, - te

,,e6., = fe
U-H^

.,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 Prvate 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 Prvate Sub Framel_MouseMove(Button As Integer., Shift As Integer, X As Single, Y As Single) Commandl. BackColor = ColorlnicialBotones Command2.BackCoor = ColorlnicialBotones Command3. BackColor = ColorlnicialBotones Comrnandl4.BackColor = ColorlnicialBotones End Sub Prvate 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 simplificacin se encuentra el Editor de Mintrminos; aqu se pueden ingresar los mintrminos 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 Prvate Sub NueveEntradas_Click() Beep End Sub Prvate Sub OchoEntradas_Click() Beep End Sub Prvate Sub Programa_Click() Forml.Show End Sub Prvate Sub SeisEntradas_Click() Beep End Sub Prvate Sub SieteEntradas_Click()

229

ANEXO B

MTODO DE SIMPLIFICACIN QUINE-MCCLUSKEY


Una funcin BOOLEANA se expresa en forma de tabla de combinaciones, como suma de mintrminos y como producto de maxtrminos.

A B C lyiintrtnirio Ma/t armio

O O O

O O 1 O 1 O

1 1 O

A+B+C = Mo A+B+C1 -M1 A+B'+C =M2 A+B'+C =M3 A+B+C =M4 A'+B+C1 =M5 A'+B'+C=M6 A'+B'+C'=M7

F<AJB,C>=2m(0,2,3,5,6)
MINTRMINOS.- Son los productos de las variables que se forma de la siguiente manera: Si la combinacin tiene un cero se pone la variable complementada, si la combinacin tiene un uno se pone la variable directamente. Por ejemplo. La combinacin Ol tiene como mintrmino al producto A'BC ya que A=O, B=l y
O.

La funcin booleana expresada como suma de mintrminos^ se expresa como una suma

230

de todos los mintrminos que tiene una salida igual a I. as en el caso de la tabla ser. F<A, B, 0=2X0,2, 3,5,6) MAXTERMINOS.- Son las sumas las variables que se forman de la siguiente manera: Si la combinacin tiene un cero se pone la variable directamente mientras que si la combinacin tiene un 1, se pone la variable complementada. Por ejemplo. La combinacin 011 tiene como maxtrmino a la suma de A+B*+C' ya que A=O, B=l y 01. La funcin booleana expresada como producto de maxtrminos, se expresa como un producto de todos los maxtrminos que tiene una salida igual a 0. As en el caso de la tabla ser. F<A f B,0-IlM(U4,7)

231

LISTA DE MINTERMINOS
El punto de partida del mtodo Quine-McCluskey es la lista de Mintrminos de una funcin. Si la funcin no est en esta fonna se debe convertirla. Para explicar se toma la funcin siguiente:

A B C D
0 0 0 0

F
1

__

0 0 0 1 i U n U 1, 0 0
0 0 1 1

0 0 0 1

1 0 0 101 111 010

0
^
l-.-j
-frf> IT'

mu

I O D O

I 0 0 1
0 1 1

..-i
1'

TF

III U ;

1:

'

m :

1 0 1 1

'
W"W"f~inifflp-

mo!
?B' ^""41

1 0 0
1 A i

i'l'i
0 0

Jl 1 1 0 * * *A * 1 I 1

F < A,B*C,D > = Z m(0,2,3,6J,8,9JO,13)


La lista de mintrminos consiste en una tabla de combinaciones cuya salida tiene 1, en el ejemplo los mintrminos que formarn parte de la tabla son /wft m2, m& m^ m7, /w& m^ mo, m3.

232

minlirrtninu

A B i. n
0000

mO m2 m3 m6 m7

0010
0011 0110 0111

mB m9 mo m!3

1000
1001

1010 1101
CUBOS O

1 1 1 1 1 1 1 1
1

En una tabla se agrupa todos los mintcrminos de acuerdo a la cantidad de unos que contienen. Por ejemplo. Los mintrminos que tienen O unos es mintrmino mO. Los que tienen / uno son los mintrminos m2 y tn8. Los que tienen 2 unos son los mintrminos mB, m6t m9 y m/0. Los que tienen 3 unos son los mintrminos m? y mi3. No existen mintrminos con 4 unos. Esta tabla se denomina tabla de CUBOS O

233

N" unos
0 1

minlrrmino

A B <: D

mO ni 2 m8

0000

m3 m6 m9 mlO m7 m!3

0010 1000 0011 0110 1001 1010

0111
1101

1 1 1 1 1 1 1 1 1

CUBOS 1
Los CUBOS I se forman de la siguiente manera:

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 estn siendo agrupados difieren en tina sola posicin, en cuyo caso el CUBO I ser similar a los CUBOS O agrupados, pero en la posicin que cambia se pone una X. A los CUBOS O que han sido agrupados y formaron un CUBO 1 se pone una seal para especificar que si ha sido tomado en cuenta. Por ejemplo.

234

Al comparar los cubos O m0 con m forman el CUBO 1 00X0, ya que difieren nicamente en la tercera posicin, este nuevo CUBO 1 se denomina CUBO 1 (O, 2). 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 m3, forman el CUBO 1 (9,13) = 1X01 ya que difieren nicamente en la segunda posicin. La siguiente tabla indica todo el proceso para el clculo de los CUBOS /.

mintrmino

A B C D

Min trmino Resultante

mO
m2 m8 m3 m6 m9 rn 10 m7 m 13

0000

mO, m2 mO, m8 m2, m2, m2, m8, m8, m3 m6 m10 m9 m10

00X0

0010 1 000

xooo ooox
0X1 O X01 O 1 OOX 1 0X0 0X1 1 01 1 X 1 X01

001 1 0110 1 00 1 1010


0111 1101

m3, m7 m6, m7 m9, m13

CUBOS 2
Los CUBOS 2 se forman de la siguiente manera:

235

- 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 posicin. En el siguiente grfico se indica todo el proceso para encontrar los CUBOS 2.

Mintrmino

CUBOS 1

mO, m2

00X0 000

mO, m8 m2, m3 m2, m6 m2, m10 m8, m9 m8, m10 m3, m7 m6, m7 m9, m13

^^^^

CUBOS 2 "5(0,2,8,10) X O X O
0 X 1X

ooox
0X10 X01 0 1OOX 1 0X0 0X1 1 01 1 X 1 X01
^

~^^ ( 2, 3, 6, 7 )

//

t."

w
/ /

'

Como se puede ver existen dos CUBOS 1 100X y 1X01 que no se combinaron para formar CUBOS 2 por esta razn estas combinaciones formarn parte de los implicantes primos.

236

IMPLICANTES PRIMOS
Los implicantes primos se forman con todos los cubos que no se agruparon con ningn 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 tambin todos los CUBOS 2 formarn parte de los implicantes primos. En el grfico se indican todos los implicantes primos.

IMPLICANTES PRIMOS

(8,9) (9,13) (0,2,810) (2,3,6,7)

100X 1X01 XOXO OX1X

TABLA DE SIMPLIFICACIN
La tabla de simplificacin sirve para simplificar mas los implicantes primos, ya que algunos implicantes primos estn 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 mintnnino que contiene. Por ejemplo el implicante primo OX1X contiene a los mintrminos m2, m3, m, m?. La tabla se indica en el siguiente grfico.

237

TABLA DE SIMPLIFICACIN

0 1 OOX 1 XO 1

8
*

9
* *

1O 13
* *

xoxo
0X1 X

* * * *

Basndose en esta tabla se calcula los implicantes primos esenciales de la siguiente manera:

Buscamos la columna que tenga una sola marca. El implicante primo que contiene esta marca es ya un implicante primo esencial. Se anulan todas las columnas que contienen marca en la fila correspondiente de la marca encontrada en el primer paso.

Se repite este proceso hasta que ya no existan columnas con una sola marca es decir hasta que ya no existan mas implicantes primos esenciales.

238

o
1 OOX 1 XO 1

1O 13

xoxo
0X1 X
ESCENCIALES

Como ya fueron tomados en cuenta todos los mintrminos, ya no existen implicantes primos secundarios y la solucin simplificada se formaran nicamente con los implicantes primos esenciales.

XOXO ^B'D 5 OX1X -> A'C 1X01 -> BC'D Entonces la solucin ser: Y-B'D' + A'C + 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

costo para esto se sigue el siguiente procedimiento: De los implicantes primos que no se han tomado como esenciales se cuenta cual de estos tiene mayor cantidad de marcas que estn en columnas no eliminadas. Este implicante primo es un implicante primo secundario. Se anulan todas las columnas que tienen una marca en la fila del implicante primo tomado. Se vuelve a repetir el proceso hasta que ya estn eliminadas todas las columnas. Esta es la tabla de simplificacin para una funcin de 5 entradas que tiene implicantes primos secundarios ya que el ejemplo anterior no tiene implicantes primos secundarios

TABLA DE SIMPLIFICACIN
>,'
00X0 tX0101 1010X- ^ 10X11101X1 0X0X1 X10X1 XX01X-

n r

2 j
1 | f ""

3
| |

10

11

r)

I
--

V ^J

ii
! l
j

18

20 21 ?3 25 26 27 19 i !
e

"-j
!

| j f "~H
i j

t
>

^j^fV

| |

jf ^?>~ ~<5^~ i,/ v/


i,

r *

"V

~f -f- ~t" j j 1 j i j ) T __i ~^ -4-~ L ' f ' "'f \ %

-<r

i
*

i i f "i

^1

i t

i
!

t $

l<

~4
1:

ES ENCIALES XX0 1 X
. /- 4 ."v, y * i i | A f 'O1 S W V \1

SECUNDARIOS
10X11

Los implicantes primos esenciales y secundarios formaran la ecuacin simplificada. De los esenciales:

Quine HcCIuskey
MANUAL DE USUARIO.
Luis Eduardo Lpez.

ESCUELA POLITCNICA NACIONAL.

CARRERA DE INGENIERA ELECTRNICA Y TELECOMUNICACIONES.

2003

CONTENIDO.
Instalacin del programa Requerimientos Mnimos Mtodo de Instalacin Men Principal Fundamento Terico Tutorial Iniciar Simplificacin Men Nuevo Abrir Guardar Como Simplificar Simplificacin paso a paso Simplificacin paso anterior Ingreso de datos en la tabla Ingreso de mintrminos Tabla de Mintrminos Cubos O Cubos n Implicantes Primos Tabla de Simplificacin Implicantes Primarios 3 3 3 4 4 5 5 5 6 6 7 7 8 8 8 9 9 9 10 10 10 10

Instalacin del programa. Requerimientos Mnimos.


Para instalar este programa se necesita los siguientes requerimientos mnimos: Procesador PI. 24 MB de memoria RAM. 15MB de espacio disponible en el disco Duro. Unidad de CD-Rom.

Mtodo de Instalacin.
Una vez comprobado que cumple con los requerimientos mnimos siga los siguientes pasos: 1. Inserte el CD en la unidad de CD-ROM. 2. Ejecutar Setup. 3. Siga las instrucciones.

Men Principal.
Cuando se ingresa al programa aparece el men principal en el cual se puede escoger entre FUNDAMENTO TERICO, TUTORIAL, INICIAR SIMPLIFICACIN, Y SALIR como se indica en la figura MI.

Fig. MI: Men principal

Fundamento Terico.
Explica el proceso de simplificacin de una funcin booleana utilizando el mtodo de Quine-McCluskey como se indica en la figura M2.

Fig. M2: Comando para iniciar el fundamento Terico.

Tutorial.
Hace una breve explicacin de cmo utilizar el programa de simplificacin de funciones como se indica en la figura M3.

Fig. M3: Comando para ingresar al Tutorial

Iniciar simplificacin.
Simplifica una funcin ingresando los datos ya sea en forma de tabla o en forma de mintrminos, para luego simplificarla paso a paso o en forma directa.

Fig. M3: Comando para ingresar a la simplificacin

Men.
Permite Ingresar una funcin nueva, Abrir una funcin guardada, Guardar una funcin, Simplificar, y salir como se indica en la figura M6.

M.;Clusk(;y. Simplificacin

Fig. M6: Men de simplificacin.

Nuevo.
Sirve para ingresar una funcin nueva ya sea como mintrminos o como una tabla de salida.

Abrir.
Abre una funcin almacenada en disco esta funcin tiene extensin *.boo, esta funcin contiene las salidas de todas las combinaciones como se indica en la figura M7.

unctn2.boo unctn3,boo unctn3b.boo uncion4.boo uncton4b.boo uncjon5,boo uncionSb.boo

Fig. M7: Ventana para escoger un archivo.

Guardar Como.
Guarda los datos de las salidas de cada combinacin de una funcin en un archivo con extensin *.boo como se ndica en la figura M8.

funcjon1Qb.boo uncin2boo funcjon3.boQ funcin3b.boo funcn4.boo funcion4b.boo funcion5.boo funcion5fa.boo

Fig. M8: Ventana para ingresar el nombre del archivo a ser guardado

Simplificar.
Esta opcin sirve para obtener directamente la respuesta simplificada de la funcin sin necesidad de hacer pausa en cada paso. Esta opcin es equivalente al comando finalizar de la pantalla de simplificacin como se indica en la figura M9.

Fig. M9: Comando para finalizar la simplificacin.

Simplificacin paso a paso.


Esta opcin avanza al siguiente paso de la simplificacin.

Esta opcin es similar al comando siguiente en la ventana de la simplificacin como se indica en la figura MO.

Fig. MO: Comando para simplificar el siguiente paso.

Simplificar paso anterior.


Esta opcin avanza al paso anterior de la simplificacin. Esta opcin es similar al comando anterior en la ventana de la simplificacin como se indica en la figura Mil.

Anterior

Fig. Mil: Comando para simplificar el paso anterior.

Ingreso de datos en la tabla.


Despliega un submenu con el nmero de entradas que puede aceptar la simplificacin y luego despliega una tabla con todas las combinaciones ingresar las salidas que corresponde a cada combinacin. permitiendo

Cuando se ha terminado de ingresar todas las salidas existentes presionamos enter para que la tabla se complete automticamente con ceros. Mientras se ingresa cada salida de la funcin actualiza automticamente. el editor de los mintrminos se

Ingreso de mintrminos.
Aqu nos permite ingresar directamente los mintrminos en el editor de mintrminos. Los mintrminos se ingresan separados por espacios y cuando ya se han ingresado todos los mintrminos de la funcin se presiona enter para que se termine de actualizar toda la tabla de salidas de la funcin. Mientras se va escribiendo los mintrminos actualiza automticamente la tabla de salidas de la funcin y calcula automticamente el nmero de variables de entrada segn los mintrminos ingresados.

Tabla de mintrminos.
Es la tabla de todas las combinaciones cuya salida son unos.

Cubos 0.
Es la tabla de cubos ceros es decir son todas las combinaciones que tienen coma salida igual a 1 y adems estn ordenadas de acuerdo al numero de unos que tienen cada una de las combinaciones.

10

Cubos n,
Son las tablas de combinaciones que se van formando en el proceso de simplificacin estas combinaciones tienen ceros unos y condiciones no importa que corresponden a las variaciones entre una combinacin y otra.

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 Simplificacin.
Es la tabla conformada por los mintrminos y los implicantes primos para poder simplificar.

Implicantes Primarios.
Los implicantes primarios son los trminos que necesariamente deben estar dentro de la solucin.

Implicantes Secundarios.
Los implicantes secundarios son trminos adicionales con menor costo, que tambin deben estar dentro de la solucin.

Solucin.
Es la expresin mas simplificada posible de la funcin booleana.

También podría gustarte