谁能给我个自动生成数学公式的小程序,谢谢,100分 比如说有 A B C D E 五个变量,要能根据 + - * / ,还有 sin、cos、tan、PI、 sqrt 、LOG 等函数自动生成公式,比如说:sin(A)+ cos(A+B)* PItan(sqrt(A*D)- 2* E)+ LOG(C* D*E)...等等说明白了吧?谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果你的库是MSSQL之类的话,比较好办,执行Exec('....')或exec sp_executesql就行了 to dinoalex:我在标题里面说了,而且我刚才又说了一次,我要的是自动生成公式,而不是生成以后的计算,谢谢 怎样自动生成? 公式是你预定的? 如果是预定, 就用FORMAT格式化你的字符就行了.如果不是, 即用户填上去的, 替换成SQL里的函数就行了, 然后执行 exec('整个方程式') 不是我没看, 是你说不清楚, 不管你是定死的,还是自动生成的, 替换成SQL能运算的函数就行了 declare @s nvarchar(1000)set @s = 'select sin(0.1)+ cos(0.1+0.2)*PI()'exec(@s) 如果sin(A)+ cos(A+B)* PI这些公式是固定, 即一个公式列表, 你想要随机的话,format('sin(%d)+ cos(%d+%d)* PI)',[0.1,0.1,0.2]) 就行了 我再把问题说一遍,真是晕死了,就没一个人看懂我问什么吗?我要用 A B C D E 五个变量,以及 + - * / 等四则运算 ,还有 sin、cos、tan、PI、 sqrt 、LOG 等函数随机自动生成公式,比如说:sin(A)+ cos(A+B)* PItan(sqrt(A*D)- 2* E)+ LOG(C* D*E)A*B- 2*AA/C + TAN(B+D)sin(E)等等 另外 to dinoalex, 我再给你说一遍,我不是要计算,我是要生成公式,明白?你说的这个我很多年前就知道了 to vividw,我做的时间应该比你长要是没人看懂就算了求人不如求己我想好怎么做了,只是觉得麻烦,看看有没有捷径而已 怀疑下而已 连公式 表达式都没搞清楚。。高中数学的 符号范围很大的。。btw 问下 lz 40还是50 。。 嗯,可能我说的“公式”表达的不太准确,我的意思就是你们大家所说的“表达式”。随机自动生成我估摸着,用递归加随机数判断应该就可以做出来了另外,to vividw,虽然没有四五十,不过也做了十多年了。 嗯,这就算完了,不要那些函数了,可能算起来会比较慢谢谢大家了,虽然没帮上什么忙,不过也挺热心的,等有时间就来结贴吧,见者有份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; 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; wwDBGrid多选问题!!求助大大们~~ Delphi 到底应该如何调用COM? ### 小图片中画字的问题 请大侠帮忙解释一下这段代码的作用! edit编辑框可以判断输入的字符是汉字还是英文吗?如果不能,哪个控件可以呢? 取到系统目录以后操作怎么字符串怎么不可以操作?详细请看。。。。 怎么让窗口全屏显示?帮帮我吧? 如何让控件响应delete键?? 怎样实现TQRExpr的Expression运算功能? 致Kingron,我能把mybase4.54版及以其格式的Delphi猛料上传到这里? 难一点点的问题没人答么? delphi 2010 发布程序
我在标题里面说了,而且我刚才又说了一次,我要的是自动生成公式,而不是生成以后的计算,谢谢
declare @s nvarchar(1000)
set @s = 'select sin(0.1)+ cos(0.1+0.2)*PI()'
exec(@s)
你说的这个我很多年前就知道了
求人不如求己
我想好怎么做了,只是觉得麻烦,看看有没有捷径而已
高中数学的 符号范围很大的。。btw 问下 lz 40还是50 。。
我估摸着,用递归加随机数判断应该就可以做出来了另外,to vividw,虽然没有四五十,不过也做了十多年了。
谢谢大家了,虽然没帮上什么忙,不过也挺热心的,等有时间就来结贴吧,见者有份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;
var
rstr: string;
rval: integer;
begin
rstr := InputBox('提示','输入一个数值和原来的数值进行相加','');
rval := StrToInt(rstr) + StrToInt(Edit1.Text);
ShowMessage(Edit1.Text + ' + ' + rstr + '=' + IntToStr(rval));
end;