Files

98 lines
1.8 KiB
ObjectPascal

unit tProbUnit;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
StdCtrls, ExtCtrls;
type
{ TTProbForm }
TTProbForm = class(TForm)
Bevel1: TBevel;
CancelBtn: TButton;
Panel1: TPanel;
tValueEdit: TEdit;
ComputeBtn: TButton;
DFEdit: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
ProbEdit: TEdit;
ResetBtn: TButton;
ReturnBtn: TButton;
procedure ComputeBtnClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure ResetBtnClick(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
TProbForm: TTProbForm;
implementation
{$R *.lfm}
uses
Math, MathUnit, Utils;
{ TTProbForm }
procedure TTProbForm.ResetBtnClick(Sender: TObject);
begin
tValueEdit.Text := '';
DFEdit.Text := '';
ProbEdit.Text := '';
end;
procedure TTProbForm.ComputeBtnClick(Sender: TObject);
var
tvalue, prob: double;
dfValue: Integer;
begin
if not MyTryStrToFloat(tValueEdit.Text, tvalue) then
begin
tValueEdit.SetFocus;
ErrorMsg('No valid number.');
exit;
end;
if not TryStrToInt(DFEdit.Text, dfValue) then
begin
dfEdit.SetFocus;
ErrorMsg('Not a valid integer (must be positive).');
exit;
end;
if tvalue >= 0.0 then
prob := 0.5 * ProbT(tvalue, dfvalue)
else if tvalue < 0.0 then
prob := 1.0 - ProbT(tvalue, dfvalue) + (0.5 *ProbT(tvalue, dfvalue))
else
prob := 0.50;
ProbEdit.Text := Format('%6.4f', [prob]);
end;
procedure TTProbForm.FormActivate(Sender: TObject);
var
w: Integer;
begin
w := MaxValue([CancelBtn.Width, ResetBtn.Width, ComputeBtn.Width, ReturnBtn.Width]);
CancelBtn.Constraints.MinWidth := w;
ResetBtn.Constraints.MinWidth := w;
ComputeBtn.Constraints.MinWidth := w;
ReturnBtn.Constraints.MinWidth := w;
end;
end.