Mã:
Const cs = ['0'..'9'];
dau = ['+', '-', '*'];
chu = ['(', ')', '+', '-', '*', '0'..'9'];
HT = 'Bieuthuc.inp';
TH = 'Bieuthuc.out';
Var H, T : Text;
st, doan : String;
trai, phai : Byte;
Function KT(x : String) : Boolean;
Var i, d1, d2 : Byte;
Begin
kt := False;
d1 := 0;
d2 := 0;
{Kiem tra cac ki tu la}
For i := 1 To Length(x) Do
If not(x[i] in chu) Then Exit;
{Kiem tra mo dong ngoac}
For i := 1 To Length(x) Do
Case x[i] Of
'(' : Inc(d1);
')' : Inc(d2);
End;
If d1 <> d2 Then Exit;
{Kiem tra dau va cuoi xau}
If (x[1] = ')') Or (x[1] = '*') Or (x[length(x)] in dau) Or (x[length(x)] = '(') Then Exit;
{Kiem tra 2 ki tu lien tiep}
For i := 1 To Length(x) - 1 Do
If ((x[i] = ')') And (x[i+1] = '('))
Or ((x[i] in dau) And (x[i+1] in dau))
Or ((x[i] = '(') And (x[i+1] = ')')) Then Exit;
For i := 1 To Length(x) - 1 Do
If ((x[i] in dau) And (x[i+1] = ')'))
Or ((x[i] = '(') And (x[i+1] = '*')) Then Exit;
For i := 1 To Length(x) - 1 Do
If (x[i] in cs) And (x[i+1] = '(') Then Exit;
kt := True;
End;
Procedure Xoa(Var x : String);
Var i : Byte;
Begin
i := 1;
While i <= Length(x) Do
If x[i] = ' ' Then Delete(x, i, 1)
Else Inc(i);
End;
Function Nhan(x : String) : String;
Var phu : String;
vt, p, t : Byte;
sop, sot : Longint;
code : Integer;
Begin
While Pos('*', x) > 0 Do
Begin
vt := Pos('*', x);
p := vt + 1;
If x[p] = '-' Then Inc(p);
While (p < Length(x)) And (x[p+1] in cs) Do Inc(p);
phu := Copy(x, vt+1, p-vt);
Val(phu, sop, code);
t := vt - 1;
While (t > 0) And (x[t] in cs) Do Dec(t);
If t = 0 Then Inc(t);
phu := Copy(x, t, vt-t);
Val(phu, sot, code);
sop := sop*sot;
Str(sop, phu);
Delete(x, t, p-t+1);
If sop >= 0 Then phu := '+' + phu;
Insert(phu, x, t);
End;
nhan := x;
End;
Function Cong(x : String) : String;
Var phu : String;
kq, so : LongInt;
code : Integer;
t, p : Byte;
Begin
kq := 0;
Repeat
t := Length(x);
p := Length(x);
While (t > 0) And (x[t] in cs) Do Dec(t);
If t = 0 Then Val(x, so, code)
Else
Begin
phu := Copy(x, t, p-t+1);
Val(phu, so, code);
End;
kq := kq + so;
Delete(x, t, p-t+1);
Until t = 0;
Str(kq, phu);
Cong := phu;
End;
Function Ngoac(x : String; Var t, p : Byte) : String;
Var phu : String;
Begin
t := Length(x);
While (t > 0) And (x[t] <> '(') Do Dec(t);
p := t + 1;
While (p <= Length(x)) And (x[p] <> ')') Do Inc(p);
ngoac := Copy(x, t, p-t+1);
End;
Procedure KQ;
Begin
Assign(H, HT); Reset(H);
Assign(T, TH); Rewrite(T);
While not EOF(H) Do
Begin
Readln(H, st);
xoa(st);
Write(T, st, ' = ');
If kt(st) Then
Begin
While Pos('(', st) > 0 Do
Begin
doan := ngoac(st, trai, phai);
Delete(doan, 1, 1);
Delete(doan, Length(doan), 1);
doan := nhan(doan);
doan := cong(doan);
Delete(st, trai, phai-trai+1);
If (st[trai-1] = '+') And (doan[1] = '-') Then
Begin
Delete(st, trai-1, 1);
Insert(doan, st, trai-1);
End
Else
If (st[trai-1] = '-') And (doan[1] = '-') Then
Begin
st[trai-1] := '+';
Delete(doan, 1, 1);
Insert(doan, st, trai);
End
Else Insert(doan, st, trai);
End;
st := nhan(st);
st := cong(st);
Writeln(T, st);
End
Else Writeln(T, 'LOI');
End;
Close(H);
Close(T);
End;
BEGIN
KQ;
END.
Bạn đang tìm kiếm giải pháp vận chuyển và nâng hạ hàng hoá máy móc nặng cho dự án hay công việc của mình tại khu vực Mỹ Phước - Bình Dương? Chúng tôi tự hào giới thiệu dịch vụ cho thuê xe cẩu tại Mỹ...
Dịch vụ cho thuê xe cẩu tại Mỹ Phước từ 3 tấn 120 tấn