Добавил:
Kaz
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лаба 1-3 Лабы / lab3 / Laba3
.java
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");
}
}
}