, , . :
inf, , next, .
Top , .
type ref=^Elem; { }
Elem = record { }
inf:integer; { }
next:ref { }
end;
var Top:ref;
procedure DoTop; // }
begin
Top:=nil
end;
function IsEmpty:boolean; //,
begin
Result:=(Top=nil)
end;
procedure Push(x:integer); // x
var p:ref;
begin
new(p);
p^.inf:=x;
p^.next:=Top; { }
Top:=p { }
end;
function Pop:integer; //
var p:ref;
begin
Result:=Top^.inf; //
p:=Top;
Top:=Top^.next; //
dispose(p) // ,
end;
function InTop:integer; // }
begin
Result:=Top^.inf; //
end;
procedure Swap; //
var x:integer;
begin
x:=Top^.inf;
Top^.inf:=Top^.next^.inf;
Top^.next^.inf:=x;
end;
, . : , , .
. , . , , .. ( ) .
(, . ) ( ) ). , , , , .
,
( | a | + | b | * | c | ) | / | - | ( | a | + | b | ) | * | ( | d | + | c | / | ( | f | - | g | ) | ) | |
:
1 7
11 15
22 26
17 27
procedure Error;
begin writeln(
);
halt { }
|
|
end;
begin {}
DoEmpty; { }
write( ); readln(S);
for i:=1 to length(S) do
begin
if S[i]=( then Push(i); { (}
if S[i]=)
then if not IsEmpty { )}
then writeln(Pop:4,i:4) { ( )}
else Error
end;
if not IsEmpty then Error { }
end.
AS nAS. Top 0..nAS. , Top=0.
const nAS=100;
var Top: 0..nAS;
AS:array[1..nAS] of integer;
Procedure DoTop;
begin Top:= 0
end;
function Empty:boolean;
begin Result:=(Top=0)
end;
procedure Push (i: integer);
begin
Top:=Top+1;
AS[Top]:=i;
end;
function Pop: integer;
begin
Result:=AS[Top];
Top:=Top-1;
end;
, ( ), (), .
: , , , .
.
: , , , .
:
y , , y.
x , , x.
, .
( ) , .
() , .
:
0.
X i, Y i+1.
() .
:
.
.
, , , .
2, , .
.