фывфыв. Практикум по дисциплине Разработка приложений в визуальных средах для студентов специальностей
Скачать 1.39 Mb.
|
ЛАБОРАТОРНАЯ РАБОТА 7Разработка приложения с использованием подпрограмм и модулейЦель лабораторной работы:изучить возможности Delphi для написания подпрограмм и создания модулей. Составить и отладить программу, использующую внешний модуль Unit с подпрограммой. 1. Краткие сведения1.1. Общие сведения Подпрограмма - это именованная, определенным образом оформленная группа операторов, которая может бить вызвана любое количество раз из любой точки основной программы. Подпрограммы используется в том случае, когда одна и та же, последовательность операторов в тексте программы повторяется несколько раз. Этa последовательность заменяется вызовом подпрограммы, содержащей необходимые операторы. Подпрограммы также применяются для создания специализированных библиотечных модулей, содержащих набор подпрограмм определенного назначения, для использования их другими программистами. Подпрограммы подразделяются на процедуры и функции. Процедура имеет следующую структуру: Procedure <имя процедуры> ([список формальных параметров]); Const [описание используемых констант]; Type [описание используемых типов]; Var [описание используемых переменных]; begin <операторы> end; Процедуры и функции могут быть использованы в качестве формальных параметров подпрограмм. Для этого определяется тип: Type <имя>= function ([список формальных параметров] ):<тип результата>; или Type <имя>= procedure ([список формальных параметров]); Имя процедуры или функции должно быть уникальным в пределах программы. Список формальных параметров необязателен и может отсутствовать. Если же он есть, то в нем перечисляются через точку с запятой имена формальных параметров и их типы. Имеется три вида формальных параметров параметры-значения, параметры-переменные, параметры-константы. При вызове подпрограммы передача данных для этих видов осуществляются по-разному. Параметры-значения копируются, и подпрограмма работает с их копией, поэтому при вызове на месте такого параметра можно ставить арифметическое выражение. При использовании параметров-переменных (в описании перед ними ставится Var) и параметров-констант в подпрограмму передается адрес, и она работает с самой переменной. С помощью параметров-переменных подпрограмма передает результаты своей работы вызывающей программе. В функциях используется специальная переменная Result, интерпретируемая как значение, которое вернет в основную программу по окончании работы функции. В язык Object Pascal встроен ряд наиболее часто употребляемых процедур и функций, которые являются частью языка и вызываются без предварительного определения в разделе описаний. 1.2. Использование модулей Модуль - автономно компилируемая программная единица, включающая в себя процедуры, функции, а также различные компоненты раздела описаний. Структура модуля содержит следующие основные части: заголовок, интерфейсная часть, исполняемая, инициирующая и завершающая. Заголовок состоит из зарезервированного слова Unit и следующего за ним имени модуля, которое должно совпадать с именем дискового файла. Использование имени модуля в разделе Uses основной программы приводит к установлению связи модуля с основной программой. Интерфейсная часть расположена между зарезервированными словами Interface и Implementation и содержит объявление тех объектов модуля, которые должны быть доступны другим программам. Исполняемая часть начинается зарезервированным словом implementation и содержит описание процедур и функций, объявленных в интерфейсной части. Она может также содержать вспомогательные типы, константы, переменные, процедуры и функции которые, будут использоваться только в исполняемой части и не будут доступны внешним программам. Инициирующая часть начинается зарезервированным словом Initialization и содержит операторы, которые исполняются до передачи управления основной программе. Завершающая часть начинается зарезервированным словом Finalization и выполняется в момент окончания работы программы. Инициализирующая и завершающая части модуля используются крайне редко. 1.3. Пример выполнения задания Задание: написать программу вывода на экран таблицы функции, которую, оформить в виде процедуры. В качестве функции использовать по выбору Tg(x), Ch(x) и Sin(x). Создание модуля Создавая модуль, следует обратить внимание на то, что он не должен иметь своей формы. Система Delphi при начальной загрузке автоматически создает шаблон программы, имеющий в своем составе форму, файл проекта и т.д. Так как модуль состоит только из одного файла, то необходимо перед его созданием уничтожить заготовку файла проекта и форму. Для этого в меню File выбрать Close All, файл проекта не сохранять. Для создания модуля в меню File выбрать File New, и затем в репозитории – пиктограмму . В результате будет создан файл с заголовком Unit Unit1. Имя модуля можно сменить на другое, отвечающее внутреннему содержанию модуля, например Unit MatFunc. Затем необходимо сохранить файл с именем, совпадающим с именем заголовка модуля: MatFunc.pas. Следует обратить внимание на то, что имя файла должно совпадать с именем модуля, иначе Delphi не сможет подключить его к другой программе. Подключение модуля Для того чтобы подключить модуль к проекту необходимо в меню Project выбрать опцию Add to Project... и выбрать файл, содержащий модуль. После этого в разделе Uses добавить имя подключаемого модуля - MatFunc. Теперь в проекте можно использовать функции, содержащиеся в модуле. Форма приложения приведена на рисунке 7.1. Рисунок 7.1 – Форма приложения Тексты модуля: Unit MatFunc; Interface Function Tg(x: extended) : extended; //Функция для вычисления тангенса Function Ch(x: extended) : extended; //Функция для вычисления гиперболического //синуса Function Sin2(x: extended) : extended;//Функция для вычисления квадрата синуса Implementation Function Tg(x: extended) : extended; begin Result := sin(x)/cos(x); end; Function Ch(x: extended) : extended; begin Result := (exp(x)-exp(-x))/2; end; Function Sin2(x: extended) : extended; begin Result := sqr(sin(x)); end; end. Текст вызывающей программы: Unit LabRab_7; Interface Uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, MatFunc; type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Memo1: TMemo; Button1: TButton; Button2: TButton; RadioGroup1: TRadioGroup; Procedure FormCreate(Sender: TObject); Procedure Button1Click(Sender: TObject); Procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; type func = function(x:extended) : extended; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin Edit1.Text := '0'; Edit2.Text := '2'; Edit3.Text := '0.2'; Memo1.Clear; RadioGroup1.ItemIndex := 0; end; procedure Tabl(f: func; xn, xk, h: extended); var x, y : extended; begin x := xn; Repeat y := f(x); Form1.Memo1.Lines.Add('x=' + FloatToStrF(x,ffFixed, 8, 2) + ' y=' + FloatToStrF(y, ffFixed, 8, 2)); x := x + h; Until (x > xk); end; procedure TForm1.Button1Click(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); end; end; procedure TForm1.Button2Click(Sender: TObject); begin Halt; //Завершение приложения end; end. |