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.

