1

Тема: У вхідному потоку записаний логічний вираз наступного виду:

Маю досить дивне завдання, не можу зрозуміти з чого почати.
Як можна описати такий вираз ?

У вхідному потоку записаний логічний вираз наступного виду:
<логічний вираз>::=true|false|<операція>(<операнди>)
<операція>::=not|and|or
<операнди>::=<операнд>|<операнд>,<операнди>
<операнд>::=<логічний вираз>
Скласти програму, за допомогою якої обчислюється значення виразу. (Наприклад and(or(false,not(false)),true,not(true))->false.) Використати рекурсію.

2

Re: У вхідному потоку записаний логічний вираз наступного виду:

Реалізація алгоритму рекурсивного спуску з прикладами на C++ вам у руки. Якщо захочете заглибитися у цю тему, то читайте Книгу Рожевого(чи Червоного) Дракона

Говорила баба діду: «Я поїду к Білодіду, Ізучу двомовну мову І вернусь обратно знову». А дід бабі: «Не *изди, К Білодіду нєт їзди, — Туди не ходять поїзди»

3

Re: У вхідному потоку записаний логічний вираз наступного виду:

Тут треба написати простенький парсер. Можете пошукати книжку "О чем не пишут в книгах по Delphi", там був розділ про парсери.

4

Re: У вхідному потоку записаний логічний вираз наступного виду:

Дякую, тепер хоч знаю з чого починати)

5

Re: У вхідному потоку записаний логічний вираз наступного виду:

Умовно так:

function Parse( formula : string ) : boolean;
begin
  if formula = 'true'/'false' then 
    result := ..{очевидний варіант}
  else if formula = 'оператор ( операнди )' then
    result := Parse(операнд1) оператор Parse(операнд2);{рекурсія}
end;

Звісно, гілок і операцій має бути більше, але сенс саме такий: якщо можемо визначити значення - повертаємо його, якщо прямо не можемо - обчислюємо кількома рекурсивними викликами операнди і повертаємо результат операції.