|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
08.01.2011, 13:53 | #1 |
Новичок
Джуниор
Регистрация: 08.01.2011
Сообщений: 2
|
Задача на Паскале(возможно с указателями)
Используя очередь и стек из входного файла f проанализировать текст сбалансированный по скобкам:
<текс> ::= <пусто>|<элемент><текст> <элемент>::=<буква>|(<текст>). Напечатать упорядоченные пары номеров открывающих скобок. Объясните, как это вообще делать??
p@)(@
|
31.01.2011, 15:51 | #2 |
Новичок
Джуниор
Регистрация: 08.01.2011
Сообщений: 2
|
Вот программа с тестами...
program dz6; {Ob'yavlenie konstant} Const osh1 = 'Fail pust'; osh2 = 'Lishnie zakrivayushiesya skobki'; osh3 = 'Lishnie otkrivayushiesya skobki'; osh4 = 'Nekorrektniy vvod dannih'; osh5 = 'Skobok net'; osh6 = 'Skobka zakrita prezhdevremenno'; {Ob'yavlenie stacka} Type EXST = ^ST; ST = record Data: integer; Next: EXST; End; {Ob'yavlenie peremennih} Var Stack: EXST; f:text; k,j, i:integer; str : string; h : boolean; {zanesenie elementa v stack} Procedure WriteStack(Var u : EXST; tekst : integer); Var x : EXST; Begin new(x); x^.Data := tekst; x^.Next := u; u := x; End; {udalenie verhnego elementa} Procedure DelStack(Var x1:Exst); Var u : Exst; Begin u := x1; x1 := x1^.Next; dispose(u); End; {Obrabotka oshibok} Function Test ( l, m : integer) : boolean; Begin Test := false; If l < m then Writeln (osh2) Else If l > m then Writeln (osh3) Else If (l = m) and (l<>0) and (m<>0) then Test := true Else Writeln(osh5); End; {Obrabotka oshibok} Procedure Prov (a : string); Var Stack : EXST; Begin Stack := Nil; i := 1; j := 0; k := 0; While (i<=Length(a)) do Begin If (a[i]='(') then Inc(j); If (a[i]=')') then Inc(k); Inc(i); End; End; BEGIN stack := nil; i:=1; h := true; Assign (f, 'text.txt'); Reset(f); If EOF(f) then Write (osh1) Else Begin readln (f,str); While i<= length(str) do Begin If not( (( str[i]='(') or (str[i] =')') or (str[i] = ' ')) or ((str[i]> 'a') and (str[i] < 'z'))) then h:=false; Inc(i); End; If not h then Writeln(osh4) Else Begin Prov(str); If test(j, k) then i:=1; While i<= length(str) do Begin If (str[i] = '(') then writeStack(Stack,i); If (str[i] = ')') then Begin If stack <>Nil then Begin Writeln('Otkrivayushayasya skobka ',Stack^.Data,' Zakrivayushayaya skobka ', i); DelStack(stack); End Else Writeln(osh6); End; Inc(i); End; End; End; Close (f); readln; END.
p@)(@
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Задача с УКАЗАТЕЛЯМИ, ПОМОГИТЕ РЕШИТЬ! | RomT24 | Помощь студентам | 1 | 06.06.2009 15:15 |
Задача паскаля!Возможно надо что то добавить??? | Impario | Помощь студентам | 7 | 29.12.2008 14:50 |
Работа с указателями в паскале | Cartman18 | Помощь студентам | 3 | 12.05.2008 09:43 |
нужен исходник архиватора bzip2 на Паскале. Есть на Си, возможно ли конвертировать? | komex | Общие вопросы Delphi | 2 | 03.01.2008 12:54 |
Возможно ли создание сети в паскале? | proglamer | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 20.10.2007 19:24 |