Логические Функции Переменных C++.ошибка В Проге,

09.02.2013
1
0
#1
Скажу честно - программу переделывала под свою, ту которую нашла в интернете.Добавила пару нужных мне функций, и поисправляла ошибки.Запускается - работает. но несколько данных не сходятся с моим ручным просчетом. то что я в ручную правильно все сделала - я уверена.а почему не все данные сходятся - не понимаю прилагаю скрин своей ручной работы, формулу по которой делала прогу, и сам код программы.
тема реализации программы : Логические функции переменных (дискретка)
C++:
#include <iostream.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>

int * CycleNot(int,int,int,int); //0// отрицание
int * CycleAnd(int,int,int,int); //1// умножение (коньъюнкция)
int * CycleXor(int,int,int,int); //2// сложение |2|
int * CycleNor(int,int,int,int); //4// стрелка Пирса
int * CycleNors(int,int,int,int); //5// Шефнер
int * CycleImpl(int,int,int,int); //6// импликация 
int * CycleEkv(int,int,int,int);//7// эквиваленция

int Not(int x) // отрицание
{
if (x)
return 0;
return 1;
}

int And(int x, int y) // умножение (коньъюнкция)
{
return x*y;
}

int Xor(int x, int y) // сложение |2|
{
if (x!=y)
return 1;
return 0;
}

int Nor(int x, int y) // стрелка Пирса
{
if (x==0 && y==0)
return 1;
return 0;
}
int Nors(int x, int y) // Шефнер
{
if (x==1 && y==1)
return 0;
return 1;
}

int Impl(int x, int y) // импликация 
{
if (x==1 && y==0)
return 0;
return 1;
}
int Ekv(int x, int y) // эквиваленция
{
if (x=y)
return 1;
return 0;
}
// функции циклов обработки по формулам
int * CycleNot(int *x)
{
int *z = new int[16];
for (int i = 0; i < 16; i++)
{
*(z+i) = Not(x[i]);
}
return z;
}

int * CycleAnd(int *x,int *y)
{
int *z = new int[16];
for (int i = 0; i < 16; i++)
{
*(z+i) = And(x[i],y[i]);
}
return z;
}

int * CycleXor(int *x,int *y)
{
int *z = new int[16];
for (int i = 0; i < 16; i++)
{
*(z+i) = Xor(x[i],y[i]);
}
return z;
}

int * CycleNor(int *x,int *y)
{
int *z = new int[16];
for (int i = 0; i < 16; i++)
{
*(z+i) = Nor(x[i],y[i]);
}
return z;
}


int * CycleNors(int *x,int *y)
{
int *z = new int[16];
for (int i = 0; i < 16; i++)
{
*(z+i) = Nors(x[i],y[i]);
}
return z;
}

int * CycleImpl(int *x,int *y)
{
int *z = new int[16];
for (int i = 0; i < 16; i++)
{
*(z+i) = Impl(x[i],y[i]);
}
return z;
}
int * CycleEkv(int *x,int *y)
{
int *z = new int[16];
for (int i = 0; i < 16; i++)
{
*(z+i) = Ekv(x[i],y[i]);
}
return z;
}

//  -=Программа=-

int main()
{

// инициализация переменных
int x1[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1};
int x2[16] = {0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1};
int x3[16] = {0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1};
int x4[16] = {0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1};
int *temp1;
int *temp2;
int *temp3;
int *temp4;

temp1 = CycleNot(x3);
temp2 = CycleAnd(temp1,x4);

temp1 = CycleNot(x2);
temp3 = CycleAnd(x1,temp1);

temp1 = CycleNors(temp2,temp3);

temp2 = CycleAnd(x2,x3);
temp3 = CycleNot(temp2);


temp2=CycleImpl(temp1,temp3);

temp1=CycleAnd(x1,x2);
temp3=CycleAnd(x1,x4);
temp4=CycleEkv(temp1,temp3);
/*ekv*/

temp1 = CycleXor(temp2,temp4);


cout << "-------------\nx1 x2 x3 x4 f\n-------------";
for (int i = 0; i < 16; i++) // выводим функцию на экран
{
cout << endl << x1[i] << " ";
cout <<		 x2[i] << " ";
cout <<		 x3[i] << " ";
cout <<		 x4[i] << " ";
cout <<		 temp1[i] << endl;
}
cout << "-------------";
cout << "\n\n SDNF: ";
int f = 0;
for (int i = 0; i < 16; i++) //'"Ќ"
{
if (temp1[i]==1)
{
f++;
if (!x1[i]) cout << "!";
cout << "x1*";
if (!x2[i]) cout << "!";
cout << "x2*";
if (!x3[i]) cout << "!";
cout << "x3*";
if (!x4[i]) cout << "!";
cout << "x4";
if (i<15) cout << " + ";
if (f==4 || f==8 || f==12) cout << endl << "	  ";
}
}
cout << "\n\n SKNF: ";
f = 0;
for (int i = 0; i < 16; i++) //'ЉЌ"
{
if (temp1[i]==0)
{
f++;
cout << "(";
if (x1[i]) cout << "!";
cout << "x1+";
if (x2[i]) cout << "!";
cout << "x2+";
if (x3[i]) cout << "!";
cout << "x3+";
if (x4[i]) cout << "!";
cout << "x4";
cout << ") ";
if (f==4 || f==8 || f==12) cout << endl << "	  ";
}
}
cout << "\n";
system("pause");
return 0;
}
Скрин с формулой - в файлике. немного не разобралась как картинки скидывать
 

Вложения

W

Whatka

#2
Есть же стандартные функции)
Очень странный код(странный мягко сказанно),не стал даже искать где ошибка.

А так как ыы всё равно с интернета искали,то вот мой вариант.
могу помочь разобрать,если есть необходимость

C++:
//
#include <iostream>
using namespace std;
const char size=16;
/*
! - отрицание
& - конъюнкция
| - дезъюнкция
^ - исключающее или(сложение |2|)
-----------------------------
!a|b	- импликация
!(a&b)	- штрих Шеффера
----------------------------
a = !x3 & x4
b = x1 & !x2
c = !(x2 & x3) ----> !x2 | !x3
d = ! ( (x1 & x2) == (x1 & x4) )

(!( !(a&b) ) | c )^d  ---->  ( (a&b) | c ) ^ d
*/
void main()
{
bool x1[size] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1};
bool x2[size] = {0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1};
bool x3[size] = {0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1};
bool x4[size] = {0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1};

bool answ[size];
bool a,b,c,d;

cout<<"a:\tb:\tc:\td:\tans:\n";
for(char i=0; i<size; i++)
{
a = (!x3[i]) & x4[i];
b = x1[i] & (!x2[i]);
c = (!x2[i]) | (!x3[i]);
d = ! ( (x1[i] & x2[i]) == (x1[i] & x4[i]) );

answ[i]= ( (a&b) | c ) ^ d;

cout<<a<<"\t"<<b<<"\t"<<c<<"\t"<<d<<"\t "<<answ[i]<<endl;
}
cout<<"\n";
}
//