Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







Тема 7. Программирование с использованием подпрограмм и модулей





Цель лабораторной работы: изучить возможности DELPHI для написания подпрограмм и создания модулей. Составить и отладить программу, использующую внешний модуль UNIT с подпрограммой.

Использование подпрограмм

Подпрограмма – это именованная, определенным образом оформленная группа операторов, которая может быть вызвана любое количество раз из любой точки основной программы.

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

Подпрограммы подразделяются на процедуры и функции.

Процедура имеет следующую структуру:

Procedure <имя процедуры> ([список формальных параметров]);

Const [описание используемых констант];

Type[описание используемых типов];

Var [описание используемых переменных];

Begin

… // Операторы

End;

В отличие от процедур функции могут использоваться в выражениях в качестве операнда, поэтому они имеют следующую структуру:

Function <имя функции> ([список формальных параметров]): <тип результата>;

Const [описание используемых констант];

Type[описание используемых типов];

Var [описание используемых переменных];

Begin

… // Операторы

Result:= … ; // Занесение результата вычислений в Result

End;

Процедуры и функции могут быть использованы в качестве формальных параметров подпрограмм. Для этого определяется тип:

Type <имя> = function ([список формальных параметров]):<тип результата>;

или Type <имя> = procedure ([список формальных параметров]);.

Имя процедуры или функции должно быть уникальным в пределах программы. Список формальных параметров необязателен и может отсутствовать. Если же он есть, то в нем перечисляются через точку с запятой имена формальных параметров и их типы. Имеется три вида формальных параметров: параметры-значения, параметры-переменные, параметры-константы. При вызове подпрограммы передача данных для этих видов осуществляется по-разному. Параметры-значения копируются, и подпрограмма работает с их копией, поэтому при вызове на месте такого параметра можно ставить арифметическое выражение. При использовании параметров-переменных (в описании перед ними ставится Var) и параметров-констант в подпрограмму передается адрес и она работает с самой переменной. С помощью параметров-переменных подпрограмма передает результаты своей работы вызывающей программе.

В функциях используется специальная переменная Result, интерпретируемая как значение, которое вернет в основную программу функция по окончании своей работы.



В язык Object Pascal встроен ряд наиболее часто употребляемых процедур и функций, которые являются частью языка и вызываются без предварительного определения в разделе описаний.

Использование модулей

Модуль – автономно компилируемая программная единица, включающая в себя процедуры, функции, а также различные компоненты раздела описаний. Структура модуля представлена в п.1.2 и содержит следующие основные части: заголовок, интерфейсная часть, исполняемая, инициирующая и завершающая.

Заголовок состоит из зарезервированного слова Unit и следующего за ним имени модуля, которое должно совпадать с именем дискового файла. Использование имени модуля в разделе Uses основной программы приводит к установлению связи модуля с основной программой.

Интерфейсная часть расположена между зарезервированными словами interface и implementation и содержит объявление тех объектов модуля, которые должны быть доступны другим программам.

Исполняемая часть начинается зарезервированным словом implementation и содержит описание процедур и функций, объявленных в интерфейсной части. Она может также содержать вспомогательные типы, константы, переменные, процедуры и функции, которые будут использоваться только в исполняемой части и не будут доступны внешним программам.

Инициирующая часть начинается зарезервированным словом initialization и содержит операторы, которые исполняются до передачи управления основной программе.

Завершающая часть начинается зарезервированным словом finalization и выполняется в момент окончания работы программы.

Инициирующая и завершающая части модуля используются крайне редко.

7.3. Порядок выполнения задания

Задание: написать программу вывода на экран таблицы функции, которую оформить в виде процедуры. В качестве функции использовать по выбору Tg(x), ch(x) и sin2(x).

Создание модуля

Создавая модуль, следует обратить внимание на то, что он не должен иметь своей формы. Система DELPHI при начальной загрузке автоматически создает шаблон программы, имеющий в своем составе форму, файл проекта и т.д. Т.к. модуль состоит только из одного файла, то необходимо перед его созданием уничтожить заготовку файла проекта и форму. Для этого в меню File выбрать Close All, файл проекта не сохранять.

Для создания модуля в меню File выбрать File New, и затем в репозитории - пиктограмму . В результате будет создан файл с заголовком Unit Unit1. Имя модуля можно сменить на другое, отвечающее внутреннему содержанию модуля, например Unit Matfu;. Затем необходимо сохранить файл с именем, совпадающим с именем заголовка модуля: Matfu.pas. Следует обратить внимание на то, что имя файла должно совпадать с именем модуля, иначе DELPHI не сможет подключить его к другой программе.

Подключение модуля

Для того чтобы подключить модуль к проекту, необходимо в меню Project выбрать опцию Add to Project… и выбрать файл, содержащий модуль. После этого в разделе Uses добавить имя подключаемого модуля – MatFu. Теперь в проекте можно использовать функции, содержащиеся в модуле.

 
 

Панель диалога будет иметь следующий вид (рис. 7.1).

Тексты модуля и вызывающей программы приведены ниже.

Текст модуля:

unit Matfu;

 

interface

 

Function Tg(x:extended) : extended; // Функция для вычисления тангенса

Function Ch(x:extended) : extended; // Функция для вычисления гиперболического синуса

Function Sin2(x:extended) : extended; // Функция для вычисления квадрата синуса

 

implementation

Function Tg;

begin

Result:=Sin(x)/Cos(x);

end;

Function Ch;

begin

Result:=(exp(x)-exp(-x))/2;

end;

Function Sin2;

begin

Result:=sqr(sin(x));

end;

 

end.

 

Текст вызывающей программы:

unit Unit1;

 

interface

 

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Buttons, ExtCtrls,MatFu;

 

type

TForm1 = class(TForm)

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Memo1: TMemo;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

RadioGroup1: TRadioGroup;

procedure FormCreate(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

Type

fun = function(x:extended):extended; // Объявление типа функция

var

Form1: TForm1;

 

implementation

 

{$R *.DFM}

 

procedure TForm1.FormCreate(Sender: TObject);

begin

Edit1.Text:='0';

Edit2.Text:='3';

Edit3.Text:='0,3';

Memo1.Clear;

RadioGroup1.ItemIndex:=0;

end;

 

procedure Tabl(f:fun;xn,xk,h:extended); // Расчет таблицы

var x,y: extended;

begin

x:=xn;

repeat

y:=f(x);

Form1.Memo1.Lines.Add('x='+FloatToStrf(x,fffixed,8,3)+

' y='+FloatToStrf(y,fffixed,8,3));

x:=x+h;

until (x>xk);

end;

 

procedure TForm1.BitBtn1Click(Sender: TObject);

var xn,xk,h : extended;

begin

xn:=StrToFloat(Edit1.Text); // Начальное занчение интервала

xk:=StrToFloat(Edit2.Text); // Конечное значение интервала

h:=StrToFloat(Edit3.Text); // Шаг расчета

case RadioGroup1.ItemIndex of // Выбор функции

0 : Tabl(tg,xn,xk,h);

1 : Tabl(ch,xn,xk,h);

2 : Tabl(sin2,xn,xk,h);

end;

end;

end.

7.4. Выполнение индивидуального задания

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









Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2018 zdamsam.ru Размещенные материалы защищены законодательством РФ.