Смысл программы: если abs(y1+y2-1)<заданной точности, то должен выводиться результат. Если > заданной точности, то все расчеты должны повториться снова. Все это должно считаться в интервале температур от 329,35 до 373,15. У меня не получается правильно совместить условие и цикл.
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Edit4: TEdit;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Edit10: TEdit;
    Edit11: TEdit;
    Edit12: TEdit;
    Edit3: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var x1,x2,L12,L21,g1,g2,p10,p20,y1,y2,T:real;
begin
x1:=strtofloat(edit1.Text);
x2:=strtofloat(edit2.Text);
T:=strtofloat(edit3.Text);
repeat
L12:=(18.7/104)*exp(-(180.31/(1.987*T)));
L21:=(104/18.7)*exp(-(1722.1/(1.987*T)));
g1:=exp(-ln(x1+L12*x2)+x2*((L12/(x1+L12*x2))-(L21/(x2+L21*x1))));
g2:=exp(-ln(x2+L21*x1)-x1*((L12/(x1+L12*x2))-(L21/(x2+L21*x1))));
p10:=exp(34.61307+(-4873.446/T)-0.000000003249502*T-3.422*ln(T));
p20:=exp(30.79802+(-5966.069/T)+0.000000001030134*T-2.5*ln(T));
y1:=g1*(p10/1)*x1;
y2:=g2*(p20/1)*x2;
if (abs(y1+y2-1)<0.01) then
begin
edit4.Text:=floattostr(L12);
edit5.Text:=floattostr(L21);
edit6.Text:=floattostr(g1);
edit7.Text:=floattostr(g2);
edit8.Text:=floattostr(p10);
edit9.Text:=floattostr(p20);
edit10.Text:=floattostr(y1);
edit11.Text:=floattostr(y2);
edit12.Text:=floattostr(T);
end
else
T:=T+1;
until T>=373.15;
end;
end.