Trang 1 trên tổng số 3 123 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 27 kết quả

Đề tài: [ Solved ]Thuật toán để tạo ra công thức bất kì

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

    Mặc định [ Solved ]Thuật toán để tạo ra công thức bất kì

    Mình đang cần một thuật toán để xây dựng một công thức tính.
    Ví dụ như: khi mình nhập vào một công thức tính là a+b thi khi nhập vào giá trị 3, 5 sẽ in ra 8. Còn khi mình xác lập lại công thức (a-b)*c và nhập vào 5,2,2 thì sẽ in kết quả là 6. Xin các bác vui lòng chỉ giúp mình thuật toán này với nhé, cám ơn các pà con.

  2. #2
    Ngày gia nhập
    01 2008
    Bài viết
    240

    Trích dẫn Nguyên bản được gửi bởi caibangbangchu Xem bài viết
    Mình đang cần một thuật toán để xây dựng một công thức tính.
    Ví dụ như: khi mình nhập vào một công thức tính là a+b thi khi nhập vào giá trị 3, 5 sẽ in ra 8. Còn khi mình xác lập lại công thức (a-b)*c và nhập vào 5,2,2 thì sẽ in kết quả là 6. Xin các bác vui lòng chỉ giúp mình thuật toán này với nhé, cám ơn các pà con.
    Cái này chắc không thể làm được đâu bạn ạ
    Mình nghĩ vậy, máy chứ không phải người
    Time

  3. #3
    Ngày gia nhập
    03 2008
    Bài viết
    78

    Cái này chắc không thể làm được đâu bạn ạ
    Mình nghĩ vậy, máy chứ không phải người
    - Được đấy, mình nghĩ nếu con người thông minh trên tất cả thì đều có thể biến tất cả các loại máy fục vụ mình ...Ví dụ:nếu như bạn nói ko đc thì bạn đang sài máy tính bỏ túi casio là jì đấy????
    - Cái này nếu phân tích về mặt cấu trúc dữ liệu thì bạn có thể dùng Stack để cài đặt...(hậu tố, trung tố, tiền tố);Nói chung thì cũng khá phức tạp..
    - Nhưng ko ít thì nhiều bạn cũng phải định nghĩa các toán tử cơ bản.
    Đã được chỉnh sửa lần cuối bởi hacker_mubaohiem : 10-04-2008 lúc 10:05 AM.
    No way, No success..

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

    Mình đang cần một thuật toán để xây dựng một công thức tính.
    Ví dụ như: khi mình nhập vào một công thức tính là a+b thi khi nhập vào giá trị 3, 5 sẽ in ra 8. Còn khi mình xác lập lại công thức (a-b)*c và nhập vào 5,2,2 thì sẽ in kết quả là 6. Xin các bác vui lòng chỉ giúp mình thuật toán này với nhé, cám ơn các pà con.
    Cậu học C/C++ được lâu chưa ( 2 năm ?) , bài này khó đó cậu à !

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

    Có nghĩa là cậu nhập vào công thức tính và giá trị sao cho giá trị sẽ được giải quyết theo công thức cậu nhập vào ?

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

    Mặc định [ Solved ]Thuật toán để tạo ra công thức bất kì

    Với bài này, tớ nghĩ như thế này :

    1. Phân rã biểu thức nhập vào thành cấu trúc cụ thể ( cây biểu thức )
    2. Lấy dữ liệu đưa vào, kiểm tra và thay thế nó với dữ liệu của cấu trúc ( thay các node leaf của cây biểu thức thành giá trị nhập vào )
    3. Tính giá trị trên cây biểu thức và xuất kết quả ra màn hình.

    Về cây biểu thức thì cậu phải coi lại trong sách. xây dựng nó cũng không quá khó, nhưng không hề dễ.
    Sau đó theo thuật toán trên mà làm.

    Vd: ( A+b )*2
    Bước 1:
    ****x
    *+****2
    A B
    Bước 2:
    Mặc định giá trị đầu tiên là a, tiếp theo là b ....
    A = 5 , b = 10:
    ****x
    *+****2
    5 10

    Tính toán :

    ****x
    *15***2

    ****30

    Xuất : 30.
    Đã được chỉnh sửa lần cuối bởi kidkid : 10-04-2008 lúc 11:22 AM.

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

    Code:
    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    void main()
    {
    float a,b;
    char tt;
    printf("\n nhap bieu thuc don gian :");
    scanf(" %f%c%f",&a,&tt,&b);
    switch(tt)
    {
    case '+' : printf("\n %f%c%f = %f",a,tt,b,a+b);
    break;
    case '-' : printf("\n %f%c%f = %f",a,tt,b,a-b);
    break;
    case 'x' :
    case '*' : printf("\n %f%c%f=%f",a,tt,b,a*b);
    break;
    case ':' : if(b!=0)
    printf("\n %f%c%f=%f",a,tt,b,a/b);
    else
    printf("loi chia cho 0");
    break;
    default: printf("\n \n khong hieu phep toan %c,tt");
    }
    getch();
    }
    thử cái này xem bạn ơi

  8. #8
    Ngày gia nhập
    07 2007
    Nơi ở
    Sơn La
    Bài viết
    133

    Nghĩa là * nhỉ? ^^!
    Dùng kí pháp nghịch đi ( biểu thức hậu tố ấy )
    Trao đổi kiến thức sẽ giúp ta tiếp cận nhanh với kiến thức.

  9. #9
    Ngày gia nhập
    02 2008
    Bài viết
    66

    Cái dạng này mình có ý tưởng nhưng để sau cùng vì nó khó làm mà đễ nhiều lỗi lắm. Khó nhất phần xử lí ngoặc thôi. các phần khác phải lo ưu tiên và tuần tự.

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

    Đây là bài toán biên dịch công thức. Về cơ bản có 2 cách là dựa vào văn phạm (grammar) và dựa vào văn phạm có thuộc tính (attributed grammar). Cách 1 dễ hiểu hơn nhưng code dài dòng hơn. Cách 2 thì rất ngắn gọn nhưng đòi hỏi kiến thức cao cấp hơn.


    Cách 1 (cách mà mình khuyên bạn nên dùng) có các phần như sau:

    1- phân tích cú pháp

    2- phân tích từ vựng

    3- dịch biểu thức thành cây (hoặc thành dạng hậu tố, còn gọi là ký pháp Ba Lan ngược)

    4- rút gọn biểu thức

    5- thi hành (còn gọi là triển khai hoặc đánh giá) biểu thức.



    Để thực hiện cách này bạn chỉ cần
    - 1 cú pháp (văn phạm của biểu thức) và
    - 1 từ pháp (văn phạm của các ký hiệu như hằng, biến, hàm, dấu phép tính,... trong biểu thức).
    Đã được chỉnh sửa lần cuối bởi Ada : 11-04-2008 lúc 06:02 PM. Lý do: thuật ngữ

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

  1. [ Solved ]Xin xem giúp các thuật toán sắp xếp!
    Gửi bởi maucoden trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 04-10-2008, 06:52 AM
  2. [ Solved ]Kĩ thuật hướng đối tượng
    Gửi bởi khauthancong_arsenal trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 24-09-2008, 12:18 PM
  3. [Solved] Hỏi về thuật toán tìm kiếm
    Gửi bởi thanhlinhhue trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 18-09-2008, 08:36 AM
  4. [Solved] Hỏi về các thuật toán tìm kiếm
    Gửi bởi vodanhxxx trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 17-09-2008, 07:07 PM
  5. [ Solved ]Thuật toán trong cây nhị phân
    Gửi bởi thientran trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 01-06-2008, 03:06 PM

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