unit numeditmain; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, Spin, DividerBevel, math; type { TForm1 } TForm1 = class(TForm) DividerBevel1: TDividerBevel; lblB: TLabel; lblA: TLabel; lbResults: TListBox; seA: TSpinEdit; seB: TSpinEdit; procedure ChangeAorB(Sender: TObject); procedure FormActivate(Sender: TObject); private procedure UpdateCalculations; function CalcSum: int64; function CalcProduct: int64; function CalcPower: double; function CalcIntDivision(var isValid: boolean): int64; function CalcModulus(var isValid: boolean): int64; function CalcSumOfSquares: int64; public end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.ChangeAorB(Sender: TObject); begin UpdateCalculations; end; procedure TForm1.FormActivate(Sender: TObject); begin ChangeAOrB(nil); end; procedure TForm1.UpdateCalculations; var OK: boolean; n: Int64; begin OK := true; lbResults.Items.Clear; lbResults.Items.Add('A + B : ' + IntToStr(CalcSum)); n := CalcIntDivision(OK); if OK then begin lbResults.Items.Add('A DIV B : ' + IntToStr(n)); lbResults.Items.Add('A MOD B : ' + IntToStr(CalcModulus(OK))); end else lbResults.Items.Add('A DIV B, A MOD B are not calculable'); lbResults.Items.Add('A x B : ' + IntToStr(CalcProduct)); lbResults.Items.Add('A*A + B*B : ' + IntToStr(CalcSumOfSquares)); lbResults.Items.Add('A to POWER B : ' + FloatToStr(CalcPower)); end; function TForm1.CalcSum: int64; begin Result := seA.Value + seB.Value; end; function TForm1.CalcProduct: int64; begin Result := seA.Value * seB.Value; end; function TForm1.CalcPower: double; begin Result := intpower(seA.Value, seB.Value); end; function TForm1.CalcIntDivision(var isValid: boolean): int64; begin Result := 0; isValid := (seB.Value <> 0); if isValid then Result := seA.Value div seB.Value; end; function TForm1.CalcModulus(var isValid: boolean): int64; begin Result := 0; isValid := (seB.Value <> 0); if isValid then Result := seA.Value mod seB.Value; end; function TForm1.CalcSumOfSquares: int64; begin Result := seA.Value * seA.Value + seB.Value * seB.Value; end; end.