unit calc_unit;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, DividerBevel, Forms, Controls, Graphics, Dialogs,
  Spin, Math, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    DividerBevel1: TDividerBevel;
    lblA: TLabel;
    lblB: TLabel;
    lbResultados: TListBox;
    enteroA: TSpinEdit;
    enteroB: TSpinEdit;
    procedure cambioAoB(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    procedure RealizarCalculos;
    function CalcSum: int64;
    function CalcDif: int64;
    function CalcProducto: int64;
    function CalcPotencia: double;
    function CalcIntDivision(var isValid: boolean): int64;
    function CalcModulo(var isValid: boolean): int64;
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.CambioAoB(Sender: TObject);
begin
     RealizarCalculos;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
  CambioAoB(nil);
end;

procedure TForm1.RealizarCalculos;
var OK: boolean;
n: Int64;
begin
lbResultados.Items.Clear;
lbResultados.Items.Add('A + B : ' + IntToStr(CalcSum));
lbResultados.Items.Add('A - B : ' + IntToStr(CalcDif));
n := CalcIntDivision(OK);
if OK then
begin
lbResultados.Items.Add('A DIV B : ' + IntToStr(n));
lbResultados.Items.Add('A MOD B : ' + IntToStr(CalcModulo(OK)));
end
else lbResultados.Items.Add('A DIV B y A MOD B no son calculables');
lbResultados.Items.Add('A x B : ' + IntToStr(CalcProducto));
lbResultados.Items.Add('A^B : ' + FloatToStr(CalcPotencia));
end;

function TForm1.CalcSum: int64;
begin
     Result := enteroA.Value + enteroB.Value;
end;

function TForm1.CalcDif: int64;
begin
     Result := enteroA.Value - enteroB.Value;
end;

function TForm1.CalcProducto: int64;
begin
     Result := enteroA.Value * enteroB.Value;
end;

function TForm1.CalcPotencia: double;
begin
     Result := intpower(enteroA.Value,enteroB.Value);
end;

function TForm1.CalcIntDivision(var isValid: boolean): int64;
begin
     Result := 0;
     isValid := (enteroB.Value <> 0);
     if isValid
        then Result := enteroA.Value div enteroB.Value;
end;

function TForm1.CalcModulo(var isValid: boolean): int64;
begin
     Result := 0;
          isValid := (enteroB.Value <> 0);
          if isValid
             then Result := enteroA.Value mod enteroB.Value;
end;


end.

