Számológép

 

Írjunk programot, amely egy egyszerű zsebszámológép működését szimulálja. A program legyen képes a négy alapművelet végrehajtására, lehessen utolsó bevitt adatot és minden adatot törölni. Nyomógomb legyen a kikapcsolására is.

 

A számjegyeket és műveleti jeleket tartalmazó nyomógombokat futási időben állítsa elő a program.

 

A program formja szerkesztési időben:

 

 

 

         A futtatási kép:

 

 

A program listája:

 

unit USzgep;
interface
uses
  Windows, MessagesSysUtilsVariantsClasses

  GraphicsControlsFormsDialogsStdCtrls;
type
  TfmSzGep = class(TForm)
    edEredTEdit;
    btOffTButton;
    btCETButton;
    btCLRTButton;
    Procedure SzGombClick(SenderTObject);
    Procedure MuGombClick(SenderTObject);
    procedure FormCreate(SenderTObject);
    procedure btOffClick(SenderTObject);
    procedure btCLRClick(SenderTObject);
    procedure btCEClick(SenderTObject);
  private
  public
  end;
var
  fmSzGepTfmSzGep;
  SzBtArray[1..12] Of TButton;
  MuBtArray[1..5] Of TButton;
  MuvString; E, A, B: Real;
  ElsoUjBoolean;

implementation
{$R *.dfm}

Procedure TfmSzGep.SzGombClick(SenderTObject);
Begin
  If Uj Then edEred.Text:= '0';
  With Sender As TButton Do If Caption<>'+/-' Then
  Begin
    If edEred.Text='0' Then edEred.Text:= Caption
    Else edEred.Text:= edEred.Text+Caption;
  End Else
  Begin
    If edEred.Text[1]='-' Then
    edEred.Text:= Copy(edEred.Text,2,Length(edEred.Text)-1)
    Else edEred.Text:= '-'+edEred.Text;
  End;
  Uj:= False;
End;

Procedure TfmSzGep.MuGombClick(SenderTObject);
Var Kod: Integer; WsString;
Begin
  Uj:= True;
  If Elso Then Val(edEred.Text,A, Kod)

  Else Val(edEred.Text,B, Kod);
  Elso:= Not Elso;
  With Sender As TButton Do If Caption<>'=' Then Muv:= Caption;
  With Sender As TButton Do If Caption='=' Then
  Begin
    If Muv='+' Then E:= A+B; If Muv='-' Then E:= A-B;
    If Muv='*' Then E:= A*B; If Muv='/' Then E:= A/B;
    Str(E:10:4,Ws); If Pos('.',Ws)>0 Then
    While Ws[Length(Ws)]='0' Do Ws:= Copy(Ws,1,Length(Ws)-1);
    If Ws[Length(Ws)]='.' Then Ws:= Copy(Ws,1,Length(Ws)-1);
    edEred.Text:= WsElso:= True;
  End;
End;

procedure TfmSzGep.FormCreate(SenderTObject);
Var I: Integer;
begin
  B:= 0; E:= 0; Elso:= TrueUj:= False;
  For I:= 1 To 12 Do
  Begin
    SzBt[I]:= TButton.Create(Self);
    With SzBt[I] Do
    Begin
      Parent:= fmSzGep;
      Top:= 100+30*((I-1) Div 3);
      Left:= 100+40*((I-1) Mod 3);
      Width:= 30;
      Height:= 20;
      With Font Do
      Begin
        Style:= [fsBold];
        Size:= 10;
      End;
      Case I Of
        1..9: Caption:= IntToStr(I);
        10: Caption:= '0';
        11: Caption:= '.';
        12: Caption:= '+/-';
      End;
      OnClick:= SzGombClick;
    End;
  End;
  For I:= 1 To 5 Do
  Begin
    MuBt[I]:= TButton.Create(Self);
    With MuBt[I] Do
    Begin
      Parent:= fmSzGep;
      Top:= 70+30*I;
      Left:= 230;
      Width:= 30;
      Height:= 20;
      With Font Do
      Begin
        Style:= [fsBold];
        Size:= 10;
      End;
      Case I Of
        1: Caption:= '+';
        2: Caption:= '-';
        3: Caption:= '*';
        4: Caption:= '/';
        5: Begin Height:= 25; Caption:= '=' End;
      End;
      OnClick:= MuGombClick;
    End;
  End;
  With btOff Do Begin Top:= 220; Left:= 100 End;
  With btCLR Do Begin Top:= 220; Left:= 140 End;
  With  btCE Do Begin Top:= 220; Left:= 180 End;
end;

procedure TfmSzGep.btOffClick(SenderTObject);
begin
  Close;
end;

procedure TfmSzGep.btCLRClick(SenderTObject);
begin
  edEred.Text:= '0'; A:= 0; B:= 0; E:= 0;
end;

procedure TfmSzGep.btCEClick(SenderTObject);
begin
  edEred.Text:= '0'; If Elso Then A:= 0 Else B:=0;
end;

end.