Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие Delphi.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
5 Мб
Скачать
☆

17Работа с несколькими модулями

Когда создается новое приложение, то оно содержит один модуль и форму. Программист может добавить в свой проект столько модулей, сколько ему необходимо. Обычно отдельный модуль необходим, чтобы отделить функции и процедуры, предназначаемые для конкретной задачи. В нем располагаются описание типов и переменные, используемые в других модулях (глобальные) и подпрограммы. Разработка приложений с использованием принципа модульности построения является хорошим тоном.

Чтобы добавить новый модуль в свой проект, необходимо открыть пункт главного меню Delphi File/New/Unit. После этого откроется новый пустой модуль, который содержит следующие разделы:

unit Unit2; // заголовок модуля

interface // раздел интерфейса

implementation //раздел реализации

end.

В разделе интерфейса располагается описание идентификаторов, которые будут доступны всем другим модулям, в которых текущий модуль содержится в списке Uses. В данном разделе размещаются константы, переменные и подпрограммы. Для подпрограмм указывается имя и входящие параметры, само описание подпрограммы находится в разделе реализации. Все другие модули, которые будут использованы в текущем модуле, записываются через запятую в списке Uses. При построении приложения старайтесь, чтобы модули не ссылались друг на друга. Если этого избежать нельзя, тогда указывайте их в списке Uses в разделе реализации.

В разделе реализации располагается код подпрограмм, заголовки которых были приведены в предыдущем разделе. Порядок следования подпрограмм в разделе реализации не важен. В разделе реализации можно также объявлять константы, переменные и типы данных, которые будут видны (доступны) только в данном модуле (локальные).

Также могут существовать два необязательных раздела: инициализация и деинициализация [6].

Чтобы новый модуль был подключен к проекту, необходимо сначала сохранить его в папку, в которой находится проект и все модули. Желательно называть модули значащими именами. Затем нужно выбрать пункт главного меню Delphi Project/Add to Project. После этого откроется диалоговое окно, в котором нужно выбрать кнопку открыть (рисунок 36):

Рисунок 36 - Добавление модуля в проект

Пример 21. Расчет значения функции на интервале [хн,хк] с шагом h. Изменим пример 20, в котором рассчитывалось значение функции .

Добавим на форму компонент для ввода основания логарифма (LabeledEdit). Расчет функции будет проводиться в новом модуле. Функция расчета называется Rascet .

Код нового модуля:

unit Mat;

interface

uses SysUtils; //необходимо записать для использования класса

//исключительных ситуаций

// следующие функции можно использовать в любом модуле проекта

function Log(x,a:real):real;

function Rascet(x,a:real;var y:real):boolean;

implementation

// функция расчета логарифма x по основанию a

function Log(x,a:real):real;

begin

Result:=ln(x)/ln(a);

end;

function Rascet(x,a:real;var y:real):boolean;

{функция логического типа. Если значение вычисляемого параметра

у определено, то значение функции True}

begin

try

y:=Log(x,a);

Result:=true;

except

Result:=false;

end;

end;

end.

Код программы при нажатии на кнопку изменился следующим образом:

//в ввод параметров расчета добавилась строка

a:=StrToFloat(Form1.LabeledEdit3.Text);

//--------------

if (a<=0) or (a=1) then

begin

MessageDlg('Ошибка в записи основании

логарифма', mtError,[mbOK],0);

exit;

end;

case Form1.RadioGroup1.ItemIndex of

0:begin

Form1.StringGrid1.Visible:=true;

Form1.Chart1.Visible:=false;

while xn<=xk do

begin

if i>Form1.StringGrid1.RowCount then

Form1.StringGrid1.RowCount:=

Form1.StringGrid1.RowCount+1;

Form1.StringGrid1.Cells[0,i]:=

FloatToStr(xn);

if Rascet(xn,a,y)

then Form1.StringGrid1.Cells[1,i]:=

FloatToStr(y)

else Form1.StringGrid1.Cells[1,i]:=

'нет';

xn:=xn+h;

inc(i);

end;

end;

1:begin

Form1.StringGrid1.Visible:=false;

Form1.Chart1.Visible:=true;

while xn<=xk do

begin

if Rascet(xn,a,y)

then Form1.Chart1.SeriesList.

Series[0].AddXY(xn,y,'',clRed);

xn:=xn+h;

end;

end;

2:begin

Form1.StringGrid1.Visible:=false;

Form1.Chart1.Visible:=false;

if Form1.SaveDialog1.Execute then

begin

try

AssignFile(Raschet,

Form1.SaveDialog1.FileName);

Rewrite(Raschet);

while xn<=xk do

begin

if Rascet(xn,a,y)

then WriteLn(Raschet,

FloatToStr(xn)+'

'+FloatToStr(y))

else WriteLn(Raschet,

FloatToStr(xn)+

'не определено');

xn:=xn+h;

end;

finally

CloseFile(Raschet);

end;

end;

end;

end;