Bài toán tính giá trị biểu thức - Pdf 16

Cách khác để tính giá trị của một biểu thức
Quắch Nguyễn
Tính giá trị của một biểu thức là một bài toán không khó. Có nhiều cách để giải quyết bài
toán này chẳn hạn như: đưa biểu thức số học theo ký pháp hậu tố và tiền tố, hoặc đưa về
dạng cây biểu thức…Tuy nhiên ở đây tôi muốn đưa ra một phương pháp giải khác với
những phương pháp trên nhằm mục đích để cho các bạn đọc gần xa tham khảo thêm và
cũng rất mong nhận được ý kiến phản hồi của bạn đọc gần xa.
Phương pháp giải
1. Biểu thức chỉ là một số thực thì giá trị của biểu (gtbt) thức bằng chính số đó
2. Biểu thức chỉ chứa phép toán '*' thì gtbt = gtbt(trước phép nhân đầu tiên ) * gtbt(dãy sau
phép nhân đầu tiên)
3. Biểu thức có chứa 2 phép toán '+, *' thì gtbt = gtbt(dãy trước dấu cộng đầu tiên)+
gtbt(dãy sau dấu cộng đầu tiên)
function gtbt(s:string):real;
begin
if isnumber(s) then gtbt:=strtonumber(s)
else
if all_mull_ope(s) then tinh:=gtbt(head(s,’*’))*gtbt(tail(s,’*’))
else
gtbt:=gtbt(head(s,’+’))+ gtbt(tail(s,’+’));
end;
4. Biểu thức có chứa 3 phép toán '+ , −, *'trong trường họp này ta chèn thêm dấu '+' vào
trước những dấu '−' (ngoại trừ dấu ' −' đứng tại ví trí thứ 1 : s1=’ −’ ) sau đó vẫn tính như
(3)
5. Biểu thức có chứa 4 phép toán ' +, −, *, /' tương tự như (4) và chèn thêm dấu ' *' trước
những dấu ' /' sau đó tính như (3).
Các hàm:
Function Isnumber(s:string):boolean; {hàm này trả về giá trị đúng nếu s là một số }
var r:real; code:word;
begin
val(s,r,code); Isnumber:=(code=0)or (s[1]=’/’);

repeat
inc(i);
case s[i] of ’-’: begin insert(’+’,s,i); inc(i); end;
’/’: begin insert(’*’,s,i); inc(i); end;
end;
until i>= length(s);
Insert_ope:=s;
end;
Function Tinh_gia_tri_bieu_thuc_khong_dau_ngoac(s:string) : real;
var s:string;
begin
Tinh_gia_tri_bieu_thuc_khong_dau_ngoac:= gtbt(insert_ope(s));
end;
6. Biểu thức có chứa 4 phép toán trên và dấu ngoặc:
Trước tiên ta đi tìm dấu ngoặc đóng đầu tiên tính từ trái sang phải trong b iểu thức. Nếu
tồn tại thì ta lui về trái tìm dấu ngoặc mở đầu tiên mà ta gặp (tính từ dấu ngoặc đóng đầu
tiên). Sau đó trích biểu thức con trong khoảng trên ra tính giá trị của biểu thức con đó (5)
và đưa giá trị ấy về dạng chuỗi ghép vào đúng vị trí của nó ban đầu trong biểu thức mẹ.
Lặp lại bước 6. Ngược lại nếu không tồn tại dấu ngoặc đóng thì biểu thức đã cho là biểu
thức không có chứa dấu ngoặc (5)
Function Numbertostr(r:real):string;
var s:string;
begin
str(r:0:5,s);
Numbertotr :=s;
end;
Function Tinh_gia_tri_bieu_thuc_co_ngoac(s:string):real;
begin
i:=pos(’)’,s);
while i>0 do


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status