IPB
ЛогинПароль:

> 

Начальные контакты ТОЛЬКО через личку!!

 
 Ответить  Открыть новую тему 
> Задача...
сообщение
Сообщение #1


Гость






Доброго времени суток!
Вот такая вот есть задача, надо её решить...

Во входном файле задан текст, за которым следует точка. Проверить, является ли этот текст правильной записью «формулы», где «формулы»:
<формула>:: = <цифра> | <формула> <знак><формула>)
<знак>:: =+| - |*
<цифра>:: = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Решить задачу, используя рекурсию.
Входные данные находятся в файле input.txt. Файл студент формирует самостоятельно. Выходные данные на консоль и в файл output.txt.

Если там надо за как тут написано "денюжку" - не вопрос, просто хочется посмотреть как она решается, не 1 час над ней просидел...
Если что my ICQ := 262363792
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Цитата
Если там надо за как тут написано "денюжку"


В конкретно этом разделе да. А вообще задача и похожие решались, поиск в помощь ...


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Попробую навскидку объяснить, как это делается. Если ошибки будут, не пинайте, давно ничего подобного не писал, уж забыл много чего.

<формула>:: = <цифра> | <формула> <знак><формула>)
<знак>:: =+| - |*
<цифра>:: = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Это приводится к грамматике:

F = D
F = F S F
S = +
S = -
S = *
D = 0
...
D = 9

Теперь программируем грамматику, используя функции (по одной на один нетерминальный символ):
(юзаем заранее определённые процедуры "взять токен" и "определить принадлежность нетерминальному символу", т.е. T(oken) = D, S, F и т.д.).
T - текущий токен. Конструкция T = ... означает совпадение первого токена с первым токеном соответствующего нетерминального символа.
"Ошибка" подразумевает выход из алгоритма с возвращение отрицательного результата ("не соответствует грамматике").

вот псевдокод.

F():
{
взять токен, если T=D, то D(),
иначе
если T=F, то F(),
иначе Ошибка;

взять токен, если T=S, то S(),
иначе Ошибка;
взять токен, если T=F, то F(),
иначе Ошибка;
взять токен, если T не является пустой строкой, то Ошибка, иначе - корректно.
}

D():
{
взять токен, если T<> '1' и T<>'2' ... и T<>'9', то Ошибка;
}
S():
{
взять токен, если T<>'-' и T<>'+' и T<>'*', то Ошибка.
}

Теперь просто где-нибудь в коде вызываем F() - и синтаксический анализ пошёл. Если вызов F() самого верхнего уровня вернёт true, то формула удовлетворяет грамматике.
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 30.09.2020 13:02
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name