Trang 2 trên tổng số 2 Đầu tiênĐầu tiên 12
Từ 11 tới 15 trên tổng số 15 kết quả

Đề tài: Viết chương trình cho thuật toán xác định mệnh đề đúng

  1. #11
    Ngày gia nhập
    07 2007
    Bài viết
    41

    Mặc định Viết chương trình cho thuật toán xác định mệnh đề đúng

    Không biết cậu học đến đâu rồi, cậu có thể dùng cách làm trực tiếp trên text như zday, tuy nhiên tốt nhất cậu nên sử dụng composit patterm:
    Cậu xây dụng một lớp Abstrac: Mệnh Đề, có một hàm pure virtual là Xác Định Giá Trị.

    xây dựng lớp Mệnh Đề Đơn thừa kế lớp mệnh đề có hàm Xác Định luôn trả về true.

    xây dựng lớp hội thừa kế từ lớp mệnh đề, và có chứa một mảng là các Mệnh Đề (Composit pattern), hàm xác định của lớp hội sẽ trả về true nếu một trong các mệnh đề mà nó chứa trả về true.

    xây dựng lớp giao tương tự như lớp hội. chỉ khác ở hàm xác định.

    xây dựng lớp not thừa kế từ lớp mệnh đề, lớp not chứa một mệnh đề khác trong nó. khi gọi hàm xác định thì nó sẽ trả về not của giá trị mệnh đề nó chứa.

    ... nếu cần thêm các phép toán khác thì bổ sung các lớp khác.

    Về chuyển từ text sang đối tượng: thực tế công việt này thực tế là phần đầu tiên của một compiler, cậu viết phần này thì nó chính là viết phần parser của compiler rồi , để viết một parser tốt thì quả không đơn giản (học Finite State Machine như rox_rook nói trước, rùi một đống thuật toán....). Viết một parser đơn giản thì có thể dùng cách đệ quy (có lẽ sẽ giống giống như code của zday - chưa đọc kỹ code của zday).

    Trước tôi có làm hộ thằng bạn một bài tập Unify theo cách này, cậu có thể tham khảo: http://www.mediafire.com/download.php?nyjwasgxggl.

    Parser có sẵn và free thì cũng nhiều, ví dụ GoldParser, YACC. Nếu sử dụng các Parser có sẵn thì cậu chỉ cần định nghĩa cái language của mình (thường thì theo BNF notation), và viết một số đoạn code để construct object của mình khi điều kiện thích hợp. Tôi cũng có một project làm theo dạng này sử dụng GoldParser nếu cậu cần thì có thể tham khảo: XProlog

  2. #12
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất đông người
    Bài viết
    735

    hội = conjunction, &
    tuyển = disjunction (inclusive), |
    suy ra = implication, ->
    tương đương = equivalence, <->

  3. #13
    Ngày gia nhập
    11 2007
    Bài viết
    1

    Bài này bạn làm như sau:
    B1-Đọc từng ký tự và lưu vào stack
    B2-Nếu gặp dấu ")" thì xử lý:
    +Xử lý ngược cho tới khi gặp dấu "(" //xử lý trên stack, kiểm tra biểu thức có đúng hay ko (trường hợp hai dấu hoặc 2 biểu thức liền kề nhau là sai)
    +Nếu sai: return false;
    +Nếu không Đặt con trỏ tại dấu "(" và thay dấu "("= 'T'//true
    B3-Khi đọc tới hết biểu thức:
    +Nếu gặp dấu "(" thì xử lý giống B2
    +Nếu con trỏ = 1 thì return true
    +Nếu con trỏ >1 thì kiểm tra biểu thức còn lại
    Ví dụ:
    (A&B)&C|(D&E)
    con trỏ t=0;
    stack={}
    -B1:
    t=4;
    stack={'(' , 'A' , '&', 'B'}
    -B2:
    t=1
    stack={'T'}
    -B1:
    t=8
    stack={'T', '&', 'C' , '|' , '(' , 'D' , '&', 'E'}
    -B1:
    t=5
    stack={'T', '&', 'C' , '|' , 'T'}
    -B3 :
    stack={'T'}
    return true;

  4. #14
    Ngày gia nhập
    02 2008
    Bài viết
    1,009

    3) kiểm tra xem nếu nó bắt đầu = ( và tiếp theo là dấu phủ định mệnh để thì gán biểu thức bên trong = a (anpha ) và tiếp tục kiểm tra a . nếu a là mệnh đề đơn hoặc là 1 trong các dạng biểu thức sau ( A hội B) or(A tuyển B) or(A tương đương B)or (A suy ra B)
    không hiểu câu naỳ cậu định nói gì,đoạn cuối cậu nói không rõ nếu a là mệnh đề đơn hoặc là 1 trong các dạng biểu thức sau ( A hội B) or(A tuyển B) or(A tương đương B)or (A suy ra B)
    sao không có câu kết luận VD như đúng hay sai...

  5. #15
    Ngày gia nhập
    09 2008
    Bài viết
    1

    Thực ra đề bài này như sau: Hãy viết một chương trình kiểm tra ngữ pháp của một biểu thức được nhập. Thuật toán:

    Input: expression Alpha Output: true or false (indicating whether Alpha is a wff ).
    0. Begin with an initial construction tree T containing a single node labeled with Alpha.
    1. If all leaves of T are labeled with propositional symbols, return true.
    2. Select a leaf labeled with an expression Alpha1 which is not a propositional
    symbol.
    3. If Alpha1 does not begin with ( return false.
    4. Examine Alpha1 to find Beta, the first balanced proper initial segment of Alpha1. If there is no such Beta, return false.
    5. If Alpha1=(-Beta), then add a child to the leaf labeled by Alpha1, label it with Beta, and goto 1.
    6. If Alpha1=(Beta & Xichma)where & is one of {^,v,->,<->} and Beta is balanced, then add two children to the leaf labeled by Alpha1, label them with Beta and Xichma, and goto 1.
    7. Return false.

    các anh làm giúp em với khó quá. thuật toán kiểm tra cân bằng ngoặc em biết rồi giờ cần chương trình KT ngữ pháp của biểu thức
    Đã được chỉnh sửa lần cuối bởi buiquanghuyptit : 09-09-2008 lúc 10:15 PM. Lý do: thiếu nội dung

Các đề tài tương tự

  1. Lập trình C giúp em với viết code đúng mà không hiển thị màn hình!
    Gửi bởi gato trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 16-10-2012, 05:34 PM
  2. Bài tập C Lỗi vòng for trong khi viết đúng câu lệnh
    Gửi bởi tuanvu199x trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 06-10-2011, 09:32 PM
  3. Viết lại hàm qsort chạy không đúng?
    Gửi bởi j3amboo trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 05-06-2011, 01:22 PM
  4. Không đúng format (bài viết cũ)
    Gửi bởi Kevin Hoang trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 05-03-2008, 07:01 PM
  5. xin hướng dẫn cách viết hàm như thế nào cho đúng
    Gửi bởi dragoncl12 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 10
    Bài viết cuối: 17-06-2007, 10:23 AM

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