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

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

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

> Задача на последовательность скобок
XimeR
сообщение 3.06.2009 13:01
Сообщение #1





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

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


Собственно задача :

Дана последовательность круглых фигурных и квадратных скобок. Определить, нет ли "пересечения" скобок. Например, последовательность (([)])() НЕправильна, а последовательность (([()])()) - правильна.
Нашел исходник:
Код

var s:string;    
    c:byte;    
    b:boolean;    
begin    
     readln(s);    
     b:=true;    
     while b do    
      begin    
       b:=false;    
       c:=pos('[]',s);    
       if c>0 then    
        begin    
         delete(s,c,2);    
         b:=true;    
        end;    
       c:=pos('()',s);    
       if c>0 then    
        begin    
         delete(s,c,2);    
         b:=true;    
        end;    
       c:=pos('{}',s);    
       if c>0 then    
        begin    
         delete(s,c,2);    
         b:=true;    
        end;    
      end;    
    if length(s)>0 then writeln('No')    
    else writeln('Yes');    
end.


Возникла еще одна сложность.
Если есть "пересечение", то при выводе строки на экран надо выделить цветом те скобки, из-за которых произошло "пересечение". Как реализовать?(с моими небольшими знаниями...)
Или тут придется по-другому писать? Может исходник со стеком видел кто...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Archon
сообщение 10.06.2009 10:11
Сообщение #2


Профи
****

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

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


Если смотреть по логике работы стека, то выделять надо так:
( [ ( ] )
( [ ) ]
( ( ( ( ( ( (
) ) ) ( ( (

То есть если скобка не подходит, то выделяем ее цветом и пропускаем. Примерно так:

. . .
for i := 1 to Length(Str) do begin
case Str[i] of
'(', '[': Stack.Push(Str[i]);
')': if Stack.Pop <> '(' then TextColor(Red);
']': if Stack.Pop <> '[' then TextColor(Red);
else begin
WriteLn;
WriteLn('Ошибка: посторонние символы в строке.');
Halt;
end;
end;
Write(Str[i]);
TextColor(LightGray);
end;
. . .


XimeR, попробуй привести задание дословно. Может и поймем что-то.

Сообщение отредактировано: Archon - 10.06.2009 10:13


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
XimeR
сообщение 10.06.2009 18:56
Сообщение #3





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

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


Цитата

XimeR, попробуй привести задание дословно. Может и поймем что-то.

Задание дословно в 1ом посту...Но когда я показывал исходник преподу, она и сказала: "Выдели, где пересечение" blink.gif
Archon твой код под мой исходник?! wacko.gif Куда его вставить? unsure.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 11.06.2009 4:08
Сообщение #4


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

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

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


Цитата(XimeR @ 10.06.2009 19:56) *
Archon твой код под мой исходник?! wacko.gif Куда его вставить?
Господа офицеры, прошу молчать! (С) lol.gif
Его не надо никуда вставлять, он сам по себе. Но для него нужны процедуры, которые реализуют стэк. Посмотри на эту тему в FAQе.


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

Сообщений в этой теме
XimeR   Задача на последовательность скобок   3.06.2009 13:01
Гость   при выводе строки на экран надо выделить цветом т...   3.06.2009 13:21
Гость   А также вот в этом: ( ( ( ( ( ( ( И вот в этом: ...   3.06.2009 13:25
amega   вся задача со скобками сводится к стеку.. написать...   3.06.2009 16:48
XimeR   вся задача со скобками сводится к стеку.. написат...   3.06.2009 20:52
volvo   В таком случае уточни, что ты уже изучил. Это перв...   3.06.2009 20:56
XimeR   В таком случае уточни, что ты уже изучил. Это пер...   7.06.2009 14:17
Lapp   Тогда как решать задачу?Очень просто - нажимай на ...   8.06.2009 5:30
XimeR   Вот и выдели, в тех примерах, которые я привел (г...   8.06.2009 16:22
Lapp   А выходит я не прав?Откуда нам знать, прав ли ты. ...   8.06.2009 23:17
XimeR   Вот этот пример мне так и неясен: ( [ ) ] Кто ко...   9.06.2009 19:37
volvo   Это проблемы твоей реализации... По заданию ты нич...   7.06.2009 15:11
XimeR   Это проблемы твоей реализации... По заданию ты ни...   7.06.2009 16:44
Archon   Если смотреть по логике работы стека, то выделять ...   10.06.2009 10:11
XimeR   Задание дословно в 1ом посту...Но когда я показыв...   10.06.2009 18:56
Lapp   Archon твой код под мой исходник?! :wacko: Куд...   11.06.2009 4:08


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

 



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