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

idom
idom(1970 tài liệu)
(33 người theo dõi)
Lượt xem 149
0
Tải xuống
(Lịch sử tải xuống)
Số trang: 3 | Loại file: DOC
0

Thông tin tài liệu

Ngày đăng: 07/09/2012, 10:55

Mô tả: Bài toán tính giá trị biểu thức Cách khác để tính giá trị của một biểu thứcQuắch NguyễnTí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]=’/’); end; Function Strtonumber(s:string):real; {hàm này trả về một số tương ứng với s hoặc 1/s nếu s[1] =’/’ } var r:real; code:word; begin val(s,r,code); if code 0 then begin val(copy(s,2,length(s)-1),r,code); r:=1/r; end; Strtonumber:=r; end; Function All_mull_ope(s:string):boolean; { hàm trả về giá trị true khi trong s có ' * ' và không có '+' } begin All_mull_ope:= (pos(’*’,s)>0) and (pos(’+’,s)=0); end; Function Head(s:string;c:char):string; { hàm trả về chuỗi đứng trước dấu c đầu tiên } begin Head:=copy(s,1,pos(c,s)-1); end; Function Tail(s:string;c:char):string; { hàm trả về chuỗi đứng sau dấu c đầu tiên } begin Tail:=copy(s,pos(c,s)+1,length(s)-pos(c,s)); end; Function Insert_ope(s:string):string; { hàm xử lí chuỗi trước khi tính } var i:byte; begin while pos(’--’,s)>0 do begin i:= pos(’--’,s); delete(s,i,1); s[i]:=’+’; {đổi 2 dấu ’-’ thành dấu’+’} while pos(’ ’,s)>0 do delete(s,pos(’ ’,s),1); i:=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 begin repeat dec(i); until s[i]=’(’; s1:=copy(s,i+1,pos( ’)’,s)-i-1); delete(s,i,pos( ’)’,s) -i+1; insert(numbertostr(Tinh_gia_tri_bieu_thuc_khong_dau_ngoac(s1)),s,i); i:=pos( ’-’,s); end; Tinh_gia_tri_bieu_thuc_khong_co_ngoac:=Tinh_gia_tri_bieu_thuc_khong_dau_ngoac(s); end; 7.Xử lí lỗi của biểu thức: ta chỉ cần sửa lại chút ít các đoạn mã lệnh trên thì ta sẽ phát hiện được tất các các lỗi mà biểu thức đó có chẵn hạn như: sai cú pháp, xuất hiện kí tự lạ, chia cho 0…8. Mở rộng phép toán: với phương pháp nêu trên các bạn dễ dàng bổ sung thêm một số phép toán vào biểu thức như: ^, log, Ln, sin, cos,… 9. Tính biểu thức dài: ta có thể dùng mảng để lưu trữ biểu thức thay vì chuỗi. Trong quá trình viết bài có thể có xuất hiện một số sai sót. Mong bạn đọc thông cảm và tự khắc phục (nếu được) hoặc liên hệ với tác giả của bài viết để bổ sung. . Cách khác để tính giá trị của một biểu thứcQuắch NguyễnTí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. 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ề

— Xem thêm —

Từ khóa: giá trịbiểu thức rút gọn biểu thức biểu thức trong C

Xem thêm: Bài toán tính giá trị biểu thức, Bài toán tính giá trị biểu thức, Bài toán tính giá trị biểu thức

Gửi bình luận

Bình luận
Lên đầu trang
  • An Nhiên
    An Nhiên · Vào lúc 02:22 pm 22/11/2013
    Cảm ơn bạn đã chia sẻ những cuốn sách hay
  • Di Tử
    Di Tử · Vào lúc 03:17 pm 12/12/2013
    Có được như thế này thì còn gì bằng :D
  • fresh boy 27
    fresh boy 27 · Vào lúc 04:37 pm 22/12/2013
    Cám ơn idom nhé! mình đang cần
  • fresh boy 31
    fresh boy 31 · Vào lúc 10:05 am 27/12/2013
    Hay quá, cảm ơn idom. Rất bổ ích
  • fresh boy 36
    fresh boy 36 · Vào lúc 01:14 pm 28/12/2013
    Tài liệu của bạn rất cần thiết với mình. Cảm ơn bạn đã đăng bài!
Đăng ký

Generate time = 0.0886461734772 s. Memory usage = 13.81 MB