只求有加减乘除!的小软件啊!!我们老师考试内容!
谢谢个位大虾帮忙!

解决方案 »

  1.   

    http://www.tommstudio.com/newclub30/d_mywork.asp此处有下载!
    刚试过
    能下
      

  2.   

    {
    程序:四则运算计算器}
    unit jsq;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, Buttons,ExtCtrls,urlmon;
    const MaxElements=100;     //maximum char in stack;
    type TStack=class
         private
           SData:array[1..MaxElements] of string;    //stack data
         public
           IsEmpty:boolean;                          //it is an empty stack 
           TopPointer:integer;                       //the top pointer of the stack;
           procedure Init;
           function GetElement(var data:string;i:integer):boolean;  //get data from stack
           function PopElement(var data:string):boolean;            //popup data
           function PushElement(data:string):boolean;               //push data
    end;type
      TForm1 = class(TForm)
        SpeedButton1: TSpeedButton;
        SpeedButton2: TSpeedButton;
        SpeedButton3: TSpeedButton;
        SpeedButton4: TSpeedButton;
        SpeedButton5: TSpeedButton;
        SpeedButton6: TSpeedButton;
        SpeedButton7: TSpeedButton;
        SpeedButton8: TSpeedButton;
        SpeedButton9: TSpeedButton;
        SpeedButton10: TSpeedButton;
        SpeedButton11: TSpeedButton;
        SpeedButton12: TSpeedButton;
        SpeedButton13: TSpeedButton;
        SpeedButton14: TSpeedButton;
        SpeedButton15: TSpeedButton;
        SpeedButton16: TSpeedButton;
        SpeedButton17: TSpeedButton;
        SpeedButton20: TSpeedButton;
        Panel1: TPanel;
        SpeedButton18: TSpeedButton;
        SpeedButton19: TSpeedButton;
        SpeedButton21: TSpeedButton;
        procedure SpeedButton1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure SpeedButton17Click(Sender: TObject);
        procedure SpeedButton20Click(Sender: TObject);
        procedure SpeedButton19Click(Sender: TObject);
        procedure FormKeyPress(Sender: TObject; var Key: Char);
        procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
        procedure SpeedButton22Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
      procedure StoreExpression(exp:string;mystack:TStack);          //save expression
      procedure TransformExpression(sourceStack,targetStack:TStack); //transform
      function Calculate(rStack:TStack;var Aresult:real):boolean;    //calculatevar
      Form1: TForm1;
      ExpressionStack,tempStack,ReverseStack:TStack;
    implementation{$R *.DFM}procedure TForm1.SpeedButton1Click(Sender: TObject);
    begin
      if panel1.Caption='Syntax Error' then SpeedButton17.Click;
      if TSpeedbutton(sender).caption='+/-' then begin
         if panel1.caption='0' then exit;
         if panel1.Caption[1]='-' then panel1.caption:=copy(panel1.caption,2,length(panel1.caption)) else panel1.Caption:='-'+panel1.Caption;
         exit;
      end;  if (TSpeedbutton(Sender).caption[1] in ['0'..'9','(']) and (panel1.Caption='0') then panel1.Caption:='';
      panel1.Caption:=panel1.Caption+TSpeedButton(Sender).caption;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      ExpressionStack:=TStack.Create;
      tempStack:=TStack.Create;
      ReverseStack:=TStack.Create;
      ExpressionStack.Init;
      tempStack.Init;
      ReverseStack.Init;end;
    function TStack.GetElement(var data:string;i:integer):boolean;
    begin
      if (i>TopPointer) or (i<1) then begin
         result:=false;
         exit;
      end;   //read Stack error  data:=SData[i];
      result:=true;
    end;procedure TStack.Init;
    begin
      TopPointer:=0;
      IsEmpty:=True;
    end;function TStack.PopElement(var data: string): boolean;
    var aData:string;
    begin
      if not GetElement(aData,TopPointer) then begin
         result:=false;
         exit;
      end;
      //popup the data of Stack's head,first in first out  data:=aData;
      sData[TopPointer]:='';
      dec(TopPointer);
      if TopPointer<=0 then IsEmpty:=true else IsEmpty:=false;
      result:=true;end;function TStack.PushElement(data: string): boolean;
    begin
      if TopPointer>=MaxElements then begin
         result:=false;
         exit;
      end;
      isEmpty:=false;
      inc(TopPointer);
      SData[TopPointer]:=data;
      result:=true;
    end;
    procedure StoreExpression(exp:string;mystack:TStack);
    var temp:char;
        temp1:string;
        i:integer;
        v:string;
    begin
      mystack.Init;
      v:='';
      for i:=1 to length(Exp) do begin
          temp:=exp[i];
          if temp in ['+','-','*','/','(',')'] then begin
             if v<>'' then mystack.PushElement(v);//if
             mystack.GetElement(temp1,mystack.TopPointer);
             if (temp='-') and ((temp1='(') or (mystack.IsEmpty))then mystack.PushElement('0');  //
             mystack.PushElement(temp);
             v:='';
          end else begin
            v:=v+temp;
          end;
      end;
      if v<>'' then mystack.PushElement(v);
    end;
      

  3.   

    procedure TransformExpression(sourceStack,targetStack:TStack);
    var i:integer;
        str:string;
        temp:string;
        value,code:integer;
    begin
      for i:=1 to sourceStack.TopPointer do begin
          sourceStack.GetElement(str,i);
          val(str,value,code);
          if code=0 then targetStack.PushElement(str) //this is a operate data
          else begin   // this is a opeartor
             if (str='+') or (str='-') then begin
                while not tempStack.IsEmpty do begin
                   tempStack.GetElement(temp,tempStack.TopPointer);
                   if temp='(' then break;
                   tempStack.PopElement(temp);
                   targetStack.PushElement(temp);
                end;
             end;//if
             if (str='*') or (str='/') then begin
                while not tempStack.IsEmpty do begin
                   tempStack.GetElement(temp,tempStack.TopPointer);
                   if (temp='(') or (temp='-') or (temp='+') then break;
                   tempStack.PopElement(temp);
                   targetStack.PushElement(temp);
                end;  //while
             end;//if
             if str=')' then begin
                while not tempStack.IsEmpty do begin
                   tempStack.GetElement(temp,tempStack.TopPointer);
                   if (temp='(') then begin
                       tempStack.PopElement(temp);
                       break;
                   end;
                   tempStack.PopElement(temp);
                   targetStack.PushElement(temp);
                end;//while
             end;//if
             if str<>')' then tempStack.PushElement(str);
          end;//else if
      end;//for  while not tempStack.IsEmpty do begin
         tempStack.PopElement(temp);
         targetStack.PushElement(temp);
      end;
      targetStack.GetElement(temp,1);
    end;function Calculate(rStack:TStack;var Aresult:real):boolean;
    var i:integer;
        temp:string;
        stra,strb:string;
        inta,intb:real;
        tempResult:real;
        code:integer;
        strtemp:string;
    begin
      Result:=false;
      ExpressionStack.Init;
      tempStack.Init;
      ReverseStack.GetElement(strtemp,1);
      val(strtemp,tempResult,Code);  for i:=1 to ReverseStack.TopPointer do begin
          ReverseStack.GetElement(temp,i);
          case temp[1] of
           '+','-','*','/':begin
                 if not tempStack.PopElement(stra) then exit;
                 if not tempStack.PopElement(strb) then exit;
                 val(stra,inta,code);
                 if code<>0 then exit;
                 val(strb,intb,code);
                 if code<>0 then exit;
                 if temp='+' then tempResult:=intb+inta;
                 if temp='-' then tempResult:=intb-inta;
                 if temp='*' then tempResult:=intb*inta;
                 if temp='/' then begin
                    if inta=0 then exit;
                    tempResult:=intb/inta;
                 end;
                 tempStack.PushElement(floattostr(tempResult));
           end;
           else tempStack.PushElement(temp);
          end;//case
      end;//if
      tempStack.PopElement(temp);
      if not tempStack.IsEmpty then exit;
      Aresult:=tempResult;
      result:=true;
    end;
    procedure TForm1.SpeedButton17Click(Sender: TObject);
    begin
      ExpressionStack.Init;
      tempStack.Init;
      ReverseStack.Init;
      Panel1.Caption:='0';
    end;procedure TForm1.SpeedButton20Click(Sender: TObject);
    var jg:real;
    begin
      ExpressionStack.Init;
      tempStack.Init;
      ReverseStack.Init;
      
      StoreExpression(Panel1.caption,ExpressionStack);
      TransformExpression(ExpressionStack,ReverseStack);
      if Calculate(ReverseStack,jg) then Panel1.caption:=floattostr(jg)
      else panel1.Caption:='Syntax Error';
    end;procedure TForm1.SpeedButton19Click(Sender: TObject);
    var s:string;
    begin
      if panel1.Caption='Syntax Error' then panel1.Caption:='0';
      s:=panel1.Caption;  
      if s<>'' then panel1.Caption:=copy(s,1,length(s)-1);
      if panel1.caption='' then Panel1.Caption:='0';
    end;procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
    var i:integer;
    begin
      if key=#27 then Speedbutton17.Click;
      if key=#13 then key:='=';
      if key=#8 then Speedbutton19.Click;
      for i:=0 to form1.ControlCount-1 do begin
          if Controls[i] is TSpeedbutton then begin
             if TSpeedbutton(form1.Controls[i]).caption=key then begin
                TSpeedbutton(form1.Controls[i]).click;
                exit;
             end;
          end;
      end;//forend;procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      panel1.hint:=panel1.caption;
    end;procedure TForm1.SpeedButton22Click(Sender: TObject);
    var Buffer: array[0..127] of WideChar;
    begin
      StringToWideChar('http://www.tommstudio.com', Buffer, SizeOf(Buffer) div 2);
      if IsValidURL(nil, Buffer, 0) = 0 then  HLinkNavigateString(nil, Buffer);
    end;end.
      

  4.   

    好笨的做法,难道不会用hash树来做吗?
      

  5.   

    用LY写的把
    简单强大的
    自己把他改写为EXE的见
    http://blog.csdn.net/ly_liuyang/archive/2002/02/16/13334.aspx
      

  6.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, Buttons, StdCtrls, Menus,Unit2;type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        BitBtn1: TBitBtn;
        Shape1: TShape;
        ColorDialog1: TColorDialog;
        MainMenu1: TMainMenu;
        N1: TMenuItem;
        procedure Button3Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure BitBtn1Click(Sender: TObject);
        procedure N1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button3Click(Sender: TObject);
    begin
    Shape1.Shape :=stRoundRect;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
    Shape1.Shape :=stRectangle;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
    Shape1.Shape :=stEllipse;
    end;procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
    try
    if ColorDialog1.Execute then
     Shape1.Brush.Color:=ColorDialog1.Color;
     except
     ShowMessage('color selection dialog failed to load.');
     end;
    end;procedure TForm1.N1Click(Sender: TObject);
    begin
     AboutBox.Show;
    end;end.
      

  7.   

    上面那个发错了
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Button4: TButton;
        Button5: TButton;
        Button6: TButton;
        Button7: TButton;
        Button8: TButton;
        Button9: TButton;
        Button10: TButton;
        Button11: TButton;
        Button13: TButton;
        Button14: TButton;
        Button15: TButton;
        Button16: TButton;
        Button12: TButton;
        procedure FormCreate(Sender: TObject);
        procedure Button16Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);
        procedure Button5Click(Sender: TObject);
        procedure Button6Click(Sender: TObject);
        procedure Button7Click(Sender: TObject);
        procedure Button8Click(Sender: TObject);
        procedure Button9Click(Sender: TObject);
        procedure Button10Click(Sender: TObject);
        procedure Button11Click(Sender: TObject);
        procedure Button12Click(Sender: TObject);
        procedure Button13Click(Sender: TObject);
        procedure Button14Click(Sender: TObject);
        procedure Button15Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      temp1:string;
      temp2:real;
      flag:integer;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
    Form1.Edit1.Clear;
    end;procedure TForm1.Button16Click(Sender: TObject);
    begin
    flag:=4;
    temp1:=Edit1.Text;
    edit1.Clear
    end;procedure TForm1.Button12Click(Sender: TObject);
    begin
    Edit1.Text:='0';
    end;
    procedure TForm1.Button15Click(Sender: TObject);
    begin
    flag:=3;
    temp1:=Edit1.Text;
    edit1.Clear
    end;
    procedure TForm1.Button14Click(Sender: TObject);
    begin
    flag:=2;
    temp1:=Edit1.Text;
    edit1.Clear
    end;
    procedure TForm1.Button13Click(Sender: TObject);
    begin
    flag:=1;
    temp1:=Edit1.Text;
    edit1.Clear
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
    Edit1.Clear;
    Edit1.Text:=Edit1.Text+'1';
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
    Edit1.Text:=Edit1.Text+'2';
    end;procedure TForm1.Button3Click(Sender: TObject);
    begin
    Edit1.Text:=Edit1.Text+'3'
    end;procedure TForm1.Button4Click(Sender: TObject);
    begin
    Edit1.Text:=Edit1.Text+'4'
    end;procedure TForm1.Button5Click(Sender: TObject);
    begin
    Edit1.Text:=Edit1.Text+'5'
    end;procedure TForm1.Button6Click(Sender: TObject);
    begin
    Edit1.Text:=Edit1.Text+'6'
    end;procedure TForm1.Button7Click(Sender: TObject);
    begin
    Edit1.Text:=Edit1.Text+'7'
    end;procedure TForm1.Button8Click(Sender: TObject);
    begin
    Edit1.Text:=Edit1.Text+'8'
    end;procedure TForm1.Button9Click(Sender: TObject);
    begin
    Edit1.Text:=Edit1.Text+'9'
    end;procedure TForm1.Button10Click(Sender: TObject);
    begin
    Edit1.Text:=Edit1.Text+'0'
    end;procedure TForm1.Button11Click(Sender: TObject);
    begin
    case flag of
     1:temp2:=StrToFloat(Edit1.Text)+StrToFloat(temp1);
     2:temp2:=StrToFloat(Edit1.Text)-StrToFloat(temp1);
     3:temp2:=StrToFloat(Edit1.Text)*StrToFloat(temp1);
     4:temp2:=StrToFloat(Edit1.Text)/StrToFloat(temp1);
    end;
    Edit1.Text:=FloatToStr(temp2);
    end;end.
      

  8.   

    我做了一个简单的加法运算器,供参考。
    unit ch3_4Unit;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Button4: TButton;
        Button5: TButton;
        Button6: TButton;
        Button7: TButton;
        Button8: TButton;
        Button9: TButton;
        Button10: TButton;
        Button11: TButton;
        Button12: TButton;
        Button13: TButton;
        procedure FormCreate(Sender: TObject);
        procedure ZeroToNineClick(Sender: TObject);
        procedure Button10Click(Sender: TObject);
        procedure Button12Click(Sender: TObject);
        procedure Button13Click(Sender: TObject);
      private
        { Private declarations }
      temp: Int64;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
      temp :=0;
    end;procedure TForm1.ZeroToNineClick(Sender: TObject);
    begin
       edit1.Text := edit1.Text + TButton(Sender).Caption;
    end;procedure TForm1.Button10Click(Sender: TObject);
    begin
      temp := StrToInt64('0'+edit1.Text);
      edit1.Text :='';
    end;procedure TForm1.Button12Click(Sender: TObject);
    begin
      temp := 0;
      edit1.Text :=' ';
    end;procedure TForm1.Button13Click(Sender: TObject);
    begin
      temp := temp +StrToInt64('0'+edit1.text);
      edit1.text := IntToStr(temp);
    end;end.