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

Тема в разделе "C/C++/C#", создана пользователем lisica198808, 4 янв 2014.

  1. lisica198808

    lisica198808 New Member

    Регистрация:
    9 фев 2013
    Сообщения:
    1
    Симпатии:
    0
    Скажу честно - программу переделывала под свою, ту которую нашла в интернете.Добавила пару нужных мне функций, и поисправляла ошибки.Запускается - работает. но несколько данных не сходятся с моим ручным просчетом. то что я в ручную правильно все сделала - я уверена.а почему не все данные сходятся - не понимаю прилагаю скрин своей ручной работы, формулу по которой делала прогу, и сам код программы.
    тема реализации программы : Логические функции переменных (дискретка)
    Код (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;
    }
    Скрин с формулой - в файлике. немного не разобралась как картинки скидывать
     

    Вложения:

  2. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    Есть же стандартные функции)
    Очень странный код(странный мягко сказанно),не стал даже искать где ошибка.

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

    Код (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";
    }
    //
     
Загрузка...
Похожие Темы - Логические Функции Переменных
  1. Генералл
    Ответов:
    2
    Просмотров:
    68
  2. rn3rjd
    Ответов:
    0
    Просмотров:
    455
  3. Sanchezz86
    Ответов:
    1
    Просмотров:
    590
  4. Sentim
    Ответов:
    1
    Просмотров:
    633
  5. FaRReLL
    Ответов:
    1
    Просмотров:
    1.446

Поделиться этой страницей