Четверг, 09.01.2025
Pascal 4 All
[ · Новые сообщения · Участники · Правила форума · Поиск · RSS ]

 

  • Страница 1 из 1
  • 1
Модератор форума: Seqular, Pavel  

Решение логических функций
Vitaly_pasДата: Пятница, 20.02.2009, 03:08 | Сообщение # 1
Новичок
Группа: Пользователи
Сообщений: 1
Репутация: 0
Замечания: 0%
Статус: 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
Репутация: 35
Статус: Offline
Vitaly_pas, Задача интересная.
Насчет того, чтобы заготовить функции для всех операций - я согласен. Входные параметры - 2 аргумента. Насчет приоритета. Думаю, что сначала идет NOT, затем AND, после него OR. XOR = OR. Ну а так, либо с таким же, 3-им приоритетом. Либо еще ниже... (ИМХО)
Наверное стоит заморачиваться на парсинг скобок. Ведь приоритет можно задать только ими.
Для этих целей лучше написать отдельную функцию. Входной параметр - строка. Выходной - строка.
Получили выражение. Ищем с начала закрывающую скобку. Если нашли - идем к началу, ищем открывающую. Вычисляем то, что в скобках, возвращаем эту же строку за исключением того, что уже расчитали... (ну примерно таков алгоритм). Таким образом постепенно скобок не останется. Тогда начинаем вычислять слева-направо.
Только чтобы не запутаться, я бы рекомендовал немного нормализовать операторы. Либо перевод в знаки, либо в упр.слова. (т.е. либо +, *, -, %, >, <>, сам придумай как с остальными). Либо (OR, XOR, AND, NOT, IMP, EQU) ну в общем чтобы парсинг управляющих конструкций делать...

Надеюсь, хоть немного все понятней стало?


Поддерживаю также проект сообщество молодых сисадминов
 
  • Страница 1 из 1
  • 1
Поиск:

Copyright MyCorp © 2025
Используются технологии uCoz
javascript:;" rel="nofollow" onclick="loginPopupForm(); return false;