|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
10.06.2015, 00:50 | #1 |
t45t
Участник клуба
Регистрация: 20.03.2012
Сообщений: 1,849
|
Совет по созданию программы: "Синтезатор логических схем"
РЕбят, привет всем, начинаю писать программу и уже столкнулся с трудностями. Смысл ее в том, чтоб по введенному выражению строить логические схемы (отрисовка на canvas) и вывод таблицы истинности, а так же минимизация (думаю запрогать карты Карно)
Ввод логического высказывания, например (с потолка) например X1v(X2^x3)->x4 вопрос 1, как определить операнды и скобки, узнать какие операции были использованы и построить таблицу истинности? У кого-нибудь есть рекурсивный парсер?
from dark to light)
|
10.06.2015, 01:29 | #2 |
Eclipse Foundation
Старожил
Регистрация: 19.09.2007
Сообщений: 2,604
|
Я бы вам рекомендовал копать в сторону лексического и синтаксического разбора, либо же взять уже готовый парсер (вполне возможно, именно под ваши нужды парсеров нет).
Операнды и скобки определяются на этапе лексического анализа. Далее, на этапе синтаксического анализа, определяются выражения и подвыражения, по таблице разбора. После этого идет этап кодогенерации, в вашем случае - построение логических схем и таблицы истинности. В университете я использовал LL(1) грамматику для построения компилятора для собственного языка программирования. Но есть и другие виды грамматик. В общем, если нужно быстро - ищите готовые парсеры и подгоняйте свою программу под них. Если же хотите разобраться - вперед, в мир грамматик и разборов! |
10.06.2015, 10:00 | #3 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
Если взять за основу тот факт, что функция рекурсии 1 ждет математ. результат своей копии обрабатывающей скобки, то примерно итог будет таким:
Код:
Вычисления не должны происходить пока не будут отработаны все скобки, т.к. на момент обработки, о том что за скобками - математ. процессор ещё не знает. |
09.07.2015, 03:55 | #4 |
t45t
Участник клуба
Регистрация: 20.03.2012
Сообщений: 1,849
|
Т.е мне нужно сначала массив строк из выражения которое в скобках, далее смотреть в этом массиве уже отдельные операции, записать во второй массив и переменные из строки в другой. Но как программа должна узнавать то, какой из переменных соответствует операция.
Вообще все так запутано. Пните в нужную сторону, как перейти к построению таблиц истинности. Эффективно ли использовать цикл от конца строки пока не открывающаяся скобка "(". Если скобок нет, то еще один цикл на проверку операций и переменных.... В общем запутался, ... уже утро, а у меня идей много, но в их эффективности сомневаюсь. Как всегда: что-то пишешь, а ошибка проявляетвя позже. Притом как всегда-ищу не в том месте и только потом до меня доходит то, что нужно смотреть ошибку в другой процедуре. Сорь, оффтоп. Всем Спасибо! З.ы.: язык delphi7 lite. Мертвым, но рабочим грузом лежит Xe5...
from dark to light)
Последний раз редактировалось Алексей_2012; 09.07.2015 в 03:59. |
09.07.2015, 07:34 | #5 | ||
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Цитата:
Я бы брал рекурсию (потому что мне так понятней, цикл использовать тоже можно). Ну вот первоначальный пример: X1v(X2^x3) рассматриваем модель бинарной операции a op b Шаг 1. a=X1 op=v b=(X2^x3) Шаг 2. Пытаемся получить конкретные значения операндов a и b a=значение из X1 b = операция (и здесь попадаем в рекурсию) Шаг 3. a=X2 op=^ b=x3 Шаг 4. Пытаемся получить конкретные значения операндов a и b Шаг 5. Выполняем операцию ^ Шаг 6. Выполняем операцию v При этом следует помнить, что в качестве op должны выступать только операции с низшим приоритетом. Унарные операции рассматриваются двумя способами - либо обрабатываются как особый случай либо преобразуются как бинарные (типа -a --> 0-a) Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
||
09.07.2015, 09:57 | #6 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
один из вариантов вычисления таблицы истинности
программа — запись алгоритма на языке понятном транслятору
|
09.07.2015, 10:30 | #7 | |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Цитата:
Не пугай человека.В формальной логике (для которой он пытается писать прогу) таких случаев, ничтожное количество, которые легко корректируются вручную.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder Последний раз редактировалось Smitt&Wesson; 09.07.2015 в 10:34. |
|
09.07.2015, 18:07 | #8 |
t45t
Участник клуба
Регистрация: 20.03.2012
Сообщений: 1,849
|
Спасибо за ответы, тут в голову пришла еще одна идея..нашел парсер от обычного строкового калькулятора,
идея такая: заменить знаки +,-,*,/ на И, ИЛИ, НЕ.... или не вариант? Вот код на С++, попытаюсь переписать на Делфи Код:
from dark to light)
Последний раз редактировалось Алексей_2012; 09.07.2015 в 18:13. |
09.07.2015, 18:56 | #9 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Вариант. Подводный камень - приоритеты операций.
Вообще я впервые нашел грамотное и простое описание вопроса в книге Теория и практика С++ Г. Шилдта. Рекомендую к прочтению. Кстати, подробностей не помню, но код похож .
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика Последний раз редактировалось Utkin; 09.07.2015 в 19:00. |
09.07.2015, 19:29 | #10 |
t45t
Участник клуба
Регистрация: 20.03.2012
Сообщений: 1,849
|
Извиняюсь, а как правильно описать функцию, состоящую из указателей?
Пробовал так: Код:
на с++ так выглядит Код:
from dark to light)
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Постоянно слетает галочка "автоматически" в "Параметры Excel", "Формулы", "Вычисления в книге" | Alexsandrr | Microsoft Office Excel | 4 | 19.10.2013 14:22 |
Проблема с примером из темы "Уроки по созданию игр для новичков..." | AvaMight | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 1 | 11.02.2012 10:55 |
Как запретить ввод всего алфавита и логических знаков "=+-*/" | prikolist | Общие вопросы C/C++ | 13 | 02.06.2010 20:47 |
Разработка "рабочего поля" программы сим. эл.схем (Delphi) | WaruiOrochi | Помощь студентам | 4 | 28.11.2009 21:25 |
Помогите в написании редактора блок-схем на Delphi (Очень важно "Диплом") | IIpopoK | Помощь студентам | 3 | 13.02.2009 16:27 |