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

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

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

 
 Ответить  Открыть новую тему 
> Задача на последовательность скобок
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата(XimeR @ 3.06.2009 13:01) *

при выводе строки на экран надо выделить цветом те скобки, из-за которых произошло "пересечение".
Не совсем ясно. Вот в этом примере выдели, пожалуйста, красным, то, что нужно:

( [ ( ] )
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






А также вот в этом:

( ( ( ( ( ( (

И вот в этом:

) ) ) ( ( (
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


?
***

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

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


вся задача со скобками сводится к стеку.. написать поцедуру пуш и поп и потом прото проверять последний елемент.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





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

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


Цитата(amega @ 3.06.2009 17:48) *

вся задача со скобками сводится к стеку.. написать поцедуру пуш и поп и потом прото проверять последний елемент.

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

А в этом коде не корректные скобки никак не подстветить при выводе?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Цитата
но блин в стеках и прочем я не силен, т.к. еще это не изучил...=(
В таком случае уточни, что ты уже изучил. Это первое.

А второе - тебе задали вопрос, что выделять в трех приведенных случаях. Ты его оставил без ответа. Почему?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7





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

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


Цитата(volvo @ 3.06.2009 21:56) *

В таком случае уточни, что ты уже изучил. Это первое.

А второе - тебе задали вопрос, что выделять в трех приведенных случаях. Ты его оставил без ответа. Почему?


Изучил мало...Вообще ничего....Все только ур-нь школы - массивы, процедуры и ф-ии...

Цитата
А второе - тебе задали вопрос, что выделять в трех приведенных случаях. Ты его оставил без ответа. Почему?

Ну я вообще-то не понял, к чему эти скобки...У меня ведь в примере ищет и удаляет пару скобок, которая содержит и открытую, и закрытую...Находит - удаляет....Если в строке ничего, то правильно, если осталось что-то, то то и выделить нужно...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Цитата
У меня ведь в примере ищет и удаляет пару скобок, которая содержит и открытую, и закрытую...Находит - удаляет...
Это проблемы твоей реализации... По заданию ты ничего не должен удалять, там сказано:
Цитата
Определить, нет ли "пересечения" скобок.
, и все, ни о каких удалениях речь не идет...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9





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

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


Цитата(volvo @ 7.06.2009 16:11) *

Это проблемы твоей реализации... По заданию ты ничего не должен удалять, там сказано: , и все, ни о каких удалениях речь не идет...


smile.gif Тогда как решать задачу?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


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

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

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


Цитата(XimeR @ 7.06.2009 17:44) *
Тогда как решать задачу?
Очень просто - нажимай на клавиши в нужной последовательности smile.gif.

Цитата(XimeR @ 7.06.2009 15:17) *
Если в строке ничего, то правильно, если осталось что-то, то то и выделить нужно...
Вот и выдели, в тех примерах, которые я привел (гостем). В форме ответа есть кнопочка для цвета текста, воспользуйся ей, пожалуйста.

Если условие неясно - как решать задачу? blink.gif



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





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

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


Цитата(Lapp @ 8.06.2009 6:30) *

Вот и выдели, в тех примерах, которые я привел (гостем). В форме ответа есть кнопочка для цвета текста, воспользуйся ей, пожалуйста.

blink.gif Тогда не пойму вообще....Если по примеру смотреть, то я думал в последовательности выделяем ( [ ( ] ) (из-за них произошло пересечение)
И ( ( ( ( ( ( (
И ) ) ) ( ( (.... ( неправильные последовательности)
А выходит я не прав? nea.gif

Сообщение отредактировано: XimeR -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


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

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

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


Цитата(XimeR @ 8.06.2009 17:22) *
А выходит я не прав?
Откуда нам знать, прав ли ты. Из тебя не так просто вытягивать информацию. Ты никак не хочешь понять, что задача не до конца поставлена. И кто будет тогда ее решать?
Если стену надо покрасить в красный - нет проблем. Если в полосочку с цветочками - тоже. А если говорят: "покрась, неизвестно как, но не ошибись!" - то извини..
Вот этот пример мне так и неясен:
( [ ) ]
Кто кому мешает? Если отбрезать:
( [ )
- то вроде ясно, что [ лишняя, ее надо выделять. Так? Но тогда совсем неявсно, что выделять в первом примере.


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





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

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


Цитата(Lapp @ 9.06.2009 0:17) *

Вот этот пример мне так и неясен:
( [ ) ]
Кто кому мешает? Если отбрезать:
( [ )
- то вроде ясно, что [ лишняя, ее надо выделять. Так? Но тогда совсем неявсно, что выделять в первом примере.

Тогда я сам в тупике...Я думал, что надо выделить скобки, в которых "произошло пересечение"...
Пример неправильной последовательности :
(([)])() ===> (([)])
Или 2 пары скобок (([)])
Что правильней сам не пойму wacko.gif

___________________________________________
Вот еще наработка...Но в коде я не разбирался и врядли разберусь быстро.
Код

type
  s=str[80];
  yk=^el;
  el=record
   inf:byte;
   adr:yk;
     end;
var  
  str:s;
  p:integer;
  na:yk;
const
  otkr:s=['(','[','{'];
  zakr:s=[')',']','}'];
function poisk(str[k]:char):integer;
procedure vkl(nom:byte);
...
begin
  writeln('vvedite stroku');
  readln(str);
  k:=1;
  while k<=streln(str) do
       begin
         p:=poisk(str[k]);
         if p<>0 then
                     if p>0 then vkl(p)
                     else
                         begin
                           os=izwl;
                           if os=o then writeln (...);
                           if os<>-p then writeln ('ne ta otkr.skobka');
                         end;
       inc(k);
       end;
  if izwl <>0 then writeln ('lishnie skobki');
end.


Может кто-нибудь помочь дописать\исправить, а то я еще не разобрался, а надо, чтобы работала...

Сообщение отредактировано: XimeR -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Профи
****

Группа: Пользователи
Сообщений: 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 -


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





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

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


Цитата

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

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


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

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

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


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


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

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

 





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