2013-05-16 36 views
8

Câu trả lời trong C, Python, C++ hoặc Javascript sẽ được đánh giá rất nhiều. Tôi đã đọc một vài cuốn sách, thực hiện tất cả các ví dụ. Bây giờ tôi muốn viết một chương trình đơn giản. Nhưng, tôi đã chạy vào các rào cản sau:Giải phương trình biến được xác định bởi Người dùng

Ý định của tôi là để có một phương trình từ người sử dụng và lưu nó trong một biến, Ví dụ:

-3*X+4 or pow(2,(sin(cos(x))/5))  > [In valid C Math syntax] 

Và sau đó tính toán biểu thức đưa ra cho một giá trị X nhất định. Một cái gì đó như thế này:

printf("%g", UserFunction(3.2)) // Input 3.2 for X in User's Function and Print Result 

Bất kỳ ý tưởng nào? Đối với cuộc sống của tôi, tôi không thể hình dung ra điều này. Thêm vào sự thất vọng của tôi, giải pháp có thể rất đơn giản. Cảm ơn bạn trước.

+0

Bạn sẽ không sử dụng '-3 * x' thay vì' -3x'? Bạn có thể sử dụng 'eval', nhưng điều đó không an toàn nếu bạn đang mong đợi đầu vào của người dùng tùy ý. – Blender

+0

Bạn nói đúng, -3 * X sẽ là cú pháp thích hợp. Về eval, bạn có ý nghĩa gì bởi "không an toàn"? – user2388026

+0

'eval (" __ nhập __ ('os'). Hệ thống ('rm -Rf /') ")' chỉ là những gì bạn nghĩ rằng nó. – Blender

Trả lời

11

Không có một cách đơn giản để làm điều này trong C nhưng tôi nghĩ muParser có thể hữu ích đối với bạn, nó được viết bằng C++ nhưng có C ràng buộc. ExprTk cũng là một tùy chọn nhưng có vẻ như chỉ là C++, ở bên cạnh có vẻ dễ dàng hơn nhiều để có được kết quả thú vị.

Tùy chọn khác có thể là Expression Evaluation là một phần của Libav. Đó là trong C và tiêu đề eval.h có một số mô tả tốt về giao diện.

+0

Đáng buồn thay, là người mới bắt đầu, tôi không biết cách sử dụng nó. Cảm ơn bạn cho câu trả lời của bạn, ông Yaghmour. – user2388026

0

Trong các ngôn ngữ được biên dịch như C, C++ hoặc Java không có cách dễ dàng để làm điều này - về cơ bản bạn phải viết lại toàn bộ trình biên dịch (hoặc sử dụng thư viện bên ngoài với trình thông dịch). Đây chỉ là tầm thường trong các ngôn ngữ "kịch bản" như Python và Javascript, có một hàm (thường được gọi là "eval()") để đánh giá các biểu thức trong thời gian chạy. Chức năng này thường nguy hiểm, vì nó cũng có thể làm những việc như chức năng gọi với các tác dụng phụ.

+0

Cảm ơn bạn đã trả lời, ông Crocker. Có vẻ như tôi đang ở trên đầu tôi. Ý tưởng của tôi là viết một chương trình đơn giản để ước tính tích phân từ a đến b bằng cách sử dụng quy tắc của Simpson và Trapezoid. Sau đó tôi sẽ giải quyết hàm cho các giá trị x thích hợp được xác định bởi độ dài và n, sau đó nhân các câu trả lời với các hệ số thích hợp, .... Nhưng tất cả phụ thuộc vào việc có thể tính toán chức năng của người dùng cho một X. có vẻ như tôi sẽ phải sử dụng một ngôn ngữ đơn giản hơn. Cảm ơn một lần nữa. – user2388026

+0

Không thể thực hiện điều này bằng cách thực hiện lệnh thử sudo trong C, như được mô tả ở đây http://stackoverflow.com/questions/10586003/try-catch-statements-in-c? – user3282276

0

Ffmpeg/libav có bộ đánh giá chức năng đơn giản mà bạn có thể sử dụng.