|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Программирование на Delphi
Всем привет! Прошу помочь с написанием кода имитирующего опрос датчиков реактора в реальном времени. На форме при нажатии кнопки пуск должен быть показатель времени идущий от 0 сек который увеличивается до нажатия кнопки стоп по 1 секунде, показатель температура, показатель давление (эти два показателя - рандомные числа лежащие в определенном интервале могут сначала увеличиваться то потом уменьшаться типо если растет темпер то растет давление, числа показываются на форме в реальном времени) При нажатии кнопки стоп, надо чтобы посчитались средняя температура, среднее давление за прошедшее время и вывелись результаты на туже форму вместе с показателем затраченного времени И после этого отобразилось на графике по Y - средняя температура и среднее давление а по Х - время эксперимента.
|
#2
|
|||
|
|||
Ну и в чем проблема?
Создаешь таймер, логическую переменную для флага и массив для сохранения значений давления и температуры. Если очень хочется сделать совсем правдоподобно, то пишем функцию Давление от Температуры. Код:
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
|
|||
|
|||
Vals[High(Vals)].Temp := Vals[High(Vals)-1] + d;
ошибка [Pascal Error] Unit1.pas(49): E2015 Operator not applicable to this operand type |
#4
|
|||
|
|||
Сорь, недопечатал:
Код:
Vals[High(Vals)].Temp := Vals[High(Vals)-1].Temp + d; |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Enforcement (14.01.2020)
|
#5
|
|||
|
|||
допер уже, спасибо огромное) кинь цифры телефона скину благодарность
|
#6
|
|||
|
|||
не сможешь номер +1(...)
|