比如说有 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)...等等说明白了吧?
谢谢

解决方案 »

  1.   

    如果你的库是MSSQL之类的话,比较好办,执行Exec('....')或exec sp_executesql就行了
      

  2.   

    to dinoalex:
    我在标题里面说了,而且我刚才又说了一次,我要的是自动生成公式,而不是生成以后的计算,谢谢
      

  3.   

    怎样自动生成? 公式是你预定的? 如果是预定, 就用FORMAT格式化你的字符就行了.如果不是, 即用户填上去的, 替换成SQL里的函数就行了, 然后执行 exec('整个方程式')
      

  4.   

    不是我没看, 是你说不清楚, 不管你是定死的,还是自动生成的, 替换成SQL能运算的函数就行了
      

  5.   


    declare @s nvarchar(1000)
    set @s = 'select sin(0.1)+ cos(0.1+0.2)*PI()'
    exec(@s) 
      

  6.   

    如果sin(A)+ cos(A+B)* PI这些公式是固定, 即一个公式列表, 你想要随机的话,format('sin(%d)+ cos(%d+%d)* PI)',[0.1,0.1,0.2]) 就行了
      

  7.   

    我再把问题说一遍,真是晕死了,就没一个人看懂我问什么吗?我要用 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)等等
      

  8.   

    另外 to dinoalex, 我再给你说一遍,我不是要计算,我是要生成公式,明白?
    你说的这个我很多年前就知道了
      

  9.   

    to vividw,我做的时间应该比你长要是没人看懂就算了
    求人不如求己
    我想好怎么做了,只是觉得麻烦,看看有没有捷径而已 
      

  10.   

    怀疑下而已 连公式 表达式都没搞清楚。。
    高中数学的 符号范围很大的。。btw 问下 lz 40还是50 。。
      

  11.   

    嗯,可能我说的“公式”表达的不太准确,我的意思就是你们大家所说的“表达式”。随机自动生成
    我估摸着,用递归加随机数判断应该就可以做出来了另外,to vividw,虽然没有四五十,不过也做了十多年了。
      

  12.   

    嗯,这就算完了,不要那些函数了,可能算起来会比较慢
    谢谢大家了,虽然没帮上什么忙,不过也挺热心的,等有时间就来结贴吧,见者有份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;
      

  13.   

    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;