Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: Cho mình 1 cách xử lý hay

  1. #1
    No Avatar
    doduyhai106 Khách

    Mặc định Cho mình 1 cách xử lý hay

    Bài tập ở trường của mình như thế này:
    "Cho biểu thức logic gồm các phép toán AND, OR, NOT. các hạng tử là các phép toán so sánh đơn giản dưới dạng (a @ b) trong đó a, b, là các số tự nhiên (có thể nhiều chữ số) và @ = { <, <=, ==, !=, > , >=}. Biểu thức cho phép thiếu dấu ngoặc với thứ tự ưu tiên thứ tự ưu tiên : !, &&, || . Hãy trình bày thuật toán và cài đặt chương trình tính gia trị của biểu thức trên".

    vd: input:(1>=2)&&(1<=2)
    output:false
    Đây là 1 bài toán BaLan nên ý tưởng của mình sau:

    -b1:Đầu tiên mình sẽ kiểm tra input của nó(mình dùng 1 string để làm input đầu vào. Vd)
    -b2:Chuyển từ biểu thức từ infix->postfix.
    -b3:Tính biểu thức postfix.

    Các bước 2 và 3 thì là OK, nhưng còn bước 1 thì mình chưa tìm ra được cách nào cho hay. Mình định dùng cách cắt chuỗi, nhưng mà cách này ko đc hay cho lắm. Vậy bạn nào có ý tưởng nào hay cho bước 1 của mình ko?

  2. #2
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Các hạng tử là các biểu thức so sánh do đó giá trị trả về của các hạng tử này sẽ là true(1) hoặc false(0). Cuối cùng bài toán là tính giá trị biểu thức của 2 con số: 0 và 1 với các phép AND, OR, NOT theo thứ tự ưu tiên: NOT, AND, OR. Không biết Dr có hiểu sai đề không nữa?

    Bước 1 của cậu Dr nghĩ: Trong quá trình nhập liệu (Kiểu gì cũng có bước này) thì ta xử lý nó ngay khi đó sao còn phải thêm cái thằng chuỗi vào làm gì rồi lại tách ra.

    Regard!
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  3. #3
    Ngày gia nhập
    10 2007
    Nơi ở
    HCMUNS
    Bài viết
    459

    Bước 1 của cậu Dr nghĩ: Trong quá trình nhập liệu (Kiểu gì cũng có bước này) thì ta xử lý nó ngay khi đó sao còn phải thêm cái thằng chuỗi vào làm gì rồi lại tách ra.
    Y, đâu đc Dr. Bản chất khi user nhập vô thì nó chỉ là chuỗi mà thôi. Lúc đó làm gì mình đã biết cái người ta nhập là cái gì.

    Ý của bạn đây là muốn kiểm tra lỗi. Cái này thì tùy thôi. Kiểm tra được bao nhiêu thì kiểm. Cái này thì phải duyệt qua từng phần tử, check từng phần tử một.

    Một số lỗi cơ bản phải bắt như:
    + Kí tự nhập không phải là number
    + Token ko được hỗ trợ (như là %, / ...)
    + Dấu đóng ngoặc và mở ngoặc
    + Và một số lỗi nào đó bạn cảm thấy có thể bắt được thì cứ bắt hết ...
    Keep moving forward!

    ... Retired ...

  4. #4
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Mình lại nghĩ khác.
    Đầu tiên foreach chuỗi string nhập vào.
    Nếu có dấu ngoặc: Đưa tất cả phần tử tiếp theo vào stack cho đến khi gặp )
    Nếu không : đưa tất cả vào stack cho đến khi gặp các phép toán logic.
    Như vậy ta đã có được hạng tử đầu tiên . So sánh nó theo các phép toán căn bản ( gọi hàm con riêng) và lưu giữ trị trả về TRUE || FALSE.

    Cứ như thế ta có các giá trị riêng của từng hạng tử . Đem chúng kết lần lượt với các phép logic và trả về kết quả.

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn