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, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TfmSzGep = class(TForm)
edEred: TEdit;
btOff: TButton;
btCE: TButton;
btCLR: TButton;
Procedure SzGombClick(Sender: TObject);
Procedure MuGombClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btOffClick(Sender: TObject);
procedure btCLRClick(Sender: TObject);
procedure btCEClick(Sender: TObject);
private
public
end;
var
fmSzGep: TfmSzGep;
SzBt: Array[1..12] Of TButton;
MuBt: Array[1..5] Of TButton;
Muv: String; E, A, B: Real;
Elso, Uj: Boolean;
implementation
{$R *.dfm}
Procedure TfmSzGep.SzGombClick(Sender: TObject);
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(Sender: TObject);
Var Kod: Integer; Ws: String;
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:= Ws; Elso:= True;
End;
End;
procedure TfmSzGep.FormCreate(Sender: TObject);
Var I: Integer;
begin
B:= 0; E:= 0; Elso:= True; Uj:= 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(Sender: TObject);
begin
Close;
end;
procedure TfmSzGep.btCLRClick(Sender: TObject);
begin
edEred.Text:= '0'; A:= 0; B:= 0; E:= 0;
end;
procedure TfmSzGep.btCEClick(Sender: TObject);
begin
edEred.Text:= '0'; If Elso Then A:= 0 Else B:=0;
end;
end.