Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.01.2020, 22:39
Enforcement Enforcement вне форума
Прохожий
 
Регистрация: 13.01.2020
Сообщения: 3
Версия Delphi: Lite
Репутация: 10
По умолчанию Программирование на Delphi

Всем привет! Прошу помочь с написанием кода имитирующего опрос датчиков реактора в реальном времени. На форме при нажатии кнопки пуск должен быть показатель времени идущий от 0 сек который увеличивается до нажатия кнопки стоп по 1 секунде, показатель температура, показатель давление (эти два показателя - рандомные числа лежащие в определенном интервале могут сначала увеличиваться то потом уменьшаться типо если растет темпер то растет давление, числа показываются на форме в реальном времени) При нажатии кнопки стоп, надо чтобы посчитались средняя температура, среднее давление за прошедшее время и вывелись результаты на туже форму вместе с показателем затраченного времени И после этого отобразилось на графике по Y - средняя температура и среднее давление а по Х - время эксперимента.
Ответить с цитированием
  #2  
Старый 14.01.2020, 02:08
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,540
Версия Delphi: 7, XE3, 10.2
Репутация: 49088
По умолчанию

Ну и в чем проблема?
Создаешь таймер, логическую переменную для флага и массив для сохранения значений давления и температуры. Если очень хочется сделать совсем правдоподобно, то пишем функцию Давление от Температуры.
Код:
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;
Ну, как-то так.
Ответить с цитированием
  #3  
Старый 14.01.2020, 08:42
Enforcement Enforcement вне форума
Прохожий
 
Регистрация: 13.01.2020
Сообщения: 3
Версия Delphi: Lite
Репутация: 10
По умолчанию

Vals[High(Vals)].Temp := Vals[High(Vals)-1] + d;
ошибка [Pascal Error] Unit1.pas(49): E2015 Operator not applicable to this operand type
Ответить с цитированием
  #4  
Старый 14.01.2020, 19:52
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,540
Версия Delphi: 7, XE3, 10.2
Репутация: 49088
По умолчанию

Сорь, недопечатал:
Код:
Vals[High(Vals)].Temp := Vals[High(Vals)-1].Temp + d;
Но мог бы и сам догадаться.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Enforcement (14.01.2020)
  #5  
Старый 14.01.2020, 19:54
Enforcement Enforcement вне форума
Прохожий
 
Регистрация: 13.01.2020
Сообщения: 3
Версия Delphi: Lite
Репутация: 10
По умолчанию

допер уже, спасибо огромное) кинь цифры телефона скину благодарность
Ответить с цитированием
  #6  
Старый 14.01.2020, 20:00
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,540
Версия Delphi: 7, XE3, 10.2
Репутация: 49088
По умолчанию

не сможешь номер +1(...)
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:27.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2020

ВКонтакте   Facebook   Twitter