Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2013, 17:25   #1
Alexandr-
Пользователь
 
Регистрация: 04.03.2013
Сообщений: 79
По умолчанию СДНФ и СКНФ

Здравствуйте. Помогите исправить СКНФ и как можно реализовать программу чтобы количество переменных булевой функции было до 9, а у меня до 2.

Задание(кратко):
Написать программу на языке высокого уровня, которая по данной таблице истинности булевой функции составит её совершенную дизъюнктивную и совершенную конъюнктивную формы.

Пример таблицы(он может быть другой):
2
0 0 0
0 1 1
1 0 1
1 1 0

Код:
#include <iostream>
int main()
{
int i,n,r,k,sh,sh2; int tt[100]; 
FILE *f1,*f2,*f3; 

f1 = fopen("table.txt","rb");
f2 = fopen("SDNF.txt","w");
f3 = fopen("SKNF.txt","w");
//-----------------------------------------

fscanf (f1,"%d",&n); //1-ая строка, и она равна 2
printf("n=%d\n",n); //проверка для себя
r=n; r=n;
k=1;//порядковый номер х
sh=0;//кол-во
sh2=0;//кол-во
for(i=0;!feof(f1);i++) {fscanf(f1,"%d",&tt[i]);}//сканирование

f1 = fopen("table.txt","rb");//перенос курсора в начало
fscanf (f1,"%d",&n);//перенос курсора на 2 строку

for(i=0;!feof(f1);i++)//цикл на считывание со 2 строки, т.к. там курсор
{

	fscanf(f1,"%d",&tt[i]);

	printf("%d",i);
	printf("tt=%d\n",tt[i]);
	printf("ttr=%d\n",tt[r]);
//--------------------------------------------
	if(tt[r]==1)//проверка на СДНФ
		{
		if(i!=r)
			{
			sh=sh+1;
			
			if(tt[i]==0)
				{
				if(n==1)
					{
					fprintf(f2,"(X1')");
					if(sh>1) {fprintf(f2,"  |  ");}
					//r=r+n+1;
					}
				if(n>1)//0
					{
					if(k==1) fprintf(f2,"(");
					fprintf(f2,"X");
					fprintf(f2,"%d'",k);
					if(k==1) fprintf(f2," & ");
					if(k==2) {fprintf(f2,")"); if(sh==2) {fprintf(f2,"  |  "); k=0;}}
					k++;
					}
				}
			if(tt[i]==1)
				{
				if(n==1)
					{
					fprintf(f2,"(X1)");
					if(sh>1) {fprintf(f2,"  |  ");}
					//r=r+n+1;
					}
				if(n>1)//1
					{
					if(k==1) fprintf(f2,"(");
					fprintf(f2,"X");
					fprintf(f2,"%d ",k);
					if(k==1) fprintf(f2," & ");
					if(k==2) {fprintf(f2,")"); if(sh==2) {fprintf(f2,"  |  "); k=0;}}
					k++;
					}
				}
		
			}
		if(i==r)
			r=r+n+1;
		}
//-----------------------------------------

//--------------------------------------------
	if(tt[r]==0)//проверка на СКНФ
		{
		if(i!=r)
			{
			sh2=sh2+1;
			
			
			if(tt[i]==0)
				{
				if(n==1)
					{
					fprintf(f3,"(X1)");
					if(sh2>1) {fprintf(f3,"  &  ");}
					//r=r+n+1;
					}
				if(n>1)//0
					{
					if(k==1) fprintf(f3,"(");
					fprintf(f3,"X");
					fprintf(f3,"%d",k);
					if(k==1) fprintf(f3," | ");
					if(k>=2) {fprintf(f3,")"); if(sh2==2) {fprintf(f3,"  &  "); k=0;}}
					k++;
					}
				}
			if(tt[i]==1)
				{
				if(n==1)
					{
					fprintf(f3,"(X1')");
					if(sh2>1) {fprintf(f3,"  &  ");}
					//r=r+n+1;
					}
				if(n>1)//1
					{
					if(k==1) fprintf(f3,"(");
					fprintf(f3,"X");
					fprintf(f3,"%d'",k);
					if(k==1) fprintf(f3," | ");
					if(k>=2) {fprintf(f3,")"); if(sh2==2) {fprintf(f3,"  &  "); k=0;}}
					k++;
					}
				}	
		
			}
		if(i==r)
			r=r+n+1;
		}
//-----------------------------------------

}

system("pause");
//-----------------------------------------
fclose(f1);
fclose(f2);
fclose(f3);
	return 0;
}
Alexandr- вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Привести булеву функцию к СДНФ zhbnv Помощь студентам 0 29.12.2012 12:08
Привести любую формулу на языке предикатов 1го порядка к СКНФ (C# / Prolog). emppu2007 Фриланс 0 11.06.2011 13:54
Преобразование функции в СКНФ NSvirus Свободное общение 3 29.12.2009 08:07
Построить СДНФ на Паскале stscolt Помощь студентам 3 24.04.2008 14:33