Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 31, средняя оценка - 4.61
NektaRR
1 / 1 / 1
Регистрация: 26.02.2011
Сообщений: 53
#1

Библиотека функций - C++

26.02.2011, 20:46. Просмотров 4113. Ответов 21
Метки нет (Все метки)

Может кто поможет!!
Язык С. Создать библиотеку функций для построения таблиц истинности булевых функций заданных КНФ и ДНФ. Пользователь вводит ДНФ или КНФ и при подключении BF.H (которую нужно создать..как? help!!) выводит табл истинности.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2011, 20:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Библиотека функций (C++):

Какая библиотека отвечает за использования математических функций в VS 2005? - C++
Какая библиотека отвечает за использования математических функций в VS 2005??

Итерационные циклы,Определение и вызов функций,Использование библиотечных функций stdio.h - C++
Помогите решить задания: 1.Дано натуральное число n. Найти разность между первой цифрой этого числа и суммой всех остальных. ...

Передача значений функций в главную программу, вызов функций - C++
Здравствуйте! Скорее всего, неправильно передаю значения функциям и в главную программу. Помогите найти ошибку! В итоге выводит...

Вызов функций внутри других функций - C++
#include "stdafx.h" #include "stdio.h" #include <iostream> #include <fstream> #include <iomanip> using namespace std; ...

Объявление функций внутри других функций - C++
Иногда вижу в некоторых исходниках на c объявление функций, внутри main. Например: main(){ double sum(int max_num); } ...

функции класса раздела private реализуються так же как и раздела public? в смысле виртуальных функций, дружественных функций, и т.д. - C++
функции класса раздела private реализуються так же как и раздела public? в смысле виртуальных функций, дружественных функций, и т.д.

21
reich
110 / 46 / 3
Регистрация: 03.09.2009
Сообщений: 112
26.02.2011, 20:56 #2
bf.h
C++
1
2
3
4
5
6
7
8
#ifndef _BF_H_
#define _BF_H_
 
void MyLibFunction1();
void MyLibFunction2();
void MyLibFunction3();
 
#endif //_BF_H_
bf.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
#include "bf.h"
 
void MyLibFunction1()
{
}
void MyLibFunction2()
{
}
void MyLibFunction3()
{
}
вот так
0
NektaRR
1 / 1 / 1
Регистрация: 26.02.2011
Сообщений: 53
27.02.2011, 00:00  [ТС] #3
вот кое что уже есть..
как передать в хедер задаваемое кнф (днф) типа х1!х2х3 and х1х2!х3 ???

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#ifndef  __BF_H
#define  __BF_H
 
 void knf( /*как вот сюда передать кнф */)
 { if  int x1, x2, x3, y;
    printf("x1|x2|x3| y\n");
    printf("-----------\n");
    for(x1=0; x1<2; x1++)
    {
        for(x2=0; x2<2; x2++)
        {
             for(x3=0; x3<2; x3++)
             {
                 y = !х1х2х3 and x1!x2x3;
                 printf(" %i| %i| %i| %i\n", x1, x2, x3, y);
             };
        };
    };
        
    system ("pause");
    return 0;
}
 #define false   0
 #define true    1
 #define and     &&
 #define and_eq  &=
 #define bitand  &
 #define compl   ~
 #define not     !
 #define not_eq  !=
 #define or      ||
 #define or_eq   |=
 #define xor     ^
 #define xor_eq  ^=
#endif
0
reich
110 / 46 / 3
Регистрация: 03.09.2009
Сообщений: 112
27.02.2011, 00:06 #4
Я не знаю, что такое кнф и днф, но передавать это нужно при вызове функции в качестве параметров.
прототип функции:
C++
1
void MyFunction1(int param1, double param2);
вызов функции:
C++
1
MyFunction1( 1, 0.56 );
Добавлено через 2 минуты
Цитата Сообщение от NektaRR Посмотреть сообщение
y = !х1х2х3 and x1!x2x3;
это что еще такое?
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.02.2011, 00:15 #5
NektaRR, тут так просто всё не решится, надо писать разбор выражения. Задача нетривиальная, просто так писать никто не будет.

Добавлено через 6 минут
Цитата Сообщение от reich Посмотреть сообщение
Я не знаю, что такое кнф и днф
Логические функции. Первая представлена как конъюнкция простых дизъюнкций (т.е. таких, в которые каждая переменная или её отрицание входят не более одного раза), вторая, соответственно, дизъюнкция простых конъюнкций. Их-то и надо парсить, что и пытается таким вот простым путём сделать ТС в 14 строке)))
0
NektaRR
1 / 1 / 1
Регистрация: 26.02.2011
Сообщений: 53
27.02.2011, 00:15  [ТС] #6
кнф это вот такая строка какой её тип будет?? char?

y=х1!х2х3 and х1х2!х3

Вообщем на экране в результате должно выводитсь что-то в этом роде табличка ( если ввести y=х1!х2х3 and х1х2!х3 то знач у в табл будут другие,правильние)

х1 х2 х3 у
0 0 0 0
0 0 1 0
0 1 0 0
1 0 0 0
0 1 1 1
1 1 0 0
1 0 1 1
1 1 1 0
0
NektaRR
1 / 1 / 1
Регистрация: 26.02.2011
Сообщений: 53
27.02.2011, 00:20  [ТС] #7
Цитата Сообщение от reich Посмотреть сообщение
Я не знаю, что такое кнф и днф, но передавать это нужно при вызове функции в качестве параметров.
прототип функции:
C++
1
void MyFunction1(int param1, double param2);
вызов функции:
C++
1
MyFunction1( 1, 0.56 );
Добавлено через 2 минуты

это что еще такое?
это пример кнф где если х1=1 значение !х1=0 ... булева алгебра... дискретная математика..
0
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
27.02.2011, 00:22 #8
и правда
сперва понадобится лексический разбор, пропустить все пробельные знаки, вычленить и распределить все лексемы, из лексем пронумеровать переменные
потом построение грамматики - из синтаксического дерева рассчитать значение выражения
морочно вообщем
0
NektaRR
1 / 1 / 1
Регистрация: 26.02.2011
Сообщений: 53
27.02.2011, 00:23  [ТС] #9
Цитата Сообщение от silent_1991 Посмотреть сообщение
надо писать разбор выражения
что ти имеешь ввиду?
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.02.2011, 00:24 #10
NektaRR, ваша функция ни ДНФ, ни КНФ не является. У вас тут конъюнкция конъюнкций, т.е. белиберда. КНФ ваша функция являлась бы, если бы имела вид вроде y = (x1 \/ !x2 \/ x3)/\(x1 \/ x2 \/ !x3). ДНФ же она была бы при такой записи: y = x1 /\ !x2 /\ x3 \/ x1 /\ x2 /\ !x3
0
NektaRR
1 / 1 / 1
Регистрация: 26.02.2011
Сообщений: 53
27.02.2011, 00:27  [ТС] #11
Цитата Сообщение от alex_x_x Посмотреть сообщение
и правда
сперва понадобится лексический разбор, пропустить все пробельные знаки, вычленить и распределить все лексемы, из лексем пронумеровать переменные
потом построение грамматики - из синтаксического дерева рассчитать значение выражения
морочно вообщем
это можно сделать через if.. если єто проверка на то как правильно введено кнф, то я знаю как...
только где его писать в теле void knf() или перед..?
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.02.2011, 00:29 #12
Цитата Сообщение от NektaRR Посмотреть сообщение
что ти имеешь ввиду?
Вот вы смотрите на выражение, например, y = (x1 \/ !x2 \/ x3)/\(x1 \/ x2 \/ !x3). Что вы видите? Что сперва надо посчитать значение в левой скобке, потом в правой, а потом выполнить их конъюнкцию. При этом посчитать выражения в скобках можно слева направо, поскольку там стоят одинаковые операции (точнее, операции с одним приоритетом). Так же там есть отрицания, их тоже надо учитывать. Вы это всё видите эмпирически. А вот как втолковать это компьютеру? Он никаких конъюнкций, отрицаний и скобок не знает. Так вот, для этого надо реализовывать специальный алгоритм, который простую строку переводит в определённую структуру данных, которую затем было бы легко разбирать алгоритмически (например, дерево). Вот это процесс и является основным в данной программе и достаточно громоздким.
0
NektaRR
1 / 1 / 1
Регистрация: 26.02.2011
Сообщений: 53
27.02.2011, 00:30  [ТС] #13
Цитата Сообщение от silent_1991 Посмотреть сообщение
ваша функция ни ДНФ, ни КНФ не является. У вас тут конъюнкция конъюнкций, т.е. белиберда. КНФ ваша функция являлась бы, если бы имела вид вроде y = (x1 \/ !x2 \/ x3)/\(x1 \/ x2 \/ !x3). ДНФ же она была бы при такой записи: y = x1 /\ !x2 /\ x3 \/ x1 /\ x2 /\ !x3
согласн.. завтык..
кста, как записать знаки конъюкции и дизъюнкции правильно?
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.02.2011, 00:35 #14
NektaRR, давайте сначала разберёмся: вам нужна одна конкретная функция в программе или вам нужна программа, которой пользователь сообщает любую функцию любой сложности и которая эту функцию обрабатывает? Если первое, то жёстко впилить эту функцию в исходник труда не составляет - вы просто пишите её как она есть, учитывая правила синтаксиса языка. Только с этой программой вы уже ничего не сделаете, она будет считать строго эту функцию и никакую иную. Но вам-то нужен именно второй вариант, т.е. чтобы пользователь сам вводил функцию любой сложности, и программа её обрабатывала. Тогда вам придётся писать обработку логических выражений (т.н. парсер), и никакого другого пути у вас нет.
0
NektaRR
1 / 1 / 1
Регистрация: 26.02.2011
Сообщений: 53
27.02.2011, 00:37  [ТС] #15
Цитата Сообщение от silent_1991 Посмотреть сообщение
Что сперва надо посчитать значение в левой скобке, потом в правой, а потом выполнить их конъюнкцию. При этом посчитать выражения в скобках можно слева направо, поскольку там стоят одинаковые операции (точнее, операции с одним приоритетом). Так же там есть отрицания, их тоже надо учитывать. Вы это всё видите эмпирически. А вот как втолковать это компьютеру? Он никаких конъюнкций, отрицаний и скобок не знает. Так вот, для этого надо реализовывать специальный алгоритм, который простую строку переводит в определённую структуру данных, которую затем было бы легко разбирать алгоритмически (например, дерево). Вот это процесс и является основным в данной программе и достаточно громоздким.
...сложно..((
но вот эта прога откуда взят кусок для того bf.h что в начале работает и вроде правильно считает таблицу истинности только для одной заданой функции, может ее как то переделать для для любой вводимой кнф(днф)
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdlib.h>
#include <stdio.h>
 
int main ()
{
    int x1, x2, x3, y;
        
    printf("x1|x2|x3| y\n");
    printf("-----------\n");
    for(x1=0; x1<2; x1++)
    {
        for(x2=0; x2<2; x2++)
        {
             for(x3=0; x3<2; x3++)
             {
                 y = ( (!x1 && x2) || (x1 && !x2) ) && (x3 || x1 && x2);
                 printf(" %i| %i| %i| %i\n", x1, x2, x3, y);
             };
        };
    };
        
    system ("pause");
    return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2011, 00:37
Привет! Вот еще темы с ответами:

Перегрузка функций. Реализация функций - C++
Разработать функцию f(x) , которая возвращает младшую цифру натурального числа x . Вычислить с ее помощью значение выражения z= f(a) +...

Использование функций и шаблонов функций - C++
Люди помогите пожалуйста буду очень благодарна) вобщем вот первая часть лабы Написать программу, функция main которой включает...

Использование функций и шаблонов функций - C++
Составьте программу – формирование цены на молоко. Животновод в начале каждой зимы цену на молоко на р%, а каждым летом снижает на столько...

Библиотека С++ - C++
В общем, нужно написать программу для области &quot;Библиотека&quot;. Есть пару вопросов. Вот сам код программы: header: #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
27.02.2011, 00:37
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru