源代码来了:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
pNT = ^tagNT;
tagNT = record
Temp: Double
//温度
OValue: Double
//焓值
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var
NTList: TStringList
//你所提供的列表
function GetMyValue(const AName: string;{物质名称} ATemp: Double{温度}): Double;
var
pMyNT: pNT;
i: Integer;
TOMin, //低于所求温度的最大值
TOMax, //大于所求温度的最小值
NOMin, //低于所求温度的最大值温度对应的焓值
NOMax, //大于所求温度的最小值温度对应的焓值
DResult: Double
//焓值返回值
begin
TOMin := -500
//温度永远不可能取到此值
TOMax := -500;
NOMin := 0
//焓值初始值
NOMax := 0;
DResult := -1.0
//返回的结果设一个
NTList.Sort
//按物质名称排序
if NTList.Find(AName, i) then
begin
while i < NTList.Count do
begin
pMyNT := pNT(NTList.Objects)
//按物质名称排序
{*********搜索物质名称结束,跳出循环********}
if NTList.Strings <> AName then
begin
Break;
end;
{*********搜索到匹配温度,跳出循环********}
if ATemp = pMyNT.Temp then
begin
DResult := pMyNT.OValue;
TOMin := ATemp
//设定偏移温度
TOMax := ATemp
Break
//跳出While循环
end
//在此处找出
// TOMin, TOMax, NOMin, NOMax,
//
else
begin
if pMyNt.Temp < ATemp then //温度值小于表里的给定值
begin
if (ATemp - pMyNt.Temp) < Abs(TOMin - pMyNt.Temp) then
begin
TOMin := pMyNt.Temp;
NOMin := pMyNt.OValue;
end;
end
else //温度值小于表里的给定值
begin
if (pMyNt.Temp - ATemp) < Abs(TOMax - pMyNt.Temp) then
begin
TOMax := pMyNt.Temp;
NOMax := pMyNt.OValue;
end;
end;
end;
Inc(i);
end;
if ((TOMin = -500) or (TOMax = -500)) then //给定的温度值过小或过大
begin
//输出错误信息超出范围
DResult := -1.0
//超出范围
end
else if TOMin <> TOMax then
begin
DResult := NOMin + (NOMax - NOMin)*(ATemp - TOMin)/(TOMax - TOMin);//你的计算公式
end;
end;
Result := DResult;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
pMyNT: pNT;
begin
NTList := TStringList.Create;
New(pMyNT);
pMyNT.Temp := 100;
pMyNT.OValue := 169;
NTList.AddObject('二氧化碳', TObject(pMyNT));
new(pMyNT);
pMyNT.Temp := 200;
pMyNT.OValue := 357;
NTList.AddObject('二氧化碳', TObject(pMyNT));
new(pMyNT);
pMyNT.Temp := 100;
pMyNT.OValue := 130;
NTList.AddObject('氮气', TObject(pMyNT));
new(pMyNT);
pMyNT.Temp := 200;
pMyNT.OValue := 260;
NTList.AddObject('氮气', TObject(pMyNT));
new(pMyNT);
pMyNT.Temp := 100;
pMyNT.OValue := 132;
NTList.AddObject('氧气', TObject(pMyNT));
new(pMyNT);
pMyNT.Temp := 200;
pMyNT.OValue := 267;
NTList.AddObject('氧气', TObject(pMyNT));
//继续在下添加列表
end;
procedure TForm1.FormDestroy(Sender: TObject);
var
pMyNT: pNT;
i: Integer;
begin
//释放节点分配的内存
for i := NTList.Count - 1 downto 0 do
begin
pMyNt := pNT(NTList.Objects);
Dispose(pMyNt);
end;
//释放列表
NTList.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
// ShowMessage(FloatToStr(GetMyValue(Edit1.Text, StrToFloat(Edit2.Text))));
Label1.Caption := FloatToStr(GetMyValue(Edit1.Text, StrToFloat(Edit2.Text)));
end;
end.
///////////////////////////////
我知道大家喜欢用数组