![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Новичок |
![]()
Сообщение
#1
|
Гость ![]() |
Есть строка, в которой есть скобки - открывающиеся и закрывающиеся. Если скобок не равное количество, то надо вывести "количество скобок не равно", (это просто), а если равное, то проверить нет ли где-нибудь такой ситуации, что открывающаяся скобка стоит после закрывающейся (это трудно) =)
|
SHnur |
![]()
Сообщение
#2
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 81 Пол: Мужской Реальное имя: Шурик Репутация: ![]() ![]() ![]() |
Это легко можно реализовать при помоши стека (можно даже не динамического стека , реализованого на массиве ).
Алгоритм такой : Код for i := 1 to {длина строки ...} do begin {если нашли открывающуюся скобку то добовлякм в стек} {иначе смотрим на вершину стека , если там откр.скобка , то удаляем её} {иначе , выходим из цикла , (уже есть случай неправильной постоновки скобок)} end; {если пройден весь цикл , то проверяем стек , если он НЕ пустой , то (уже есть случай неправильной постоновки скобок)} Вот возможный вариант решения : Код program skobki; var stek : array[1..255] of char; head : byte; function isempty:boolean; begin isempty := (head = 0) end; procedure POP; begin if not(isempty) then dec(head); end; procedure PUSH(c:char); begin inc(head); stek[head] := c; end; function showHead:char; begin showHead := stek[head]; end; var wrong :boolean; i : byte; input : string; begin head := 0; for i := 1 to 255 do stek[i] := ' '; wrong := false; writeln('input :'); readln(input); for i := 1 to ord(input[0]) do begin if input[i] = '(' then PUSH(input[i]) else if input[i] = ')' then if showHead = '(' then POP else begin wrong := true; break; end; end; if not(wrong) then wrong := not(isempty); writeln(wrong); readln; end. Сообщение отредактировано: SHnur - 17.03.2005 14:59 -------------------- Двадцать пятый час в сутках может появиться всего лишь из-за небольшой ошибки в программе.
Чтобы не воспользоваться сумасшедшими возможностями, нужно быть идиотом. |
volvo |
![]()
Сообщение
#3
|
Гость ![]() |
Новичок
Поиском здесь кто-нибудь будет пользоваться? Есть же решения ... http://forum.pascalnet.ru/index.php?showt...%EA%EE%E1%EA%E8 |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 19:21 |