LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1005|回复: 9

如何让程序按一个表达式多次计算?(其实题目很难,内详)

[复制链接]
发表于 2003-9-1 13:37:01 | 显示全部楼层 |阅读模式
我的意思是:
用户输入一个表达式,比如
f(x,y)=3x+4x*y
然后输入x,y的值,程序进行计算。
如果只计算一次,当然很简单,但如果需要计算多次,每次的工作量又很大,那该怎么办?
计算第一次的时候,我们的程序已经进行了适当的分析,再计算时应该可以略去这些分析了。比如略去转化为后缀表达式的分析。
问题是如何让程序略去这些分析,直接调用分析的结果来计算?

或者说,能不能在程序的执行过程中分析产生这样一个函数
  1. f(x,y)
  2. {
  3.         return 3*x+4*x*y;
  4. }
复制代码
并调用它来计算?

不知道我说明白了没有。大家帮忙啊!
发表于 2003-9-1 14:41:38 | 显示全部楼层
分析产生这个函数后,如果是C的,你还要编译他才能用啊!
发表于 2003-9-1 15:23:49 | 显示全部楼层

偷懒一下

/* a.c */
main()
{
  char str[100];
  int i;
  scanf("%s",str);
  for(i=0;str && str!='=';i++);
  printf("main(){\nint x,y;\nscanf(\"%d%d\");\nprintf(\"%d\n\",%s);}",str+i+1);
}
/* a.bat 我shell不熟,用bat表示个意思罢了 */
a.exe > b.c
gcc b
b
这样,执行a.bat就可以了。

真的动态的处理字符串也不是不行,不过麻烦些,起码得词法分析,然后再生成一个函数的表示(这个自定义了,差不多就是一个结构体的链表,表示对应的输入参数、区别不同的项、因子甚至指数、幂...好复杂...晕了),然后一个处理这个链表的函数把输入的变量表代入这个‘函数’...

说起来就这么长了,做起来...呵呵
发表于 2003-9-1 15:56:14 | 显示全部楼层
不知道你编这个的目的是什么。
如果纯粹是表面上看去的这些的话,很多数学软件可以完成这个工作。
像mathematica.
 楼主| 发表于 2003-9-1 18:12:27 | 显示全部楼层
kensta你说的对。
我的原来的想法是把分析出的表达式写到shellscript里,用exec()直接调用,不用编译。不过问题在于bat中或者shellscript里可以用的变量个数。shellscript只能依次引用10个变量。
 楼主| 发表于 2003-9-1 18:17:28 | 显示全部楼层
pupilzeng,我正在编这样的数学软件
天啊,如果非要一个team才能开发出来的话,我也许应该考虑……
可是那就太可惜了!
发表于 2003-9-1 18:40:21 | 显示全部楼层
其实我以前也有这个想法,做了一部分,但是后来放弃了,想想实在是太大了,这个工程。
后来发现我需要的功能在mathematica中都有了,我又何必再浪费精力呢。
 楼主| 发表于 2003-9-1 19:21:20 | 显示全部楼层
那不行啊!
mathematica是开源的吗?
我很想克服这个难关。
发表于 2003-9-1 20:41:39 | 显示全部楼层
这个,估计要组织一个team才能克服了。
因为我发现mathematica的功能确实是比较多。
而且还需要数学方面的高手。
发表于 2003-9-1 21:48:25 | 显示全部楼层
maxima.sf.net
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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