佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1536|回复: 17

c++ 讀取用戶自定義函數

[复制链接]
发表于 5-4-2010 05:55 AM | 显示全部楼层 |阅读模式
在c++ 要如何讀取用戶自定義函數呢?

比如
讓用戶可輸入 x+3     x^2+6x+7       xsinx-6x
等等之類的

這類編程要怎麼做?
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 5-4-2010 10:13 PM | 显示全部楼层
呃...我的問題寫的不夠清楚嗎@@
我其實是想寫一些program
比如bisection method/newton's method 之類的
然後用iteration來找出approximation...
我想寫不固定於某一函數(讓用戶輸入f(x))
回复

使用道具 举报

发表于 5-4-2010 11:20 PM | 显示全部楼层
可以尝试用cin, cout来prompt user input.
int x,fx
cout<<"Please enter number x: ";
cin>>x
你的function就放这里,比如fx = x*x + 6*x + 7;
cout <<"Result is: "<<fx<<endl;
记得用math.h,会帮你省很多时间
回复

使用道具 举报

 楼主| 发表于 6-4-2010 01:17 AM | 显示全部楼层
我要的f(x) 是由用戶輸入
不是由我來固定某單一函數
回复

使用道具 举报

发表于 6-4-2010 11:02 AM | 显示全部楼层
那就是計算機囉,Google找一下calculator的演算法。
回复

使用道具 举报

 楼主| 发表于 7-4-2010 12:12 PM | 显示全部楼层
我上網找了資料 理解到這類問題需要什麽知識了
就是 parser  (我沒學過 也從來沒看過)

有沒有人懂得parser的呢? 如果是c++的 更佳....
回复

使用道具 举报

Follow Us
发表于 7-4-2010 02:51 PM | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 8-4-2010 01:40 AM | 显示全部楼层
这个逆波兰表达式 之前也在google有search到类似的东西
我大概读了一些(中文的笔记)
大概了解是做什么用的
不过不懂得如何转换成逆波兰表达式@@

不过还是谢谢你的链接

我觉得 是因为我对programming的认识还不够深
打算假期时再自修
回复

使用道具 举报


ADVERTISEMENT

发表于 8-4-2010 10:25 AM | 显示全部楼层
中文wiki有轉換的code,只不過是python語言,但也很好懂。
http://zh.wikipedia.org/wiki/%E9 ... 8%E7%A4%BA%E6%B3%95
回复

使用道具 举报

 楼主| 发表于 8-4-2010 04:32 PM | 显示全部楼层
本帖最后由 img3nius 于 8-4-2010 04:37 PM 编辑

嗯  中文的我也看了(code在英文的那邊也是有)
現在大概有些頭緒大概該怎麼做 但是不確定我的想法對不對(還在考試 假期回家才嘗試)
不過對於輸入有variable的expression還是完全不懂該如何改 如 2x  siny 之類的

還有就是...
我上網下載了一些code(parser 的 )
大部份都是超長的 (200+~600+ line的都有)
是不是要寫一個能輸入有variable的expression的program (包括sin cos tan factorial exponenial等function)
最少都要這麼長啊....
回复

使用道具 举报

 楼主| 发表于 12-5-2010 09:06 PM | 显示全部楼层
已经做得到了
计算机上我懂得用的运算符几乎都可以用了
不过我是用java做的

我想问 jTextField 要如何从右填到左啊?
回复

使用道具 举报

 楼主| 发表于 12-5-2010 09:11 PM | 显示全部楼层
已经做得到了
用逆波兰表达式 很好用= =
计算机里我懂得的运算符 大部分都可以使用了
不过我是用java的

我想问 jTextField 如果由右开始填文本啊? 第一次用java
还有jFrame怎样可以显示中文或日文啊?
回复

使用道具 举报

发表于 13-5-2010 09:41 PM | 显示全部楼层
Java要設定特定字型才能顯示多國語文,如sansserif, Dialog。
回复

使用道具 举报

发表于 15-5-2010 09:51 PM | 显示全部楼层
樓主應該是要用到 LEX & YACC 之類的技術。Java / C# 暫時應該比較難。
回复

使用道具 举报

发表于 15-5-2010 10:19 PM | 显示全部楼层
也可以考虑embed一些现成的interpretor,例如tcl 之类的。然后可以用expr

  1. #include "tcl.h"
  2. #include <stdio.h>
  3. #include <string.h>

  4. int main()
  5. {
  6.      Tcl_Interp *myinterp;
  7.      char *aaa = "puts [expr 1+3*4+5] ";
  8.      myinterp = Tcl_CreateInterp();
  9.      Tcl_Eval(myinterp,aaa);

  10. }
复制代码
回复

使用道具 举报

 楼主| 发表于 31-5-2010 08:49 PM | 显示全部楼层
回复 15# tensaix2j


    呃.... 看不明白= ="
我最近都在读java 我上述所提到的也是用java 做的...
很久没碰c++了@@...
不过还是谢谢你们的解答
回复

使用道具 举报


ADVERTISEMENT

发表于 2-6-2010 12:26 PM | 显示全部楼层
.. java 也没问题。只要你的interp有支援的话。。
不过如果你不喜欢tcl,也可以去找python的interp。


  1. import tcl.lang.*;  
  2. class tcltest {
  3.     public static void main( String[] args) {
  4.         Interp interp = new Interp();
  5.         try{
  6.             String aaa = " puts [expr 1+2*3+4/5+6*7] ";
  7.             interp.eval(aaa);
  8.         } catch ( Exception ex) {
  9.         }
  10.     }

  11. }
复制代码
回复

使用道具 举报

 楼主| 发表于 3-6-2010 08:46 PM | 显示全部楼层
interp?tcl? 我還沒在java參考書内看過這兩個字眼@@
是java其中的兩個類嗎?
python是編程語言? 還沒學過...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 23-11-2025 10:54 AM , Processed in 0.151137 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表