0 / 0 / 0
Регистрация: 27.04.2011
Сообщений: 14
|
|
1 | |
Битовые операции. Консольные формулы21.07.2014, 14:02. Показов 935. Ответов 17
Метки нет (Все метки)
Добрый день. Столкнулся с проблемой перевода формулы к примеру: a^b|a&(a^b), с коннсоли. Если считывать и преобразовывать то компилятор считает коды a и b. Мне надо чтобы это было как формула. т.е. задавать значения а и b и чтобы он по этой формуле выводил результат. Сделать подобие таблицы истиннсти для функции.
0
|
21.07.2014, 14:02 | |
Ответы с готовыми решениями:
17
Битовые операции, битовые поля. Битовые последовательности и битовые операции Используя только битовые операции и операции арифметического сложения и вычитания, вычислите число Битовые операции и операции смещения языка С |
Модератор
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
|
||||||
21.07.2014, 14:56 | 2 | |||||
1
|
0 / 0 / 0
Регистрация: 27.04.2011
Сообщений: 14
|
||||||
21.07.2014, 15:21 [ТС] | 3 | |||||
да это понятно. мне надо другое. мне надо что-то наподобие таблицы истинности:
через case задаю различные значения для a b. а в консоли не значения a b а саму формулу. которая записывается в массив char. а вот как ее оттуда обрабатывать чтобы она вычислялась. и, bool не сойдет. ~true ~false не false true а -1 -2. если делать через char то описывать как
0
|
0 / 0 / 0
Регистрация: 21.07.2014
Сообщений: 4
|
|
21.07.2014, 15:35 | 4 |
Вам нужно считать массив символов, разделить его на операции и переменные, вручную задать приоритет операций. Я бы разбил на дерево и вычислял так. Автоматом компьютер ничего не заменит).
0
|
Master of Orion
|
|
21.07.2014, 15:49 | 5 |
zss, ему нужно распарсить выражение и написать для него таблицу истинности, насколько я понял.
gluchovv, если таК, то это долго и упорно писать свой парсер, разбирать строку на токены. Причем если там есть еще и переменные, то все еще веселее. А у вас они, судя по всему, есть.
0
|
0 / 0 / 0
Регистрация: 27.04.2011
Сообщений: 14
|
|
21.07.2014, 16:03 [ТС] | 6 |
Да, есть, знания лишними не бывают. Можно подробнее?
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
21.07.2014, 16:08 | 7 |
gluchovv, Пишем свой интерпретатор языка BASIC почитайте. Там конечно сложнее, но знания ж лишними не бывают.
1
|
Модератор
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
|
||||||
21.07.2014, 16:52 | 8 | |||||
А так
1
|
0 / 0 / 0
Регистрация: 27.04.2011
Сообщений: 14
|
|
22.07.2014, 10:35 [ТС] | 9 |
"получение таблицы истиности по логической функции (2, 3, 4 переменные), проверка соответствия заданой таблицы истиности логической функции" - вот задание. я не через цикл, я собирался делать через case. сначала с экрана запрос(осуществлял уже): сколько переменных? в зависимости от ответа будет вызываться разный case, скорее всего напишу функцию принимающее различное кол-во переменных (2, 3 и 4 соответственно). и через case в эту функцию буду генерировать переменные. НО, сама логическая функция вводится в консоли. я не могу заранне её в программе забивать. Нужно из строки её вытаскивать. там может быть любая функция.
Добавлено через 1 минуту а то что таблица истинности так выводится, знаю. поразрядные операции уже рассматривал. но вот как функцию писать на экране, учитывая что она там в строковом типе, а потом из этой строки в main делать формулу Добавлено через 17 часов 32 минуты Ребят, еще чем-нибудь можете помочь? с чего начать хотябы
0
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|
22.07.2014, 10:43 | 10 |
скапитаню, читаете в стрингу и парсите, нашли соимол, &, |, ^, ~, ищете аргументы, если аргумент содержит еще символ операции то остатки аргумента так же парсите(рекурсия получается, до тех пор пока не получите аргумент), лучше неверное начать с приоритетных операций(поиск их в строке)
Добавлено через 51 секунду + учтите что "(" и ")" могут изменить полседовательность выполнения операция, получается даже с поиска скобок надо начать
0
|
0 / 0 / 0
Регистрация: 27.04.2011
Сообщений: 14
|
|
22.07.2014, 12:12 [ТС] | 12 |
я подобное делал для простой формулы. там мнного текстаа было изза разного расположения символов. в целом, я этот вариант рассматривал, один его минус, оочень много придется делать изза того что 4 разряда, т.е. на входе может быть сумма из 16 произведений аргументов...
0
|
Master of Orion
|
|
22.07.2014, 12:23 | 13 |
gluchovv, ну других вариантов нет как бы. Разве что пользоваться сторонней либой, которая будет то же самое делать, но внутри.
То есть ваша задача: получить запись в ОПН, после этого по записи построить дерево операций, а потом просто прогнать его для всех значений переменных.
1
|
20 / 20 / 3
Регистрация: 14.06.2012
Сообщений: 95
|
|
22.07.2014, 12:28 | 14 |
Не хочу нудить, но есть такая книженция: "Компиляторы. Принципы, технологии и инструменты"
Там так же и приведён метод постфиксной записи, как сказал Psilon. А ещё там есть простой интерпретатор того, что Вам нужно, только там для + - / *, просто чуток модифицируете это под & | ^ и будет Вам счастье) Да и вообще там очень много интересного - советую почитать) То, что Вам нужно, реализуется не более, чем в 30 строк кода (не считая ввода и вывода)
2
|
0 / 0 / 0
Регистрация: 21.07.2014
Сообщений: 4
|
|
22.07.2014, 13:45 | 15 |
Программа разбора и вычисления значения арифметического выражения
Тут реализация по польской нотации алгебраических выражений. У вас почти то же самое, но нужно реализовать логические операции. Добавлено через 16 минут Так же можно с помощью дерева реализовать, на мой взгляд это проще http://devwiki.beloblotskiy.co... 0%B2%D0%B0
0
|
0 / 0 / 0
Регистрация: 27.04.2011
Сообщений: 14
|
|
23.07.2014, 07:20 [ТС] | 16 |
спасибо, сейчас начнуразбираться
0
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||||||
23.07.2014, 12:32 | 17 | |||||
0
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||||||
23.07.2014, 13:28 | 18 | |||||
Путем несложных манипуляций еще возможность ввода констант добавил:
0
|
23.07.2014, 13:28 | |
23.07.2014, 13:28 | |
Помогаю со студенческими работами здесь
18
Битовые операции Битовые операции Битовые операции Битовые операции Битовые операции Битовые операции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |