Смысл программы: если 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.