Ну и в чем проблема?
Создаешь таймер, логическую переменную для флага и массив для сохранения значений давления и температуры. Если очень хочется сделать совсем правдоподобно, то пишем функцию Давление от Температуры.
Код:
type
TValuePair = record
Temp : Double;
Press : Double;
end;
TForm1 = class(TForm)
Timer1 : TTimer;
btStart : TButton;
btStop : TButton;
private
Vals : Array Of TValuePair;
logging : Boolean;
function P(T : Double) : Double;
end;
// Вычислдение давления от температуры
// Для примера P = (T / (T+200))*15
procedure TForm1.P(T : Double) : Double;
begin
Result := (T / (T+200))*15;
end;
procedure TForm1.Timer1Timer(Sender : TObject);
var
d : Double;
begin
if logging then
begin
SetLength(Vals,Length(Vals)+1);
d := Random *10 -5; // изменение температуры от -5 до 5
Vals[High(Vals)].Temp := Vals[High(Vals)-1] + d;
Vals[High(Vals)].Press := P(Vals[High(Vals)].Temp);
end;
end;
procedure TForm1.btStartClick(Sender : TObject);
begin
SetLength(Vals,1);
Vals[0].Temp := Random * 100; // нач. температура от 0 до 100
Vals[0].Press := P(Vals[0].Temp);
logging := true;
end;
procedure TForm1.btStopClick(Sender : TObject);
var
I : Integer;
t_avg, p_avg : Double;
begin
logging := False;
// теперь считаем среднее значения
t_avg := 0;
p_avg := 0;
For I := Low(Vals) To High(Vals) Do
Begin
t_avg := t_avg + Vals[i].Temp;
p_avg := p_avg + Vals[i].Press;
End;
t_avg := t_avg / Length(Vals);
p_avg := p_avg / Length(Vals);
ShowMessage(Format('Кол-во отсчетов: %d'#13#10'Средне значение температуры: %.3f'#13#10'Среднее значение давления: %.3f',[Length(Vals),t_avg,p_avg]));
end;
Ну, как-то так.