Как сделать функцию в паскале
Понятие подпрограмма встречается во многих языках программирования, т.к. является основным средством структурирования языка. Очень часто в программах встречаются однотипные участки, которые выполняют одни и те же вычисления с различными данными. Такие части программ целесообразно выполнять с помощью подпрограмм.
Использование подпрограмм позволяет:
- сделать основную программу более наглядной и компактной;
- уменьшить объем используемой памяти ЭВМ;
- сократить время написания и отладки программы, т.к. различные подпрограммы могут быть написаны различными людьми параллельно.
Таким образом, подпрограмма – это часть операторов программы, выделенных в группу, оформленную в виде отдельной конструкции.
Вызов подпрограммы, т.е. выполнение действий, заданных в подпрограмме, может быть произведен в некоторой точке программы посредством указания имени этой подпрограммы.
Структура подпрограмм
Структура подпрограмм почти в точности повторяет структуру всей Pascal-программы.
При описании подпрограммы в общем случае необходимо задать три основные компоненты:
- интерфейс подпрограммы, т.е. информацию, необходимую для ее вызова;
- локальный контекст подпрограммы – совокупность описаний рабочих объектов, с которыми осуществляются действия;
- сами действия (операторы), составляющие смысл подпрограммы.
Интерфейс подпрограммы содержится в заголовке и говорит о том, что именно делает подпрограмма.
Две остальные компоненты называются телом подпрограммы и содержат информацию о том, как выполняется подпрограммой то, что описано в ее заголовке.
В языке Pascal выделяют два вида подпрограмм: процедуры и функции. Различия процедур и функций заключается в назначении и способе их использования.
Функции нужны для вычисления нового значения некоторого выражения, и вызов функции должен быть операндом в выражении.
Процедуры служат для задания последовательности действий и определения новых значений переменных в программе. Вызов процедуры играет роль оператора.
Описание процедур и функций. Формальные параметры
Описание процедур и функций в общем виде:
Тело подпрограммы – это блок, состоящий из двух частей: описание объектов и группа операторов. Более полный общий вид процедуры (общий вид функции отличается только заголовком):
Здесь — имя процедуры.
Раздел описаний, как и в основной программе, может включать разделы Label, Const, Type, Var и раздел процедур и функций.
Если в качестве параметров используется массив, то предварительно нужно описать имя типа массива в разделе Type, а затем использовать это имя при описании массива в качестве формального параметра.
Параметры процедур бывают двух типов:
- параметры-значения (входныепараметры или параметры, передаваемые по значению);
- параметры-переменные (выходныепараметры). Эти параметры используются для передачи некоторых значений, вычисленных в подпрограмме, обратно в программу.
Описание входных параметров процедуры в списке формальных параметров имеет также вид:
Список переменных1: тип1; список переменных2: тип2;
Соответственно описание выходных параметров выглядит следующим образом:
Var Список переменных1: тип1; Var список переменных2: тип2;
Вызов процедуры в основной программе имеет следующий вид:
(список фактических параметров);
Фактические параметры перечисляются через запятую, без указания их типа. Идентификаторы формальных параметров можно считать условными обозначениями в теле подпрограммы тех реальных, фактических параметров, с которыми будет вызвана подпрограмма. При этом должны выполняться требования:
- количество фактических и формальных параметров должно быть одинаковым:
- соответствующие фактические и формальные параметры должны совпадать по порядку следования и по типу.
Имена соответствующих фактических и формальных параметров могут быть одинаковыми или разными.
Другой вид подпрограммы в языке Турбо-Паскаль – функция – оформляется аналогично процедуре и отличается от нее по структуре только заголовком, общий вид которого выглядит следующим образом:
Function (список формальных параметров): тип;
Функции имеют несколько отличительных особенностей:
- Функция имеет только один результат выполнения (но может иметь несколько входных параметров, выходных параметров у функции нет).
- Результат обозначается именем функции. Поэтому в разделе операторов функции обязательно должен присутствовать оператор присваивания, в левой части которого стоит имя этой функции.
- Вызов функции в основной программе осуществляется непосредственно в выражениях по ее имени с указанием фактических параметров.
Область действия имен
Переменные, представленные в разделе описания основной программы, могут быть использованы в теле основной программы и в любой ее подпрограмме. Эти переменные называются глобальными.
Переменные, описанные в подпрограмме, действуют только в теле данной подпрограммы и в любой, объявляемой внутри нее, подпрограмме. Такие переменные называются локальными. Они недоступны для операторов основной программы и др. подпрограмм.
Наглядно схему программы, имеющей некоторые вложенные подпрограммы, можно представить следующим образом:
При написании программ, имеющих вложенные подпрограммы, необходимо соблюдать следующие правила:
Процедуры и функции являются важным инструментом большинства языков программирования. С их помощью можно часто встречающиеся фрагменты программы, одинаковые по выполняемым действиям, но различающиеся только значениями исходных данных, скомпоновать в группу операторов. Для эффективного программирования подобных повторений фрагментов в языках программирования введено понятие подпрограммы.
Подпрограмма – это группа операторов, оформленная как самостоятельная программная единица.
Подпрограмма записывается однократно в определенной части программы, а затем в нужных местах программы обеспечивается обращение к ней. При обращении к подпрограмме ей передаются исходные данные, а после выполнения операторов подпрограммы в основную программу передаются результаты расчетов.
Использование процедур и функций позволяет: сократить объем программы, улучшить структуру программы с точки зрения ее читаемости, уменьшить вероятность ошибок и облегчает процесс создания и отладки программы.
В языке Турбо Паскаль подпрограммы реализуются в виде процедур и функций
Процедуры
Для использования процедуры в программе необходимы:
Описание процедуры содержит информацию для компилятора об объектах, используемых в процедуре, а также алгоритм решения задачи процедурой.
Вызов процедуры приводит к выполнению операторов, составляющих тело процедуры.
Описание процедуры
Процедура в Турбо Паскале имеет структуру, подобную структуре программы.
Структура описания процедуры имеет следующий вид:
Таким образом, процедура состоит из:
- заголовка;
- раздела описаний;
- раздела операторов.
Заголовок процедуры в отличие от заголовка программы не может быть опущен.
Формат заголовка
где Procedure – зарезервированное слово;
имя – имя процедуры, определяемое в соответствии с общими правилами построения идентификаторов;
– перечень идентификаторов для обозначения исходных данных и результатов работы процедуры с указанием их типа.
Здесь SUMMA имя процедуры, a,b,i,n формальные параметры процедуры.
Раздел описаний процедуры содержит объявление меток, констант, типов переменных и внутренних процедур и функций, используемых в разделе операторов процедуры.
Вызов процедуры
Если процедура объявлена, то в программе ее можно использовать многократно, просто задавая ее имя и, если необходимо, список аргументов, т.е. вызов происходит с помощью оператора вызова:
где – имя процедуры, к которой происходит обращение;
– перечень конкретных значений (выражений) и имен, подставляемых на место формальных параметров процедуры при ее выполнении.
При описании подпрограмм и вызова их используются понятия формальных и фактических параметров.
Параметры, указываемые в заголовке процедуры при ее описании, называются формальными параметрами. Параметры, указываемые при вызове процедуры, называются фактическими параметрами.
Формальные параметры – это параметры, определяющие тип и место подстановки реальных объектов при вызове процедуры.
При вызове процедуры формальные параметры, указанные в ее заголовке, заменяются на фактические параметры в порядке их следования. Число и тип формальных и фактических параметров должен обязательно совпадать.
ЗАДАЧА 1. Ввести с клавиатуры 15 вещественных чисел в массив и найти сумму этих чисел с помощью процедуры.
ЗАДАЧА 2. Найти наибольший элемент массива и определить его номер. Количество элементов массива и их значения ввести с клавиатуры. Оформить ввод данных, поиск наибольшего элемент массива и определение его номера с помощью процедур.
Функции
Подпрограмма-функция предназначена для вычисления одного параметра. У функции два основных отличия от процедуры:
Первое отличие в заголовке. Он состоит из слова Function , за которым следует имя функции, затем в круглых скобках список формальных параметров, затем через двоеточие записывается тип функции, т.е. тип возвращаемого параметра. Функция может возвращать типы вещественные, порядковые и строковые.
Второе отличие в том, что процедура может иметь несколько выходных параметров-результатов, а функция только одно значение, передаваемое через ее имя. Именно этим объясняется то, что в теле функции хотя бы один раз имени функции должно присваиваться вычисленное значение.
Структура функции такая же, как и структура процедуры.
Заголовок функции имеет вид:
Function – служебное слово;
– имя функции, определяемое в соответствии с общими правилами построения идентификаторов;
– перечень имен для обозначения исходных данных и результатов работы процедуры с указанием их типов.
Для вызова функции из основной программы или другой подпрограммы следует в выражении, где необходимо использовать значение функции, указать имя функции со списком фактических параметров, которые должны совпадать по количеству и типам с формальными параметрами функции.
ЗАДАЧА 3. Ввести с клавиатуры 15 вещественных чисел в массив и найти сумму этих чисел с помощью функции.
где - идентификатор функции, не совпадающий с ключевыми словами и не содержащий пробелов и других специальных символов (кроме знака подчеркивания);
- список аргументов, с которыми работает функция, с указанием их типов;
- тип значения, возвращаемого функцией.
где - идентификатор процедуры (те же ограничения, что и для функции);
- список аргументов процедуры с указанием их типов (список параметров-значений);
var - имя параметра-переменной, т.е. той переменной, значение которой будет возвращено в точку вызова процедуры.
Функция, в отличии от процедуры, возвращает в точку вызова результат своей работы в виде значения и может быть операндом в выражении.
Описание функции пользователя в языке Паскаль состоит из заголовка и тела функции. Заголовок начинается ключевым словом function , после которого идет имя функции, список формальных параметров и тип возвращаемого значения:
- function имя(список формальных параметров): тип возвращаемого значения;
- раздел описаний
- begin
- операторы
- имя := выражение;
- end;
Отметим, что в разделе операторов должен быть хотя бы один, присваивающий вычисленное значение имени функции или переменной Result . Эта операция необходима для возвращения в точку вызова вычисленного значения:
1. Вычисленное значение присваивается имени функции:
- function Square (a: integer): integer;
- begin
- Square := a * a;
- end;
2. Используется специальная переменная Result , определенная внутри тела любой функции. В отличии от первого способа переменную Result можно использовать в выражениях, например:
- function MinMultMax (a, b, c: integer): integer;
- begin
- Result := Min(Min(a, b), c);
- Result := Result * Max(Max(a, b), c);
- end;
Внимание: если внутри функции не используется присваивание вычисленного значения имени функции или переменной Result , то функция возвращает в точку вызова непредсказуемое значение.
Выражение вызова функции
Для вызова пользовательской функции из основной программы на языке Паскаль используется выражение вызова функции , состоящее из имени функции и необязательного списка фактических параметров:
имя функции (список фактических параметров)
Фактические параметры должны соответствовать по типу и совпадать по количеству формальным параметрам. Таким образом, выражение вызова функции MinMultMax из примера выше может быть представлено следующим фрагментом программы:
- var n1, n2, n3: integer;
- begin
- readln(n1, n2, n3);
- writeln( MinMultMax (n1, n2, n3));
- end.
В случае отсутствия списка фактических параметров выражение вызова функции имеет следующий вид:
Внимание: выражение вызова функции можно использовать в описании самой функции. В этом случае она будет выполняться рекурсивно.
Читайте также: