Часто, працюючи над програмою, програміст зауважує, що деяка послідовність інструкцій зустрічається в різних частинах програми кілька разів. Наприклад, в лістингу 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 є два види підпрограм – процедура і функція.
У кожної підпрограми є ім’я, яке використовується в програмі для виклику підпрограми (процедури).
Відмінність функції від процедури полягає в тому, що з ім’ям функції пов’язано значення, тому функцію можна використовувати в якості операнда вирази, наприклад, інструкції присвоювання.
Як правило, підпрограма має параметри. Розрізняють формальні і фактичні параметри.
Параметри, які вказуються в оголошенні функції, називаються формальними. Параметри, які вказуються в інструкції виклику процедури, називаються фактичними.
Параметри використовуються:
- для передачі даних в підпрограму;
- для отримання з результату підпрограми.
У загальному випадку в якості фактичного параметра процедури можна використовувати вираз, тип якого повинен збігатися з типом відповідного формального параметра.