1 / 1 / 2
Регистрация: 26.02.2011
Сообщений: 53
|
|
1 | |
Библиотека функций26.02.2011, 20:46. Показов 6264. Ответов 21
Метки нет (Все метки)
Может кто поможет!!
Язык С. Создать библиотеку функций для построения таблиц истинности булевых функций заданных КНФ и ДНФ. Пользователь вводит ДНФ или КНФ и при подключении BF.H (которую нужно создать..как? help!!) выводит табл истинности.
0
|
26.02.2011, 20:46 | |
Ответы с готовыми решениями:
21
Какая библиотека отвечает за использования математических функций в VS 2005? Итерационные циклы,Определение и вызов функций,Использование библиотечных функций stdio.h Передача значений функций в главную программу, вызов функций Объявление функций внутри других функций |
110 / 46 / 4
Регистрация: 03.09.2009
Сообщений: 112
|
|||||||||||
26.02.2011, 20:56 | 2 | ||||||||||
bf.h
0
|
1 / 1 / 2
Регистрация: 26.02.2011
Сообщений: 53
|
||||||
27.02.2011, 00:00 [ТС] | 3 | |||||
вот кое что уже есть..
как передать в хедер задаваемое кнф (днф) типа х1!х2х3 and х1х2!х3 ???
0
|
110 / 46 / 4
Регистрация: 03.09.2009
Сообщений: 112
|
|||||||||||
27.02.2011, 00:06 | 4 | ||||||||||
Я не знаю, что такое кнф и днф, но передавать это нужно при вызове функции в качестве параметров.
прототип функции:
это что еще такое?
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
27.02.2011, 00:15 | 5 |
NektaRR, тут так просто всё не решится, надо писать разбор выражения. Задача нетривиальная, просто так писать никто не будет.
Добавлено через 6 минут Логические функции. Первая представлена как конъюнкция простых дизъюнкций (т.е. таких, в которые каждая переменная или её отрицание входят не более одного раза), вторая, соответственно, дизъюнкция простых конъюнкций. Их-то и надо парсить, что и пытается таким вот простым путём сделать ТС в 14 строке)))
0
|
1 / 1 / 2
Регистрация: 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
|
1 / 1 / 2
Регистрация: 26.02.2011
Сообщений: 53
|
|
27.02.2011, 00:20 [ТС] | 7 |
это пример кнф где если х1=1 значение !х1=0 ... булева алгебра... дискретная математика..
0
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
27.02.2011, 00:22 | 8 |
и правда
сперва понадобится лексический разбор, пропустить все пробельные знаки, вычленить и распределить все лексемы, из лексем пронумеровать переменные потом построение грамматики - из синтаксического дерева рассчитать значение выражения морочно вообщем
0
|
1 / 1 / 2
Регистрация: 26.02.2011
Сообщений: 53
|
|
27.02.2011, 00:23 [ТС] | 9 |
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
27.02.2011, 00:24 | 10 |
NektaRR, ваша функция ни ДНФ, ни КНФ не является. У вас тут конъюнкция конъюнкций, т.е. белиберда. КНФ ваша функция являлась бы, если бы имела вид вроде y = (x1 \/ !x2 \/ x3)/\(x1 \/ x2 \/ !x3). ДНФ же она была бы при такой записи: y = x1 /\ !x2 /\ x3 \/ x1 /\ x2 /\ !x3
0
|
1 / 1 / 2
Регистрация: 26.02.2011
Сообщений: 53
|
|
27.02.2011, 00:27 [ТС] | 11 |
это можно сделать через if.. если єто проверка на то как правильно введено кнф, то я знаю как...
только где его писать в теле void knf() или перед..?
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
27.02.2011, 00:29 | 12 |
Вот вы смотрите на выражение, например, y = (x1 \/ !x2 \/ x3)/\(x1 \/ x2 \/ !x3). Что вы видите? Что сперва надо посчитать значение в левой скобке, потом в правой, а потом выполнить их конъюнкцию. При этом посчитать выражения в скобках можно слева направо, поскольку там стоят одинаковые операции (точнее, операции с одним приоритетом). Так же там есть отрицания, их тоже надо учитывать. Вы это всё видите эмпирически. А вот как втолковать это компьютеру? Он никаких конъюнкций, отрицаний и скобок не знает. Так вот, для этого надо реализовывать специальный алгоритм, который простую строку переводит в определённую структуру данных, которую затем было бы легко разбирать алгоритмически (например, дерево). Вот это процесс и является основным в данной программе и достаточно громоздким.
0
|
1 / 1 / 2
Регистрация: 26.02.2011
Сообщений: 53
|
|
27.02.2011, 00:30 [ТС] | 13 |
согласн.. завтык..
кста, как записать знаки конъюкции и дизъюнкции правильно?
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
27.02.2011, 00:35 | 14 |
NektaRR, давайте сначала разберёмся: вам нужна одна конкретная функция в программе или вам нужна программа, которой пользователь сообщает любую функцию любой сложности и которая эту функцию обрабатывает? Если первое, то жёстко впилить эту функцию в исходник труда не составляет - вы просто пишите её как она есть, учитывая правила синтаксиса языка. Только с этой программой вы уже ничего не сделаете, она будет считать строго эту функцию и никакую иную. Но вам-то нужен именно второй вариант, т.е. чтобы пользователь сам вводил функцию любой сложности, и программа её обрабатывала. Тогда вам придётся писать обработку логических выражений (т.н. парсер), и никакого другого пути у вас нет.
0
|
1 / 1 / 2
Регистрация: 26.02.2011
Сообщений: 53
|
||||||
27.02.2011, 00:37 [ТС] | 15 | |||||
...сложно..((
но вот эта прога откуда взят кусок для того bf.h что в начале работает и вроде правильно считает таблицу истинности только для одной заданой функции, может ее как то переделать для для любой вводимой кнф(днф)
0
|
1 / 1 / 2
Регистрация: 26.02.2011
Сообщений: 53
|
||||||
27.02.2011, 00:38 [ТС] | 16 | |||||
...сложно..((
но вот эта прога откуда взят кусок для того bf.h что в начале работает и вроде правильно считает таблицу истинности только для одной заданой функции, может ее как то переделать для для любой вводимой кнф(днф)
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
27.02.2011, 00:44 | 17 |
NektaRR, вы наотрез отказываетесь хоть чуть-чуть вдуматься в то, что вам пишут уже два человека несколько сообщений подряд. Отвечаю ещё раз:
Да, её можно переделать для любой вводимой функции. Но для этого нужно написать разбор выражения. А то вы хотите примерно так: "- Этот автомобиль разгоняется до 200 за 6 секунд, но он стоит $200000. А вот этот до 70 за 20 секунд, но и стоит он 70000 рублей. - Ой, а можно мне до 200 за 6 секунд, но только за 70 тысяч?"
0
|
1 / 1 / 2
Регистрация: 26.02.2011
Сообщений: 53
|
|
27.02.2011, 00:45 [ТС] | 18 |
там как по мне нужны проверки :
что первый символ х или ! что нет пробелов что символы только х,0..9, и знаки которыми обозначаються дизъюнкции и конъюнкции (п.с. какими знаками обозначать правильно?) ну и .. больше не придумаю
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
27.02.2011, 00:47 | 19 |
NektaRR, ёшкин кот... Эти проверки нужны для синтаксического анализа. Но он вам ничего не даст кроме знания, что в функции нет синтаксических ошибок. Для лексического анализа (а значит и для, собственно, вычисления) нужен парсер, чёрт его дери!
0
|
1 / 1 / 2
Регистрация: 26.02.2011
Сообщений: 53
|
|
27.02.2011, 00:51 [ТС] | 20 |
silent_1991, ОК!
можно пример дерева? это моя третяя програма на С!! HELP!! пожалста!!
0
|
27.02.2011, 00:51 | |
27.02.2011, 00:51 | |
Помогаю со студенческими работами здесь
20
Вызов функций внутри других функций Библиотека функций Библиотека нужных функций библиотека, расширяющая набор функций Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |