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

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Помогите пожалуйста решыть., Помогите пожалуйста решыть.
jurkiw
сообщение 20.11.2008 21:31
Сообщение #1





Группа: Пользователи
Сообщений: 6
Пол: Мужской

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


Помогите пожалуйста решыть.
Программа. Вo входном файле задан текст, за которым следует точка. Проверить, удовлетворяет ли его структура следующему определению:
<текст>::=<элемент> │ <элемент> <текст>
<элемент>::—а | b | (<текст> )| [<текст>] | {<текст>}

Зарание спасибо)))

Сообщение отредактировано: jurkiw - 21.11.2008 1:03
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 21.11.2008 4:51
Сообщение #2


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Собственно, нужно только, грубо говоря, перевести определение на Паскаль. Никаких других умственных затрат, почти слово в слово. Хотя нет, вру.. Пришлось добавить к определению, что пустая строка - это тоже текст. Думаю, без этого не обойтись.

const
Letters: set of char= ['a','b'];

function IsText(s:string):boolean; forward;

function IsElement(s:string):boolean;
begin
IsElement:= (Length(s)=1) and (s[1] in Letters) or (
(s[1]='(') and (s[Length(s)]=')') or
(s[1]='[') and (s[Length(s)]=']') or
(s[1]='{') and (s[Length(s)]='}')
) and IsText(Copy(s,2,Length(s)-2))
end;

function IsText(s:string):boolean;
var
i:integer;
begin
i:= 0;
repeat
Inc(i)
until (i>Length(s)) or IsElement(Copy(s,1,i)) and IsText(Copy(s,i+1,Length(s)));
IsText:= (s='') or (i<=Length(s))
end;



--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



- Текстовая версия 28.04.2024 16:14
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"