![]() |
Модераторы: volvo877, Snowy, MetalFan |
![]() ![]() ![]() |
|
Rencom |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 27.9.2005 Репутация: нет Всего: нет |
Поставлена задача: Используя стек решить следующую задачу (в виде процедуры или функции):в текстовом файле LOG записано без ошибок логическое выражение ЛВ в следующей форме:
<ЛВ>::=true|false|(не ЛВ)|(ЛВ конъюнкция ЛВ)|(ЛВ дизъюнкция ЛВ) Вычислить значение выражения как Boolean. Можете привести пример текстового файла, которые может быть дан? И как работать с ним. Файл должен быть сгенирирован заранее компилятором паскаля? Или можно, например, в OC windows создать текстовый файл, заполнить его правильно и начать с ним работать?.. |
|||
|
||||
Zero |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: нет Всего: 24 |
Судя по тому, что в задании, сказано что, в текстовом файле должно быть ЛВ, но не сказано, что он обязательно должен создан программным путём, то мне кажется, его можно создать за ранее средствами ОС виндоус.
Но в общем случае, косая черта "|" означает "или", и т.к. между ними находится 5 видов выражений, то соотеветственно может быть 5 видов текстовых файлов:
Ну как мне кажется, тут надо содержимое файлов, каждое отдельное словосочетание выделить (т.е. на языке компилятора - это называется "лексемой") и далее рассматривать каждую отделную лексему, используя таблицу истиности. Примеров таких таблиц в интер-те целаю куча: http://www.bestreferat.ru/referat-13372.html http://referat-programming.info/load.php?P...1d814&id=010033 Добавлено @ 15:06 при этом не обязательно исп. "0" или "1", ЛВ, может быть получено путём вычислений. и переборов выражений может быть куча. |
||||||
|
|||||||
Rencom |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 27.9.2005 Репутация: нет Всего: нет |
Таблицу истинности, к счастью, знаю
![]() Ведь может же быть так: ^true(^false) Как программе понять, что есть true, а что false? Нужно Считывать по символьно строку и сравнивать при помощи case? Вот что я имел в виду: (* InLine: string; *) case InLine of 'true': symbol:=1; 'false':symbol:=0 end; |
|||
|
||||
volvo877 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2073 Регистрация: 15.11.2004 Репутация: 2 Всего: 116 |
Rencom,
String и Case несовместимы... Придется или делать If, или вот так:
|
|||
|
||||
Zero |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: нет Всего: 24 |
А на языке формальных грамматик, это будет так: ^true*(^false), где оператор "*" (или любой другой) будет разделять лексемы. И тогда это будет легко подсчитать... Главное правильно написать выражение в текстовом файле, с точки зрения синтаксиса. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi" | |
|
Запрещается! 1. Обсуждать и делится взломанными компонентами или программным обеспечением 2. Публиковать ссылки на варез 3. Оффтопить
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |