Vitaly_pas | Дата: Пятница, 20.02.2009, 03:08 | Сообщение # 1 |
Новичок
Группа: Пользователи
Сообщений: 1
Статус: Offline
| Приветствую всех. В институте озадачили курсовиком- основная его задача разработка программы которая строит таблицу истинности логической функции включающую в себя от 2-5 переменных с возможностью использования в ней таких операций как конъюнкция, дизъюнкция, инверсия, сложение по модулю 2, имликация, эквивалентность, следование ну и др. Исходные данные - это формула вводимая в программе. Знаю что каждая функция расскладывается на основные OR, NOT, AND. Но пользователь при вводе формулы не должен размышлять над тем как ее упростить. Поэтому как я понял нужно создать процедуры для этих функций. Но как сделать чтобы пользователь мог без проблем ввести свою функцию например X~((XimpY)|Y ), где например ~ - эквивалентность, imp - импликация, | - штрих Шеффера. Также вопрос стоит в приоритетности вычислений операций. Ребят если поможете буду очень благодарен, или хотябы подскажите в каком направлении двигаться...
Сообщение отредактировал Vitaly_pas - Пятница, 20.02.2009, 03:10 |
|
| |
Seqular | Дата: Пятница, 20.02.2009, 06:54 | Сообщение # 2 |
Хранитель
Группа: Администраторы
Сообщений: 859
Статус: Offline
| Vitaly_pas, Задача интересная. Насчет того, чтобы заготовить функции для всех операций - я согласен. Входные параметры - 2 аргумента. Насчет приоритета. Думаю, что сначала идет NOT, затем AND, после него OR. XOR = OR. Ну а так, либо с таким же, 3-им приоритетом. Либо еще ниже... (ИМХО) Наверное стоит заморачиваться на парсинг скобок. Ведь приоритет можно задать только ими. Для этих целей лучше написать отдельную функцию. Входной параметр - строка. Выходной - строка. Получили выражение. Ищем с начала закрывающую скобку. Если нашли - идем к началу, ищем открывающую. Вычисляем то, что в скобках, возвращаем эту же строку за исключением того, что уже расчитали... (ну примерно таков алгоритм). Таким образом постепенно скобок не останется. Тогда начинаем вычислять слева-направо. Только чтобы не запутаться, я бы рекомендовал немного нормализовать операторы. Либо перевод в знаки, либо в упр.слова. (т.е. либо +, *, -, %, >, <>, сам придумай как с остальными). Либо (OR, XOR, AND, NOT, IMP, EQU) ну в общем чтобы парсинг управляющих конструкций делать... Надеюсь, хоть немного все понятней стало?
Поддерживаю также проект сообщество молодых сисадминов
|
|
| |