Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.01.2011, 13:53   #1
pahann
Новичок
Джуниор
 
Регистрация: 08.01.2011
Сообщений: 2
Лампочка Задача на Паскале(возможно с указателями)

Используя очередь и стек из входного файла f проанализировать текст сбалансированный по скобкам:
<текс> ::= <пусто>|<элемент><текст>
<элемент>::=<буква>|(<текст>).
Напечатать упорядоченные пары номеров открывающих скобок.
Объясните, как это вообще делать??
p@)(@
pahann вне форума Ответить с цитированием
Старый 31.01.2011, 15:51   #2
pahann
Новичок
Джуниор
 
Регистрация: 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@)(@
pahann вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача с УКАЗАТЕЛЯМИ, ПОМОГИТЕ РЕШИТЬ! 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