Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 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. #1
    Ngày gia nhập
    12 2007
    Bài viết
    54

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

    Đề bài : Từ thuật toán Xác định mệnh đề đúng em hãy viết chương trình kiểm tra 1 mệnh đề nhập vào
    vị dụ: A là mênh đề đúng do nó là menh đề đơn
    (A hôi B) là mênh đề đúng
    ( A hoi B là sai do thiếu dấu )
    ( phủ đinh (A hôi B)) là đúng
    (( A hôi B) tuyển C) là đúng
    thuật toán:
    1) kiểm tra xem nó có phải là mệnh đề đơn ko , nếu phải thì kết luận biểu thức đúng
    2) Kiểm tra xem nó có bắt đầu = ( ko nếu ko thì mệnh đề đó sai
    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)
    Mong mọi người nghĩ giúp em cách giải quyết bài toán trên
    Rất mong được mọi người giúp đỡ :

    Kiến thức mình biết chỉ là hạt cát trên sa mạc

  2. #2
    Ngày gia nhập
    12 2007
    Bài viết
    54

    chú ý : các hội ,tuyển .. là các kí hiệu toán học .
    Mọng người giúp em với
    Rất mong được mọi người giúp đỡ :

    Kiến thức mình biết chỉ là hạt cát trên sa mạc

  3. #3
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    1> Duyệt chuỗi, nếu ko tìm thấy các dấu (,), and, or, not thì kết luận là mệnh đề đơn.
    2> Kiểm tra xem mệnh đề có bắt đầu bằng ) hay ko, nếu có thì báo sai. Nếu mệnh đề đúng thì duyệt mảng và dùng một biến flag, nếu thấy dấu ( thì trừ flag đi 1, dấu ) thì cộng flag lên 1. Duyệt xong mảng nếu flag = 0 thì mệnh đề đúng về các dấu ()
    Còn lại mình chưa nghĩ ra ...
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  4. #4
    Ngày gia nhập
    09 2007
    Bài viết
    724

    Cái này bạn có thể dùng các thuật toán như Vương Hạo, Robinson(không nhớ rõ cách viết tên thuật toán này). với 2 thuật toán này bạn có thể tham khảo thêm trong sách trí tuệ nhân tạo của Hoàng Kiếm.

    cái này mình đã có làm 1 cái demo rồi bạn xem cái link này thử xem sao(làm theo thuật toán Vương hạo).

    http://forums.congdongcviet.com/show...7793#post47793

    chúc bạn thành công

  5. #5
    Ngày gia nhập
    12 2007
    Bài viết
    54

    Em xem rồi nhưng ko hiểu gì , các anh giúp em với
    Rất mong được mọi người giúp đỡ :

    Kiến thức mình biết chỉ là hạt cát trên sa mạc

  6. #6
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

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

    google với từ khóa : "Finite state machine", đọc cho hiểu cái này rồi làm bài này !

  7. #7
    Ngày gia nhập
    09 2007
    Bài viết
    724

    Trích dẫn Nguyên bản được gửi bởi thangit Xem bài viết
    Em xem rồi nhưng ko hiểu gì , các anh giúp em với
    thuật toán vương hạo phát biểu như sau:
    b1: phát biểu lại Giả thiết và kết luận dưới dạng chuẩn.
    gt(1),gt(2),...,gt(n)->kl(1),kl(2),...,kl(m).

    tại đây các gt(i) và các kl(i) được xây dựng từ các biến mệnh đề và các phép toán cơ sở của mệnh đề là (phép phủ định[~], phép hội(và)[^(chữ V lộn ngược.)], phép tuyển(hay)[V]).

    b2: chuyển vế các gt(i), và kl(i) có dạng phủ định[~]
    Code:
    VD: p ^ ~q->a.
    sẽ được biểu diễn thành.
    p->aVq
    b3: thay các dấu ^ trong các giả thiết thứ i và dầu V ở trong các kết luận thứ j thành dầu phẩy(',').

    b4: nếu trong vế trái(giả thiết) gặp dấu 'V' hoặc vế phải(kết luận) gặp dấu '^' thì mệnh đề hiện tại được tách thành 2 mệnh đề con.
    Code:
    VD: p,~pvq->q
      thì được tách thành 2 dòng con.
           1:  p,~p->q.
           2: p,q->q.
    B5: một dòng được chứng minh nếu tồn tại chung một mệnh đề ở cả hai vế.
    B6: nếu trong một dòng không còn các phép toán kết nối như(V,^) mà cả 2 vế của mệnh đề không có tồn tại một mệnh đề chung thì mệnh đề không được chứng minh.(chú ý là không được chứng minh == chứng minh không được chứ chưa khẳng định được là mệnh đề đó đúng hay không.).

    Một mệnh đề được giải quyết trọn vẹn nếu tất cả các dòng dẫn suất từ biểu diễn ở dạng chuẩn được giải quyết(chứng minh).


    chi tiết bạn có thể tìm đọc "sách trí tuệ nhân tạo các phương pháp và ứng dụng" của 2 tác giả: Hoàng Kiếm và Bạch Hưng Khang.

  8. #8
    Ngày gia nhập
    12 2007
    Bài viết
    54

    các anh cho em hỏi làm sao mà đánh được các kí hiệu and , or ,suy ra ,tương đương vào chương trình . Em định xây dựng 1 hàm kiểm tra là 1 mệnh đề đơn . 1 hàm kiểm tra mệnh đề có 1 trong 4 dạng A and B , A or B ... ( cái này em chưa nghĩ ra )
    Các anh giúp em làm sao mà khi gặp ( ) thì ta gán nó bằng 1 biểu thức .
    ví dụ : (( A and B) or C) khi gặp dấu ( ) thì chương trình xét ( A and B) or C . kiểm tra c là mệnh đề đơn rồi , tiếp tục gặp dấu () thì lại xét cái bên trong

    Các anh giúp em với em sắp phải nộp bài rồi , đây là môn logic nên ko cần đến mức chính xác lắm . Giúp em với các anh ơi
    Rất mong được mọi người giúp đỡ :

    Kiến thức mình biết chỉ là hạt cát trên sa mạc

  9. #9
    Ngày gia nhập
    09 2007
    Bài viết
    724

    với cách đánh dấu các ký tự như and,or thì bạn có thể qui ước chương trình của mình và bắt người dùng phải tuân theo.

    còn bài này thực ra đơn giản nó chỉ làm một việc duy nhất là xử lý chuổi.
    với chuổi là mảng một chiều các ký tự mà kết thúc bằng ký tự '\0'

    còn đây là hàm xử lý khi gặp dấu ngoặc đơn ['()']

    C Code:
    1. int XuLy_NgoacDon(CString md,CString &MD1,CString &MD2)
    2. {
    3.     int index1;
    4.     CString temp = md;
    5.     index1 = md.Find('(',0); // tim tu dau
    6.     int i;
    7.     if(index1 ==-1)
    8.         return 0;
    9.     // voi moi dau ngoac da mo tim dau ngoac dong cho no
    10.     int count = 1;
    11.     for(i = index1+1; i < temp.GetLength() ; i ++)
    12.     {
    13.         if(temp[i] == '(')
    14.             count ++;
    15.         if(temp[i]== ')')
    16.             count --;
    17.         if(count == 0)
    18.             break;
    19.     }
    20.     if(count == 1)
    21.         return 0;
    22.     // vay i la vi tri ngoac dong cua ngoac mo tai index1
    23.    
    24.     if(index1 == 0)// dau mo ngoac nam dau dong
    25.     {
    26.         MD1 = temp.Mid(1,i-1);
    27.         if(temp[i+1]== ',')
    28.         {
    29.             MD1 = temp.Mid(1,i-1);
    30.             temp.Delete(0,i+2);
    31.             MD2 = temp;
    32.         }
    33.         else{
    34.             if(i == temp.GetLength()-1)
    35.                 temp.Delete(0,i+1);
    36.             else
    37.                 temp.Delete(0,i);
    38.             MD2 = temp;
    39.         }
    40.     }
    41.     else
    42.     {
    43.         if(temp[index1-1]==',')
    44.         {
    45.             MD1 = temp.Mid(index1+1,i-index1-1);
    46.             temp.Delete(index1-1,i-index1+2);
    47.             MD2 = temp;
    48.         }
    49.         else if(temp[index1-1] == '!')
    50.         {
    51.             MD1 = temp.Mid(index1-1,i-index1+2);
    52.             temp.Delete(index1-2,i-index1+3);
    53.             MD2 = temp;
    54.         }
    55.         else if(temp[i+1]== ',')
    56.         {
    57.             MD1 = temp.Mid(0,i);
    58.             temp.Delete(0,i+1);
    59.             MD2 = temp;
    60.         }
    61.     }
    62.     return 1;
    63. }

    bạn có thể tham khảo thêm trong chương trình demo thuật toán Vương hạo của mình.

  10. #10
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Cậu ghi ra rõ ràng :
    - hội, tuyển, giao là gì , tương đương là gì tui quên bên VN nó là cái toán tử gì rồi. Ghi ra kí tự toán học cũng được.
    - kiểm tra dấu ngoặc thì cũng đơn giản thôi :
    C++ Code:
    1. #include <cstdio>
    2. #include <cstdlib>
    3.  
    4. bool validate_parentheses( const char* s )
    5. {
    6.     int valid = 0;
    7.     while( *s != '\0' )
    8.     {
    9.         if( *s == '(' )
    10.             valid++;
    11.         else if( *s == ')' )
    12.             valid--;
    13.         ++s;
    14.     }
    15.     if( valid ) return false;
    16.     else        return true;
    17. }
    18.  
    19. int main()
    20. {
    21.     const char* s = "( )( )";
    22.     printf( "%d", validate_parentheses( s ) );
    23.  
    24.     return 0;
    25. }

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