Процедуру очистки протокола можно оставить такой же, как в предыдущей работе, а так как модуль формы скопирован, то она у нас есть. В любом случае процедура будет соответствовать рисунку 3.4.
Рисунок 3.4 – Процедура очистки протокола
Что касается процедуры инициализации формы, то мы ее переделаем,
Прежде всего, создадим процедуру setKoef(), которая обеспечит установку начальных значений в поля ввода для переменных «а», «x» и «n», входящих в формулу. Параметрами, передаваемыми в процедуру, будут числовые значения этих переменных. В процедуре числа будут преобразовываться в строки, и заноситься в соответствующие компоненты TEdit. Такое преобразование целесообразно, так как в этом случае десятичный разделитель для дробных чисел будет установлен правильно при любой настройке системы.
Так как в этой процедуре мы будем обращаться к компонентам формы edtA, edtB, edtC, а процедура не принадлежит классу формы, то в ней перед именами компонент обязательно следует указывать имя формы, разделяя эти имена точкой.
Другой способ решения этой проблемы состоит в использовании конструкции with … do, с помощью которой имя формы выносится как бы за операторные скобки begin … end. Именно эта конструкция используется в процедуре setKoef(), показанной на рисунке 3.5.
Рисунок 3.5 – Процедура для инициализации полей ввода значений переменных, входящих в формулу
Теперь можно создать процедуру инициализации формы, связанную с событием onCreate. С помощью этой процедуры мы обеспечим очистку поля Memo и заполнение текстовых полей корректными исходными данными. Это ускорит отладку и проверку работоспособности программы.
В этой процедуре, представленной на рисунке 3.6, вначале имитируется нажатие кнопки «Очистить протокол», что приводит к вызову соответствующей процедуры.
Вторая строка тела процедуры вызывает процедуру setKoef(), в которую передаются значения переменных. Эти значения появятся в полях edtA, edtB, edtC.
Для расчета по формуле необходимо прочитать значения переменных из компонентов TEdit и преобразовать их в вещественные числа.
Возложим решение этой проблемы на специальную процедуру. Назовем процедуру getKoef. Параметрами процедуры будут три переменных вещественного типа, которые соответствуют переменным формулы. Так как эта процедура должна возвращать значения вышеуказанных параметров, то все они должны передаваться по наименованию, то есть, описаны в заголовке процедуры со словом var. Текст процедуры приведен ниже.
В предыдущем проекте расчет по формуле, ввод исходных данных и вывод результатов были реализованы в одной процедуре и все эти операции были привязаны к форме. Однако это не совсем правильно, можно даже сказать, что совсем неправильно.
Дело в том, что расчет по формуле – это одна задача, а ввод исходных данных – совсем другая. Данные могут вводиться не только с формы, но и из файла, из массива или из какого-то другого источника данных. При этом расчет по формуле остается без изменений.
Кроме того, расчет по этой формуле может понадобиться и в других приложениях.
Вывод результатов – это тоже отдельная задача, которая может решаться различными способами.
Поэтому, для расчетов по формуле мы напишем функцию, которая не будет иметь отношения к форме.
Исходными данными для расчета по формуле являются вещественные числа a, x, n. Результатом – тоже вещественное число.
Описание функции для расчета по формуле может выглядеть так.
function myFormula1(a, x, n:real): real;
var ch, q, zn,
Begin
ch:=exp(x*ln(a))+sqr(sin(x)); //числитель формулы
q:=x*(n*a+a)/n/a; //подкоренное выражение
zn:= exp(ln(q)/n); //знаменатель формулы
result:= ch/zn;
end;
Эту функцию для расчета по формуле поместим в отдельном модуле.
Добавьте новый модуль в проект, воспользовавшись функцией главного меню File→New→Unit.
В интерфейсной части модуля объявите функцию, написав ее заголовок, а в раздел реализации вставьте ее описание. В результате, модуль должен иметь вид, представленный на рисунке 3.8.
Сохраните модуль в той же папке, что и модуль формы проекта (хотя это и не обязательно), присвоив ему имя UnitDop.
Откомпилируйте модуль, вызвав функцию главного меню Project→CompilePtoject.
Посмотрите содержимое папки, где вы сохранили модуль. Там должен появиться файл UnitDop.dcu, который содержит откомпилированный модуль. Если это так, то модуль готов к употреблению.
Рисунок 3.8 – Функция расчета по формуле в дополнительном модуле
3.2.1.4 Использование дополнительного модуля
Для того, чтобы в основном модуле можно было воспользоваться функцией расположенной в дополнительном модуле, следует, прежде всего, дополнить инструкцию uses основного модуля, добавив туда ссылку на модуль UnitDop.
Обрабатывая инструкцию uses,компилятор дойдет до ссылки на модуль UnitDop и начнет искать файл UnitDop.dcu. Прежде всего, поиск будет производиться в папке, где расположен проект и форма, но если там модуля нет, то компилятору необходимо подсказать, где искать этот файл.
В этом случае ызовите диалог настройки путей, вызвав функцию главного меню Project→Options, откройте в нем закладку Directories/Conditionals, и в строке Search Path укажите путь к папке, где расположен модуль.
3.2.1.5 Завершение работы над проектом
Для проверки работоспособности процедуры ввода коэффициентов и функции расчета по формуле, описанной в дополнительном модуле, напишем процедуру обработки события onClick для кнопки «Выполнить расчет. Процедура представлена на рисунке 3.9.
Рисунок 3.9 – Главная процедура с вызовом вспомогательной процедуры и функции