Показать сообщение отдельно
  #2  
Старый 14.01.2020, 02:08
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну и в чем проблема?
Создаешь таймер, логическую переменную для флага и массив для сохранения значений давления и температуры. Если очень хочется сделать совсем правдоподобно, то пишем функцию Давление от Температуры.
Код:
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;
Ну, как-то так.
Ответить с цитированием