Возвращаемые функциями поиска значения (true при нормальном завершении, false при ошибках) запоминаются во вспомогательной переменной Good, которая анализируется по окончании поиска. Если расчет был неудачным, то в строку Замечания панели отображения результатов заносится текст "Расчет прерван". Аналогичная строка заносится в протокол. После этого пользователю показывается окно, представленное на рис. 4.20. Если же расчет завершился благополучно, полученные данные заносятся в соответствующие строки панели отображения результатов расчета и в файл протокола. Предварительно в случае, если расчет проводился методом дихотомии, проверяется достоверность найденного корня. Дело в том, что если в начале расчета методом дихотомии оказалось, что знаки функции на концах интервала неопределенности одинаковы, то дихотомия, строго говоря, не может работать. Пользователю сообщается об этом в диалоговом окне, показанном ранее на рис. 4.2. Если пользователь ответил в этом окне Да, желая продолжать расчет, то возможны два варианта: или один из корней (если они имеются в заданном интервале) будет найден, или результат расчета приблизится к одной из границ начального интервала неопределенности на величину, меньшую заданной допустимой погрешности по аргументу. В последнем случае полученный результат недостоверен и вероятно (но не обязательно) истинный корень лежит вне начального интервала с той его стороны, к которой приблизилось решение (но, для немонотонной функции не исключено, что корень лежит с другой стороны).

4.6.2 Программная реализация приложения

Подобную проверку достоверности корня осуществляет процедура TForml.A-RootExecute. Если расстояние корня до одной из границ начального интервала неопределенности меньше заданной погрешности по аргументу, в строку Замечания панели отображения результатов и в файл протокола заносится текст вида "Возможно, корень превышает заданный предел ..." (см. листинг 4.5) или "Возможно, корень меньше заданного предела ...".

Мы подробно рассмотрели основные функции и процедуры модуля Rootl. Теперь коротко прокомментируем остальные процедуры.

Процедура AOpenExecute открывает с помощью стандартного диалога Windows текстовый файл с описанием нового уравнения и загружает его в окно редактирования Memol. При этом свойству Memo 1.Modified присваивается значение true, чтобы текст новой задачи был внесен в файл протокола (см. выше описание процедуры ARootExecute).

Процедура ASaveExecute сохраняет с помощью стандартного диалога Windows в текстовом файле описание уравнения из окна редактирования Memol. Про-цедура.АСа1сЕхесЫе вызывает с помощью функции WinExec стандартную программу Windows "Калькулятор".

Процедура ApplicationEventslHint является обработчиком события OnHint компонента ApplicationEventsl. При перемещении курсора мыши над быстрыми кнопками инструментальной панели или над разделами меню этот обработчик обеспечивает отображение в третьей панели компонента StatusBarl развернутых подсказок пользователю о назначении кнопки или раздела. Эти подсказки - вторая часть свойства Hint объектов действий, созданных в компоненте ActionListl. Вторая часть пишется в свойствах Hint, отделяясь от первой, краткой части символом вертикальной черты '|\

Процедура MemolKeyDown является обработчиком событий OnKeyDown и Оп-KeyUp компонента Memol. Она обеспечивает отображение во второй панели компонента StatusBarl номера текущей позиции курсора в окне редактирования Memol при любых манипуляциях пользователя с клавиатурой. Позиция определяется выражением Memol. SelStart+1. В этом выражении Memo l.S el Start - текущая позиция курсора, отсчитываемая от нуля. Так как пользователю удобнее вести отсчет от единицы, это значение увеличивается на 1.

Аналогичные функции выполняет процедура MemolMouseDown - обработчик событий OnMouseDown и OnMouseUp в окне Memol. Таким образом отслеживается перемещение курсора с помощью мыши.

Процедура EXminKeyDown является общим обработчиком событий OnKeyDown окон редактирования EXmin, EXmax, EXO, EDAbsX, EDRelX. События происходят при нажатии пользователем какой-нибудь клавиши в процессе редактирования текста окна. Обработчик определяет, не является ли она клавишей Enter (Key = VK_RETURN). Клавишу Enter пользователь обычно нажимает, заканчивая редактировать текст в окне. Целесообразно в ответ на это действие пользователя передать фокус другому окну - следующему в последовательности табуляции.

Именно это делает оператор обработчика EXminKeyDown. Функция FindNext-Control возвращает компонент, являющийся следующим в последовательности табуляции за компонентом, на который указывает первый параметр функции. В данном случае этот параметр соответствует Sender - окну, в котором произошло событие. С учетом последовательности табуляции, рассмотренной при описании формы, при нажатии клавиши Enter фокус последовательно переключается между окнами EXmin (если оно видимо), EXmax, ЕХО (если оно видимо), EDAbsX, ED-RelX, EDF (если оно видимо). Таким образом пользователю облегчается последовательное заполнение всех окон, задающих параметры метода поиска.

Процедура AExitExecute закрывает основное окно приложения, завершая таким образом выполнение приложения.

4.6 Приложение для решения различными методами уравнения, заданного пользователем || Оглавление || 4.7 Приложение для решения уравнения автоматически выбираемым методом


⇐ Предыдущая страница|

Приемы программирования в Delphi на основе VCL



Новости за месяц

  • Май
    2020
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс