Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2014, 21:21   #1
Harveeey
 
Регистрация: 03.11.2014
Сообщений: 4
По умолчанию Найти таблицы истинности логической функции.

Всем привет !
Пожалуйста, помоги решить задачку:

Реализовать рекурсивный алгоритм нахождения таблицы истинности логической функции с операторами конъюнкции, дизъюнкции, отрицания и логическими переменными от A до Z.
Примечание: обработка скобок должна быть.

Заранее огромное человеческое спасибо !

язык TurboPascal.
Harveeey вне форума Ответить с цитированием
Старый 04.11.2014, 02:09   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Заранее огромное человеческое спасибо !
За спасибо такое тут никто не станет делать. Судя по заданию - вещь серьёзная.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 04.11.2014, 03:13   #3
Harveeey
 
Регистрация: 03.11.2014
Сообщений: 4
По умолчанию

это всего лишь номер из лабораторной
1 курс
Harveeey вне форума Ответить с цитированием
Старый 04.11.2014, 07:08   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Нонче в лабы синтаксический анализатор дают?
Неслабо как по мне. Реализовать можно если знать и времени свободного иметь, но для лаб перебор.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.11.2014, 16:44   #5
Harveeey
 
Регистрация: 03.11.2014
Сообщений: 4
По умолчанию

такие нынче лабы пошли )
Harveeey вне форума Ответить с цитированием
Старый 04.11.2014, 16:49   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Сообщение от Harveeey Посмотреть сообщение
такие нынче лабы пошли )
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 04.11.2014, 17:17   #7
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

А за дело-то встало?
Бабахаете нисходящий рекурсивный анализ.. а там учитываете диапазон..
Poma][a вне форума Ответить с цитированием
Старый 04.11.2014, 17:46   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
А за дело-то встало?
Бабахаете нисходящий рекурсивный анализ.. а там учитываете диапазон..
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 05.11.2014, 10:20   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

1. ограниченный НАБОР переменных.
Цитата:
и логическими переменными от A до Z.
Код:
func:='A or B and not C';

result:=TRUFALSE(func);

function TRUFALSE(const f: string): string; // результат строка таблицы истинности
const 
   alf='A..Z';
begin
  // ищем первый используемый алфавитный символ (первый по алфавитному номеру!!)
  firstsymbol:=' ';
  for j:=1 to length(alf) do 
     if pos(alf[j], f)>0 then begin firstsymbol:=alf[j]; break; end;
 

 if firstsymbol=' ' then result:=CALC(f) // если алфавитных символов нет ВЫЧИСЛЯЕМ!!
 else begin //заменяем указанный символ на 0(false) и 1(true) получаем ДВЕ функции меньшего уровня и применяем рекурсию!! 
   s0:=StringReplace(firstsymbol, '0', f); 
   s1:=StringReplace(firstsymbol, '1', f); 
   result:=TRUEFALSE(s0) +TRUEFALSE(s1); //соединяем таблицы истинности меньших уровней и получаем ответ
end;
end;
2. ограниченный набор операторов.

Код:
function CALC(const f: string): char;
begin // вычисляем ОДНО(!) ЛОГИЧЕСКОЕ выражение содержащее скобки операторы значения 0(false) 1(true)
/// !!! БЕЗ ПЕРЕМЕННЫХ!! их мы "убрали" в рекурсии TRUEFALSE
далее подсказки для использования рекурсии
// CALC(' 1 and 0 or (not 1)');
//   CAlC('1') and CALC('0 or (not 1)'); 
//   CALC('0') or CALC('not 1');
//   not CALC('1');    
end;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 05.11.2014 в 10:38.
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать программу для построения таблицы истиности логической функции. Elimay25 Паскаль, Turbo Pascal, PascalABC.NET 1 02.03.2012 08:34
Таблицы истинности Pascal diablo2012 Помощь студентам 1 11.01.2012 07:57
Таблицы истинности diablo2012 Помощь студентам 0 10.01.2012 01:26
Таблицы истинности, схемы Nekto_33 Помощь студентам 0 15.12.2011 23:27
Таблицы истинности PAVEL315 Помощь студентам 1 28.02.2010 19:24