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

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

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

> Стек, Помогите исправить программу
Neon6868
сообщение 15.04.2007 13:35
Сообщение #1


Пионер
**

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

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


Задание: С клавиатуры вводится текст, содержащий 4 вида скобок: (, {, [, <
Надо проверить, правильно ли расставлены скобки.Для этого, сначала надо проверить, чтобы после открывающейся скобки обязательно была закрывающаяся и чтобы соблюдались вложения скобок(т.е. например вот так (----{--)--} нельзя!). Если обнаружена скобка, то она записывается в стек.В конце програмы выводится сообщение, правильно или неправильно расставлены скобки.Если скобок в тексте нет, то вывести сообщение скобок нет.

Программа:
 
Program Stek;
const
n=1;
type
tes=1..n;
stackl=^node;
node=record
data:tes;
next:stackl
end;
var
str:string;
Function EmptyStack(var ST:stackl):boolean;
Begin
Emptystack:=st^.data=0
End;
Procedure PushSC(var STCL:stackl;x:TES);
var
P:stackl;
Begin
new(p);
p^.data:=x;
if emptyStack(STCL) then STCL:=p
else p^.next:=stcl^.next;
stcl^.next:=p;
End;
Begin
writeln('Vvedite stroku:');
readln(str);
if str='(' or '{' or '[' or '<' then pushSC();
End.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
klem4
сообщение 21.04.2007 18:05
Сообщение #2


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

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

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


Ну во первых ты память забываешь освободить, стек ведь в конце программы не всегда пустой, а вот мой вариант:

{$B-}
const
close = ')]}>';
open = '([{<';
type
PTStack = ^TStack;
TStack = Record
_break: Char;
next: PTStack;
end;

procedure Push(var T: PTStack; const _break: Char);
var
temp: PTStack;
begin
New(temp);
temp^._break := _break; temp^.next := nil;

if T = nil then T := temp else begin
temp^.next := T; T := temp;
end;
end;

function Pop(var T: PTStack): Char;
var
temp: PTStack;
begin
Pop := T^._break; temp := T;
T := T^.next; Dispose(temp);
end;

procedure Destroy(var T: PTStack);
var
temp: PTStack;
begin
while (T <> nil) do begin
temp := T;
T := T^.next;
Dispose(T);
end;
end;

var
T: PTStack;
S: String;
i: Integer;
stop: Boolean;
begin
write('s = '); readln(s);

T := nil; i := 1; stop := false;

repeat
if Pos(s[i], open) <> 0 then Push(T, close[pos(s[i], open)]);
stop := (Pos(s[i], close) <> 0) and ((T = nil) or (s[i] <> Pop(T)));
inc(i);
until (i > Length(s)) or (stop);

if not(stop) and (T = nil) then writeln('good') else writeln('bad');

Destroy(T);
end.




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

Сообщений в этой теме
Neon6868   Стек   15.04.2007 13:35
Артемий   А можно поинтересоваться, что именно вызывает затр...   15.04.2007 13:49
мисс_граффити   я бы делала так: нашли открывающуюся скобку - засу...   15.04.2007 13:55
Neon6868   А нельзя сделать так, чтобы из стека ничего не уда...   15.04.2007 14:30
Артемий   Допустим заносим открывшуюся скобку в стэк - если...   15.04.2007 14:44
мисс_граффити   Артемий, реализуем твой алгоритм. строка: (----{--...   15.04.2007 15:19
Neon6868   А как тогда искать скобки в тексте?   15.04.2007 18:35
мисс_граффити   const skobki=['(','{','[']...   15.04.2007 18:59
volvo   А в поиске был? Когда-то по этой теме на форуме да...   15.04.2007 19:27
Neon6868   А в поиске был? Когда-то по этой теме на форуме д...   15.04.2007 23:30
Neon6868   Помогите кто-нибудь исправить и переделать програм...   20.04.2007 16:42
Neon6868   Я вот сделал, посмотрите пожалуйста нельзя ли прощ...   20.04.2007 22:53
мисс_граффити   1. case s[i] of '(':begin ...   21.04.2007 1:01
Neon6868   Вот переделал. Теперь нормально?? Program Skobki...   21.04.2007 13:34
мисс_граффити   моя ошибка... if ((s[i] in [']','}...   21.04.2007 16:29
Neon6868   моя ошибка... if ((s[i] in [']','}...   21.04.2007 16:34
klem4   Ну во первых ты память забываешь освободить, стек ...   21.04.2007 18:05


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

 



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