Lazarus 写一个计算配液体积的小程序

如图,溶液C是溶液A与溶液B的混合物。假如我们已经知道A与B的浓度,现在要配制成目标浓度C溶液,需要A,B各多少?
显然,体积C = 体积A + 体积B,
浓度C × 体积C = 浓度A × 体积A + 浓度B × 体积B 。
解这个方程组还是有点繁琐。不方便多次调整各个浓度值与一个体积去计算另外两个体积。
所以还是得制作一个小工具。
在这里插入图片描述

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Edit1: TEdit;     {溶液A浓度}
    Edit2: TEdit;     {溶液A体积}
    Edit3: TEdit;     {溶液B浓度}
    Edit4: TEdit;     {溶液B体积}
    Edit5: TEdit;     {溶液C浓度}
    Edit6: TEdit;     {溶液C体积}
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private

  public

  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

function def0(x:string):Double;
begin
  if x = '' then def0 := 0.0
  else def0 := strtofloat(x);
end;

function round4(x:Double):Double;
begin
  round4 := Round(x * 10000) / 10000;
end;

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
  ca,va,cb,vb,cc,vc:Double;
begin
  ca := def0(Edit1.Text);
  va := def0(Edit2.Text);
  cb := def0(Edit3.Text);
  cc := def0(Edit5.Text);
  vb := round4((ca - cc) / (cc - cb) * va);
  Edit4.Text := FloatToStr(vb);
  vc := va + vb;
  Edit6.Text := FloatToStr(vc);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  ca,va,cb,vb,cc,vc:Double;
begin
  ca := def0(Edit1.Text);
  cb := def0(Edit3.Text);
  vb := def0(Edit4.Text);
  cc := def0(Edit5.Text);
  va := round4((cc - cb) / (ca - cc) * vb);
  Edit2.Text := FloatToStr(va);
  vc := va + vb;
  Edit6.Text := FloatToStr(vc);
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  ca,va,cb,vb,cc,vc:Double;
begin
  ca := def0(Edit1.Text);
  cb := def0(Edit3.Text);
  cc := def0(Edit5.Text);
  vc := def0(Edit6.Text);
  va := round4((cc - cb) / (ca - cb) * vc);
  Edit2.Text := FloatToStr(va);
  vb := vc - va;
  Edit4.Text := FloatToStr(vb);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ShowMessage('先填写溶液ABC的浓度,再填入其中一个溶液的体积,点击旁边的按钮,即可求得另外两个溶液的体积。');
end;

end.

在这里插入图片描述如上图,我们有65mg/L 的 溶液 30mL,配制成24mg/L的溶液C需要多少稀释液B呢?点击 计算BC 按钮,得到下图:
在这里插入图片描述需要B液51.25mL,得到溶液C 81.25mL。

在这里插入图片描述假如我们溶液B不足,仅有48mL,又该如何使用呢?
可以将体积B填入48,点击 计算AC 按钮,得到上图体积A与C。

在这里插入图片描述如果我们只需要78mL的溶液C,那就可以输入体积C,点击 计算AB 按钮,就得到溶液A需要33.6mL,溶液B是44.4mL。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值