Está en la página 1de 3

#include<stdio.h> #include<conio.h> #include<stdlib.

h> #define MAX_VARS 16 //maximo numero de variables en un termino producto #define MAX_CUBOS 50 //Maximo de cubos #define TRUE 1 #define FALSE 0 //Representacin de termino producto //typedef enum {complementada, sinComplementar, noAparece} MINITERM; //typedef MINITERM CUBO[16]; typedef unsigned short WORD; //PALABRA DE 16 BITS struct cube{ WORD t; //Bits 1 para variables sin complementar WORD f; //Bits 1 para variables complementadas }; typedef struct cube CUBO; //Declaracion de variable CUBO //Verifica si dos cubos son iguales y //retorna TRUE si C1 y C2 son iguales int CubosIguales(CUBO C1, CUBO C2) { return ((C1.t == C2.t) && (C1.f == C2.f)); } //retorna verdadero si w tiene exatamente un uno int UnUno(WORD w) { int unos, b; unos =0; for(b=0;b<MAX_VARS;b++) { if(w & 0x0001) unos++; w= w>>1; } return (unos == 1); } // Retorna verdadero si C1 y C2 difieren en solamente una variable //la cual aparece verdadero en uno y falso en la otra palabra int Combinable(CUBO C1, CUBO C2) { WORD twordt, twordf; twordt= C1.t ^ C2.t; twordf= C1.f ^ C2.f; return ((twordt == twordf) && UnUno(twordt)); } //Combina C1 y C2 y lo almacena C3 //usando el teorema T10, simplifica void Combinar(CUBO C1, CUBO C2, CUBO *C3) { C3->t = C1.t & C2.t; C3->f = C1.f & C2.f; } int main() { CUBO cubos[MAX_VARS+1][MAX_CUBOS], tempCubo; int cubierto[MAX_VARS+1][MAX_CUBOS]; int numCubos[MAX_VARS+1];

int m; //Valor de m en un Cubo m int i,j,k,p; //Indices de los cubos o arreglo cubierto int encontrado, NumVars; WORD tempT,tempF; WORD multi=0x8000; //Multiplicador para determinar implicantes primos result antes //Inicializa el numero de cubos-m en cada nivel m for(m=0; m<MAX_VARS+1; m++) numCubos[m]=0; for(m=0; m<MAX_VARS+1; m++) for(j=0; j<MAX_CUBOS; j++) { cubos[m][j].t=0; cubos[m][j].f=0; cubierto[m][j]=0; } /***************************************************** Lectura de la lista de Miniterminos (Cubos-0) *****************************************************/ printf("Cuantas variables son los Miniterminos: "); scanf("%d", &NumVars); printf("Cuantos miniterminos son: "); scanf("%d",&numCubos[0]); for(j=0; j<numCubos[0]; j++) { printf("\nMinitermino[%d]: ",j); scanf("%hu",&tempT); //Obtener los F tempF= ~tempT; tempF= tempF<<(MAX_VARS - NumVars); tempF= tempF>>(MAX_VARS - NumVars); //Asignar los arreglos T y F cubos[0][j].t= tempT; cubos[0][j].f= tempF; } /****** Fin de lectura de miniterminos // colocar el codigo que trae el libro ************/

/****** Imprimir Implicantes Primos *****************/ printf("\nImplicantes Primos Resultantes:\n"); multi = multi >> (MAX_VARS - numCubos[0]); //inicializa el multiplicador for(m=0; m<MAX_VARS; m++) //Hacer para todos los Niveles for(j=0; j<numCubos[m]; j++) //Hacer para todos los cubos en este nivel if(!cubierto[m][j]) { //inicializa ceros y unos tempT= cubos[m][j].t; tempF= cubos[m][j].f; // ceros,unos y giones for(i=0; i<numCubos[0]; i++) { if((tempT & multi) == (tempF & multi)) printf("-"); else if(tempT & multi)

printf("1"); else if (tempF & multi) printf("0"); tempT= tempT << 1; tempF= tempF << 1; } printf("\n"); } getch(); }

También podría gustarte