Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вычисление значения логического выражения. 
:(
    Опции темы
Rencom
Дата 3.1.2006, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 27.9.2005

Репутация: нет
Всего: нет



Поставлена задача: Используя стек решить следующую задачу (в виде процедуры или функции):в текстовом файле LOG записано без ошибок логическое выражение ЛВ в следующей форме:
<ЛВ>::=true|false|(не ЛВ)|(ЛВ конъюнкция ЛВ)|(ЛВ дизъюнкция ЛВ)
Вычислить значение выражения как Boolean.


Можете привести пример текстового файла, которые может быть дан? И как работать с ним. Файл должен быть сгенирирован заранее компилятором паскаля? Или можно, например, в OC windows создать текстовый файл, заполнить его правильно и начать с ним работать?..
PM MAIL   Вверх
Zero
Дата 3.1.2006, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(Rencom @ 3.1.2006, 14:56)
И как работать с ним. Файл должен быть сгенирирован заранее компилятором паскаля? Или можно, например, в OC windows создать текстовый файл, заполнить его правильно и начать с ним работать?

Судя по тому, что в задании, сказано что, в текстовом файле должно быть ЛВ, но не сказано, что он обязательно должен создан программным путём, то мне кажется, его можно создать за ранее средствами ОС виндоус.
Цитата(Rencom @ 3.1.2006, 14:56)
Можете привести пример текстового файла, которые может быть дан?

Но в общем случае, косая черта "|" означает "или", и т.к. между ними находится 5 видов выражений, то соотеветственно может быть 5 видов текстовых файлов:

  • 1
  • 0
  • ^1 (^0)
  • 1+0 (0+1)
  • 1*0 (0*1)

Цитата(Rencom @ 3.1.2006, 14:56)
И как работать с ним.

Ну как мне кажется, тут надо содержимое файлов, каждое отдельное словосочетание выделить (т.е. на языке компилятора - это называется "лексемой") и далее рассматривать каждую отделную лексему, используя таблицу истиности.
Примеров таких таблиц в интер-те целаю куча:
http://www.bestreferat.ru/referat-13372.html
http://referat-programming.info/load.php?P...1d814&id=010033
Добавлено @ 15:06
при этом не обязательно исп. "0" или "1", ЛВ, может быть получено путём вычислений. и переборов выражений может быть куча.
PM MAIL ICQ   Вверх
Rencom
Дата 3.1.2006, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 27.9.2005

Репутация: нет
Всего: нет



Таблицу истинности, к счастью, знаю smile

Ведь может же быть так:
^true(^false)

Как программе понять, что есть true, а что false? Нужно Считывать по символьно строку и сравнивать при помощи case?

Вот что я имел в виду:
(* InLine: string; *)
case InLine of
'true': symbol:=1;
'false':symbol:=0
end;
PM MAIL   Вверх
volvo877
Дата 3.1.2006, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Rencom,

String и Case несовместимы... Придется или делать If, или вот так:

Код
Function UpStr(s: String): String;
Var i: Byte;
Begin
  For i := 1 To Length(s) Do s[i] := UpCase(s[i]);
  UpStr := s;
End;

Var _InLine: String;
...
symbol := Byte(UpStr(_InLine) = 'TRUE'); { Все, что НЕ 'true' считать за 'false' }

PM MAIL   Вверх
Zero
Дата 3.1.2006, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(Rencom @ 3.1.2006, 20:38)
Ведь может же быть так:
^true(^false)

А на языке формальных грамматик, это будет так:
^true*(^false),
где оператор "*" (или любой другой) будет разделять лексемы.
И тогда это будет легко подсчитать...
Главное правильно написать выражение в текстовом файле, с точки зрения синтаксиса.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0742 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.