Скачиваний:
28
Добавлен:
15.06.2014
Размер:
3.26 Кб
Скачать

import static java.lang.System.out;
import static java.lang.Math.pow; 
import java.io.*;
import java.util.*;
import java.util.regex.*;

/*
  4) Построить все функции n-переменных. Определить какие из них принимают значение 1 ровно на одном наборе.
 */
public class Laba3 {
    
    static final boolean FLAG_TABLE = true; 

    static final String IN_FILE = "in.txt";  
    static final int Num = 1;
    int[][] table;
    String[] varVal;

    public void go() {
	table = new int[(int)pow(2, Num)][Num + 1];
	varVal = new String[Num + 1];
	for( int i = 0 ; i <= Num ; i++ )		
	    varVal[i] = new String("0");
	int j = 0;
	while( !varVal[Num].equals("1") ) {
	    for( int i = 0 ; i < Num ; i++ )
		table[j][i] = (byte)(varVal[i].charAt(0) ^ 0x30);
	    int i;
	    for( i = 0 ; !varVal[i].equals("0") ; i++ )
		varVal[i] = "0";
	    varVal[i] = "1";
	    j++;
	}
	varVal = new String[(int)(pow(2, Num) + 1)];
	for( int i = 0 ; i <= pow(2, Num) ; i++ )		
	    varVal[i] = new String("0");
	for( int counter = 0 ; counter < pow(2, pow(2, Num)) ; counter++ ) {
	    boolean fOne = false, mutex = true;
	    for( int i = 0 ; i < pow(2, Num) ; i++ ) {
		table[i][Num] = (byte)(varVal[i].charAt(0) ^ 0x30);
		if( table[i][Num] == 1  && mutex ) {
		    if( !fOne ) fOne = true;
		    else {
			fOne = false;
			mutex = false;
		    }
		}
	    }
	    buildSDNF();
	    buildSKNF();
	    out.print("One positive set - ");
	    if( fOne ) out.println("Yes");
	    else out.println("No");
	    int i;
	    for( i = 0 ; !varVal[i].equals("0") ; i++ )
		varVal[i] = "0";
	    varVal[i] = "1";
	    j++;
	    dumpTable();
	    out.print("\n");
	}
    }
    
    void buildSDNF() {
	int j;
	String result = "";
	for( int i = 0 ; i < table.length ; i++ ) {
	    if( table[i][table[0].length - 1] == 1 ) {
		for( j = 0 ; j < (table[i].length - 1) ; j++ ) {
		    if( table[i][j] == 0 )
			result += "!";
		    result += "x";
		    result += (char)(0x30 | (j + 1));
		    if( j != (table[i].length - 2) )
			result += "&";
		}
		result += "|";
	    }
	}
	if( result.length() > 0 ) {
	    if( result.charAt(result.length() - 1) == '|' )
		result = result.substring(0, result.length() - 1);
	    out.println("CDHF = " + result);
	    return;
	}
	out.println("CDHF = 0");
    }
    
    void buildSKNF() {
	int j;
	String result = "";
	for( int i = 0 ; i < table.length ; i++ ) {
	    if( table[i][table[0].length - 1] == 0 ) {
		for( j = 0 ; j < (table[i].length - 1) ; j++ ) {
		    if( table[i][j] == 1 )
			result += "!";
		    result += "x";
		    result += (char)(0x30 | (j + 1));
		    if( j != (table[i].length - 2) )
			result += "|";
		}
		result += "&";
	    }
	}
	if( result.length() > 0 ) {
	    if( result.charAt(result.length() - 1) == '&' )
		result = result.substring(0, result.length() - 1);
	    out.println("CKHF = " + result);
	    return;
	}
	out.println("CKHF = 0");
    }
    
    void dumpTable() {
	if( FLAG_TABLE ) {
	    int j;
	    for( int i = 0 ; i < table.length ; i++ ) {
		out.print((i + 1) + ") ");
		for( j = 0 ; j < table[i].length ; j++ )
		    if( (j + 1) == table[i].length )
			out.print("f="+ table[i][j] + " ");
		    else
			out.print("x" + (j + 1) + "="+ table[i][j] + " ");
		out.print("\n");
	    }
	    out.print("\n");
	}
    }
}

Соседние файлы в папке lab3