谁能给我个自动生成数学公式的小程序,谢谢,100分

ljstudio 2011-08-05 10:34:41
比如说有 A B C D E 五个变量,要能根据 + - * / ,还有 sin、cos、tan、PI、 sqrt 、LOG 等函数自动生成公式,比如说:

sin(A)+ cos(A+B)* PI

tan(sqrt(A*D)- 2* E)+ LOG(C* D*E)

...等等

说明白了吧?
谢谢
...全文
515 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljstudio 2011-08-14
  • 打赏
  • 举报
回复
明天结贴,见者有份
山东蓝鸟贵薪 2011-08-14
  • 打赏
  • 举报
回复
慢慢学习吧
占位置学习学习
ljstudio 2011-08-07
  • 打赏
  • 举报
回复
具体用的时候还得再详细一点,比如要保证分母不能为0之类的,我就不往上贴了
ljstudio 2011-08-07
  • 打赏
  • 举报
回复
嗯,这就算完了,不要那些函数了,可能算起来会比较慢
谢谢大家了,虽然没帮上什么忙,不过也挺热心的,等有时间就来结贴吧,见者有份

function dx(n:Integer=-1):string;
var
i,j,tn,mx:Integer;
begin
Randomize;

mx:= 28;
i:= Random(mx);
j:= Random(mx);

tn:= n;
if tn=-1 then
begin
repeat
tn:= Random(mx)+12;
until tn<=mx;
end;

case tn of
0:Result:= 'A';
1:Result:= 'B';
2:Result:= 'C';
3:Result:= 'D';
4:Result:= 'E';
5:Result:= 'HZ';
6:Result:= 'KD';
7:Result:= 'HW';
8:Result:= 'QW';
9:Result:= 'PJ';
10:Result:= 'DS';
11:Result:= 'XS';
12:Result:= dx(Random(11))+ dx(Random(11));//两个数合并
13:Result:= dx(i) +'+'+ dx(j);
14:Result:= dx(i) +'-'+ dx(j);
15:Result:= dx(i)+'*'+ dx(j);
16:Result:= dx(i)+'/'+ dx(j);
17:Result:= dx(Random(16)) + '+ 0.618';
18:Result:= dx(Random(16)) + '- 0.618';
19:Result:= dx(Random(16)) + '* 0.618';
20:Result:= dx(Random(16)) + '/ 0.618';
21:Result:= '0.618/'+ dx(Random(16));
22:Result:= '0.618-'+ dx(Random(16));
23:Result:= dx(Random(16)) +'+'+ IntToStr(Random(100)+1);
24:Result:= dx(Random(16)) +'-'+ IntToStr(Random(100)+1);
25:Result:= dx(Random(16)) +'*'+ IntToStr(Random(100)+1);
26:Result:= dx(Random(16)) +'/'+ IntToStr(Random(100)+1);
27:Result:= IntToStr(Random(100)+1)+'-'+dx(Random(16));
28:Result:= IntToStr(Random(100)+1)+'/'+dx(Random(16));
end;
end;

调用:
procedure TForm1.Button1Click(Sender: TObject);
var
i:Integer;
ts:string;
begin
//
Memo1.Clear;
for i:= 0 to 100 do
begin
repeat
ts:= dx;
until (Length(ts)>15) and (Length(ts)<40);

Memo1.Lines.Add(ts);
end;

end;
山东蓝鸟贵薪 2011-08-07
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var
rstr: string;
rval: integer;
begin
rstr := InputBox('提示','输入一个数值和原来的数值进行相加','');
rval := StrToInt(rstr) + StrToInt(Edit1.Text);
ShowMessage(Edit1.Text + ' + ' + rstr + '=' + IntToStr(rval));
end;

dinoalex 2011-08-06
  • 打赏
  • 举报
回复
如果你的库是MSSQL之类的话,比较好办,执行Exec('....')或exec sp_executesql就行了
shijies 2011-08-06
  • 打赏
  • 举报
回复
有公式编辑器软件,看看别人怎么做的。
山东蓝鸟贵薪 2011-08-06
  • 打赏
  • 举报
回复
占位置学习学习.............
ljstudio 2011-08-06
  • 打赏
  • 举报
回复
过几天有空我做一个再说吧
shijies 2011-08-06
  • 打赏
  • 举报
回复
就是把一些字符串按一定的规则给连接起来,使用字符串操作函数。
天涯倦客 2011-08-06
  • 打赏
  • 举报
回复
你的 式子里 变量是可复用的。。 搜索范围很大
需要进一步条件进行剪枝。
ljstudio 2011-08-06
  • 打赏
  • 举报
回复
嗯,可能我说的“公式”表达的不太准确,我的意思就是你们大家所说的“表达式”。随机自动生成
我估摸着,用递归加随机数判断应该就可以做出来了

另外,to vividw,虽然没有四五十,不过也做了十多年了。
taoran12 2011-08-06
  • 打赏
  • 举报
回复
随机生成的还叫公式吗? 一些计算表达式而已
天涯倦客 2011-08-06
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 ljstudio 的回复:]

to vividw,我做的时间应该比你长

要是没人看懂就算了
求人不如求己
我想好怎么做了,只是觉得麻烦,看看有没有捷径而已
[/Quote]
怀疑下而已。。。 连公式 表达式都没搞清楚。。
高中数学的 符号范围很大的。。

btw 问下 lz 40还是50 。。
dinoalex 2011-08-06
  • 打赏
  • 举报
回复
晕~ 什么条件或规则都没有, 来个 /0 吧
Oraclers 2011-08-06
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 ljstudio 的回复:]
我再把问题说一遍,真是晕死了,就没一个人看懂我问什么吗?

我要用 A B C D E 五个变量,以及 + - * / 等四则运算 ,还有 sin、cos、tan、PI、 sqrt 、LOG 等函数随机自动生成公式,比如说:

sin(A)+ cos(A+B)* PI

tan(sqrt(A*D)- 2* E)+ LOG(C* D*E)

A*B- 2*A

A/C + TAN……
[/Quote]
楼主不理解“公式”与“表达式”(这里借用了计算机的述语,或许叫“运算式”更合适)的区别吧,所谓“公式”是不能随机生成的。我想你要的就是根据你给出的变量、函数随机生成一些运算式吧。
delphier817 2011-08-06
  • 打赏
  • 举报
回复
公式能自动生成吗?没有明白LZ的意思。。。
ljstudio 2011-08-06
  • 打赏
  • 举报
回复
to vividw,我做的时间应该比你长

要是没人看懂就算了
求人不如求己
我想好怎么做了,只是觉得麻烦,看看有没有捷径而已
天涯倦客 2011-08-06
  • 打赏
  • 举报
回复
楼主 高中没毕业吧。。
你先把问题说清楚。。。
“比如”、“等”这些不好清晰描述问题。
ljstudio 2011-08-06
  • 打赏
  • 举报
回复
另外 to dinoalex, 我再给你说一遍,我不是要计算,我是要生成公式,明白?
你说的这个我很多年前就知道了
加载更多回复(11)

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧