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

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

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

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

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

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

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

Библиотека Си++ - C++
Hi! Человек я не глупый, матан на пятерку сдан, по линалу автомат. Но вот с программированием... не задалось. К пятнице надо сделать...

библиотека C++ - C++
Подскажите: #include <iostream.h> #include <conio.h> #include <cstdlib.h> //показывает ошибку int main() { clrscr(); ...

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

Библиотека - C++
Предметная область - библиотека. Решаемые задачи: выдача справок о наличии книг, журналов, газет. Реализовать следующие сервисы: ...

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

Библиотека. - C++
Какая нужна библиотека для функций? gotoxy putch textcolor clrscr

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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()
{
}
вот так
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
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;
это что еще такое?
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.02.2011, 00:15     Библиотека функций #5
NektaRR, тут так просто всё не решится, надо писать разбор выражения. Задача нетривиальная, просто так писать никто не будет.

Добавлено через 6 минут
Цитата Сообщение от reich Посмотреть сообщение
Я не знаю, что такое кнф и днф
Логические функции. Первая представлена как конъюнкция простых дизъюнкций (т.е. таких, в которые каждая переменная или её отрицание входят не более одного раза), вторая, соответственно, дизъюнкция простых конъюнкций. Их-то и надо парсить, что и пытается таким вот простым путём сделать ТС в 14 строке)))
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
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 ... булева алгебра... дискретная математика..
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
27.02.2011, 00:22     Библиотека функций #8
и правда
сперва понадобится лексический разбор, пропустить все пробельные знаки, вычленить и распределить все лексемы, из лексем пронумеровать переменные
потом построение грамматики - из синтаксического дерева рассчитать значение выражения
морочно вообщем
NektaRR
1 / 1 / 1
Регистрация: 26.02.2011
Сообщений: 53
27.02.2011, 00:23  [ТС]     Библиотека функций #9
Цитата Сообщение от silent_1991 Посмотреть сообщение
надо писать разбор выражения
что ти имеешь ввиду?
silent_1991
Эксперт С++
4960 / 3036 / 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
NektaRR
1 / 1 / 1
Регистрация: 26.02.2011
Сообщений: 53
27.02.2011, 00:27  [ТС]     Библиотека функций #11
Цитата Сообщение от alex_x_x Посмотреть сообщение
и правда
сперва понадобится лексический разбор, пропустить все пробельные знаки, вычленить и распределить все лексемы, из лексем пронумеровать переменные
потом построение грамматики - из синтаксического дерева рассчитать значение выражения
морочно вообщем
это можно сделать через if.. если єто проверка на то как правильно введено кнф, то я знаю как...
только где его писать в теле void knf() или перед..?
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.02.2011, 00:29     Библиотека функций #12
Цитата Сообщение от NektaRR Посмотреть сообщение
что ти имеешь ввиду?
Вот вы смотрите на выражение, например, y = (x1 \/ !x2 \/ x3)/\(x1 \/ x2 \/ !x3). Что вы видите? Что сперва надо посчитать значение в левой скобке, потом в правой, а потом выполнить их конъюнкцию. При этом посчитать выражения в скобках можно слева направо, поскольку там стоят одинаковые операции (точнее, операции с одним приоритетом). Так же там есть отрицания, их тоже надо учитывать. Вы это всё видите эмпирически. А вот как втолковать это компьютеру? Он никаких конъюнкций, отрицаний и скобок не знает. Так вот, для этого надо реализовывать специальный алгоритм, который простую строку переводит в определённую структуру данных, которую затем было бы легко разбирать алгоритмически (например, дерево). Вот это процесс и является основным в данной программе и достаточно громоздким.
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
согласн.. завтык..
кста, как записать знаки конъюкции и дизъюнкции правильно?
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.02.2011, 00:35     Библиотека функций #14
NektaRR, давайте сначала разберёмся: вам нужна одна конкретная функция в программе или вам нужна программа, которой пользователь сообщает любую функцию любой сложности и которая эту функцию обрабатывает? Если первое, то жёстко впилить эту функцию в исходник труда не составляет - вы просто пишите её как она есть, учитывая правила синтаксиса языка. Только с этой программой вы уже ничего не сделаете, она будет считать строго эту функцию и никакую иную. Но вам-то нужен именно второй вариант, т.е. чтобы пользователь сам вводил функцию любой сложности, и программа её обрабатывала. Тогда вам придётся писать обработку логических выражений (т.н. парсер), и никакого другого пути у вас нет.
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;
}
NektaRR
1 / 1 / 1
Регистрация: 26.02.2011
Сообщений: 53
27.02.2011, 00:38  [ТС]     Библиотека функций #16
Цитата Сообщение от 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;
}
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.02.2011, 00:44     Библиотека функций #17
NektaRR, вы наотрез отказываетесь хоть чуть-чуть вдуматься в то, что вам пишут уже два человека несколько сообщений подряд. Отвечаю ещё раз:
Да, её можно переделать для любой вводимой функции. Но для этого нужно написать разбор выражения. А то вы хотите примерно так:
"- Этот автомобиль разгоняется до 200 за 6 секунд, но он стоит $200000. А вот этот до 70 за 20 секунд, но и стоит он 70000 рублей.
- Ой, а можно мне до 200 за 6 секунд, но только за 70 тысяч?"
NektaRR
1 / 1 / 1
Регистрация: 26.02.2011
Сообщений: 53
27.02.2011, 00:45  [ТС]     Библиотека функций #18
Цитата Сообщение от silent_1991 Посмотреть сообщение
нужен именно второй вариант, т.е. чтобы пользователь сам вводил функцию любой сложности, и программа её обрабатывала
там как по мне нужны проверки :
что первый символ х или !
что нет пробелов
что символы только х,0..9, и знаки которыми обозначаються дизъюнкции и конъюнкции (п.с. какими знаками обозначать правильно?)
ну и .. больше не придумаю
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.02.2011, 00:47     Библиотека функций #19
NektaRR, ёшкин кот... Эти проверки нужны для синтаксического анализа. Но он вам ничего не даст кроме знания, что в функции нет синтаксических ошибок. Для лексического анализа (а значит и для, собственно, вычисления) нужен парсер, чёрт его дери!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2011, 00:51     Библиотека функций
Еще ссылки по теме:

Библиотека - C++
Нужно создать приложение - библиотеку. Суть такова: 1) Приложение считывает из директории(ий) файлы с определёнными расширениями. 2)...

Библиотека - C++
В библиотеке есть список книг. Каждая запись этого списка содержит фамилии авторов, название книги, год издания. Определить, в данном...

NEWMAT библиотека - C++
Как сомпилировать библиотку newmat11 (http://www.robertnz.net/ol_doc.htm) в Visual C++ 2010? плиз помогите

Библиотека MathGL - C++
Здравствуйте, подскажите пожалуйста, какие библиотеки еще нужно подключить для этого кода, чтобы он работал. Ругается на то, что библиотека...

Библиотека libtiff на с++ - C++
Добрый вечер. У меня следующие проблемы. Искал библиотеку libtiff (tiff.h / tiffio.h) на с++ для работы с файлами данного формата. Но...


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

Или воспользуйтесь поиском по форуму:
NektaRR
1 / 1 / 1
Регистрация: 26.02.2011
Сообщений: 53
27.02.2011, 00:51  [ТС]     Библиотека функций #20
silent_1991, ОК!
можно пример дерева?
это моя третяя програма на С!! HELP!! пожалста!!
Yandex
Объявления
27.02.2011, 00:51     Библиотека функций
Ответ Создать тему
Опции темы

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