Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Расчеты, использующие методы Монте-Карло, могут занимать от нескольких секунд до значительно большего времени в зависимости от быстродействия компьютера и заданной для расчета статистики. Пока программа считает, пользователя необходимо чем-то занять. Хорошим стилем программирования является подсчет времени, которое требуется программе на расчет одной итерации, и экстраполяция на заданное количество итераций. В этом случае в интерфейсе следует предусмотреть поля для вывода времени начала расчета, времени, требуемого для расчета, которое может обновляться через определенное количество просчитанных итераций, и время окончания расчета. В качестве другого варианта можно использовать компонент Delphi, который называется ProgressBar и находится на вкладке Win32 палитры компонентов среды разработки Delphi. При работе с ProgressBar задается начальное и максимальное значение позиции:
ProgressBar1.Position:= 0;
ProgressBar1.Max:= Stat;
а в расчетном цикле формируется текущее состояние
i:= 0;
while i <= Stat-1 do
begin
if i mod 100 = 0 then
begin
Application.ProcessMessages;
ProgressBar1.Position:=ProgressBar1.Position + 100;
if FlagStop = true then
begin
Stat:= i+1;
Edit3.Text:= IntToStr(Stat);
break;
end;
end;
... {тело цикла}...
inc(i);
end;
При работе с ProgressBar следует иметь в виду, что свойства Position и Max имеют тип integer. Приведенный выше фрагмент кода требует разъяснений. Переменная FlagStop имеет тип boоlean и получает значение true в тот момент, когда пользователем нажата кнопка СТОП, прерывающая расчет. Проверка, нажата ли кнопка СТОП, осуществляется на каждой сотой итерации. В случае завершения расчета или его прерывания результаты расчета нормируются на значение статистики. Если нажата кнопка СТОП, цикл расчета прерывается, значение статистики в этом случае равно количеству посчитанных итераций. Это значение присваивается переменной Stat и визуализируется в поле Edit3.Text. Когда идет расчет – процессор компьютера занят, программа ничего «не видит» и «не слышит». Для того, чтобы прервать вычисления и передать операционной системе управление для просмотра очередей сообщений (нужно увидеть, что нажата кнопка СТОП), используется оператор Application.ProcessMessages на каждой сотой итерации.
Дата публикования: 2014-11-03; Прочитано: 361 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!