![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 02.06.2009
Сообщений: 7
|
![]()
Здравствуйте, уважаемые программисты! Я здесь новичок. У меня такая задача:
По заданной логической формуле построить эквивалентную логическую формулу, в которой знак отрицания встречается только перед переменными. Указания. Воспользоваться эквивалентными преобразованиями NOT NOT переменная ? переменная NOT(формула1 OR формула2) ? NOT (формула1 ) AND NOT(формула2) NOT(формула1 AND формула2) ? NOT (формула1 ) OR NOT(формула2) Я с недавного времени учусь программировать, и ранее не приходилось работать с логическими функциями, и пока не могу найти более подробное описание работы с ними. Пока у меня есть только начало программы: Код:
Последний раз редактировалось Stilet; 03.06.2009 в 13:46. |
![]() |
![]() |
![]() |
#2 |
Меркантильный кю
Участник клуба
Регистрация: 02.02.2008
Сообщений: 1,001
|
![]()
Задачка на рекурсию, не сложная, но требует аккуратности
![]() Создаёте функцию, на вход которой подаётся строка, которая бежит по строке до первого NOT. Далее варианты 1. Если после NOT стоит ещё один NOT, то оба просто убираете и бежите дальше 2. Если после NOT стоит переменная, то ничего не делаем 3. Если после NOT стоит открывающая скобка, то вычленяем выражение стоящее в скобках в отдельную строку и рекурсивно применяем к ней функцию. (Тут можно делать немного по другому, например, передавать функции в качестве параметра не саму строку, а индексы её первого и последнего элементов в исходной строке). После того как рекурсивная функция отработала, в вызывающей функции преобразовываем выражение (то что вы написали называется законами Де Моргана). Фактически просто отыскиваем OR (AND), ставим перед ним закрывающую скобку, заменяем его на AND (OR) NOT и ставим открывающую скобку
Росли вроде умными, выросли дурнями... (c)А.Васильев
|
![]() |
![]() |
![]() |
#3 |
Регистрация: 02.06.2009
Сообщений: 7
|
![]()
Greblin, спасибо за подсказку!
Я решила подойти к написанию программы не так, как хотела сначала, а, наверное, своеобразным способом ![]() функция вводится, как строка, и далее идёт проверка допустимых символов. я использую три переменных a,b,с. и остальные символы для обозначения операций. если в введенной функции все символы допустимые, далее проверяю, в правильном ли порядке расположены символы, чтобы функция имела смысл. Код:
второй случай - когда ! стоит перед открывающейся скобкой. но я затрудняюсь, как правильно написать фрагмент, который выделит из функции выражение в скобках, чтобы далее его можно было преобразовать? Последний раз редактировалось Stilet; 03.06.2009 в 13:47. |
![]() |
![]() |
![]() |
#4 |
Меркантильный кю
Участник клуба
Регистрация: 02.02.2008
Сообщений: 1,001
|
![]()
Ну вам ведь надо фактически получить индексы начала и конца данной подстроки
Вобщем это делается так. Пусть i - индекс начала подстроки (т.е. индекс открывающей скобки). Заводим какую-то переменную int s. Дальше бежим по строке, начиная с i, причём если очередной символ - это открывающая скобка (в том числе и символ с индексом i), то увеличиваем s на 1, а если закрывающая, то уменьшаем s на 1. В тот момент, когда s станет равным 0, i будет указывать на конец подстроки (при условии, что баланс скобок в выражении не нарушен).
Росли вроде умными, выросли дурнями... (c)А.Васильев
|
![]() |
![]() |
![]() |
#5 |
Регистрация: 02.06.2009
Сообщений: 7
|
![]()
Спасибо, с индексами, кажется, разобралась.
Но возникла трудность в написании самого преобразования. Сейчас выложу полный текст программы. Не могли бы вы помочь её дописать? И ещё, в первом случае, если есть двойное отрицание, на самом деле, тоже неправильно заменять !! пробелами. Пожалуй, нужно делать как-то сдвиг. А со вторым условием, когда после ! стоит ( будет посложнее... И верно ли записаны все условия проверки правильности написания функции? Последний раз редактировалось Anastasiya209; 03.06.2009 в 20:28. |
![]() |
![]() |
![]() |
#6 |
Регистрация: 02.06.2009
Сообщений: 7
|
![]() Код:
Последний раз редактировалось Anastasiya209; 03.06.2009 в 20:31. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Построение графика функции на QBasic | artemon999 | Помощь студентам | 2 | 30.03.2009 15:16 |
Построение графика функции Java | Folly | Общие вопросы по Java, Java SE, Kotlin | 3 | 19.03.2009 11:16 |
Построение графика функции (Паскаль) | Scream of the soul | Помощь студентам | 4 | 16.03.2009 02:57 |
Построение графика функции | Жека:) | Общие вопросы C/C++ | 5 | 11.11.2008 19:05 |
Графика. Построение функции | AngelOfDeath | Общие вопросы Delphi | 2 | 14.10.2008 13:44 |