Процедури і функції

Часто, працюючи над програмою, програміст зауважує, що деяка послідовність інструкцій зустрічається в різних частинах програми кілька разів. Наприклад, в лістингу 6.1 приведена програма перерахунку ваги з фунтів в кілограми. Зверніть увагу, що інструкції, що забезпечують введення вихідних даних з полів редагування, розрахунок і виведення результату (в лістингу вони виділені фоном), є як в процедурі обробки події на кнопці Обчислити, так і в процедурі обробки події OnKeyPress В поле Editl.

Лістинг 6.1. Перерахунок ваги з фунтів в кілограми

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants,

Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = Class (TForm)
Label1: TLabel; // пояснювальний текст
Edit1: TEdit; // поле введення ваги у фунтах
Button1: TButton; // кнопка Обчислити
Label2: TLabel; // поле виведення результату
procedure ButtonlClick (Sender: TObject);
procedure EditlKeyPress (Sender: TObject;

var Key: Char); private
{Private declarations} public
{ Public declarations}
end;
var
Form1: TForm1;
implementation
{$ R * .dfm}
// клацання на кнопці Обчислити
procedure TForml.Button1Click (Sender: TObject);
var
f : Real; // вагу в фунтах
kg: real; // вагу в кілограмах

begin
f : = StrToFloat (Edit1.Text);
kg : = F; * 0.4059;
Label2.Caption : = Edit1.Text + 'ф. - це '+
FloatToStrF (kg, ffGeneral, 4, 2} + 'кг.'; end;
// натискання клавіші в поле введення вихідних даних
procedure TForml.Edit1KeyPress (Sender: TObject; var Key: Char);
var
f : Real; // вагу в фунтах kg: real; // вагу в кілограмах

begin
if Key = Char (VK_RETURN) then

begin
f: =. StrToFloat (Editl.Text);
kg : = F * 0.4059;
Label2.Caption : = Editl.Text + 'ф. - це '+
FloatToStrF (kg, ffGeneral, 4, 2) + 'кг.' 1 .; 

end;

end;
end.

Можна уникнути дублювання коду в програмі. Для цього треба оформити інструкції, які зустрічаються в програмі кілька разів, як подпро граму, і замінити інструкції, оформлені у вигляді підпрограми, інструкцією виклику підпрограми.
У лістингу 6.2 приведена програма перерахунку ваги з фунтів в кілограми, в якій введення вихідних даних, обчислення і відображення результату об’єднані в підпрограму, реалізовану як функція.

Лістинг 6.2. перерахунок ваги з фунтів в кілограми (використання процедури)

unit Onit1; interface
uses
Windows, Messages, SysUtils, Variants,

Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class (TForm)
Label1: TLabel; // пояснювальний текст
Edit1: TEdit; // поле введення ваги у фунтах
Button1: TButton; // кнопка Обчислити
Label2: TLabel; // поле вивела результату
procedure Button1Click (Sender: TObject);
procedure EditlKeyPress (Sender: TObject;

var Key: Char); private
{Private declarations} public
{Public declarations} end;
var
Form1: TForm1;
implementation
{$ R * .dfm}
// процедура програміста

procedure FuntToKg;
var
f : Real; // вагу в фунтах
kg : Real; // вагу в кілограмах

begin
f : = StrToFloat (Form1.Edit1.Text);
kg : = F * 0.4059;
Forml.Label2.Caption : = Forml.Edit1.Text + 'ф. - це '+
FloatToStrF (kg, ffGeneral, 4, 2) + 'кг.';

end;
// клацання на кнопці Обчислити
procedure TForml.ButtonlClick (Sender: TObject);
begin
FuntToKg; // виклик процедури FuntToKg end;
// натискання клавіші в поле введення вихідних даних
procedure TForm1.EditlKeyPress (Sender: TObject;

var Key: Char);
begin
if Key = Char (VK_RETURN)
then FuntToKg; // виклик процедури FuntToKg end;
end.

Переваги використання підпрограм очевидні. По-перше, в програмі немає дублювання коду, що скорочує трудомісткість створення програми, робить більш зручним процес налагодження та внесення змін. Уявіть, що потрібно змінити пояснювальний текст, що виводиться програмою перерахунку ваги з фунтів в кілограми. У програмі, що не використовує підпрограму, потрібно переглянути весь текст і зробити необхідні зміни. якщо програма використовує підпрограму, то зміни треба внести тільки в текст підпрограми. По-друге, значно підвищується надійність програми. Слід звернути увагу, що підпрограми використовують не тільки тоді, коли потрібно уникнути дублювання коду. Зручно велике завдання розділити на кілька підзадач і оформити кожну завдання як підпрограму. У цьому випадку значно поліпшується ” читаність” програми і, як наслідок, істотно полегшується процес налагодження.

Підпрограма – це невелика програма, яка вирішує частину спільного завдання. У мові Delphi є два види підпрограм – процедура і функція.

У кожної підпрограми є ім’я, яке використовується в програмі для виклику підпрограми (процедури).
Відмінність функції від процедури полягає в тому, що з ім’ям функції пов’язано значення, тому функцію можна використовувати в якості операнда вирази, наприклад, інструкції присвоювання.
Як правило, підпрограма має параметри. Розрізняють формальні і фактичні параметри.
Параметри, які вказуються в оголошенні функції, називаються формальними. Параметри, які вказуються в інструкції виклику процедури, називаються фактичними.
Параметри використовуються:

  • для передачі даних в підпрограму;
  • для отримання з результату підпрограми.

У загальному випадку в якості фактичного параметра процедури можна використовувати вираз, тип якого повинен збігатися з типом відповідного формального параметра.