Как сделать функцию в паскале

Добавил пользователь Дмитрий К.
Обновлено: 05.10.2024

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

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

  1. сделать основную программу более наглядной и компактной;
  2. уменьшить объем используемой памяти ЭВМ;
  3. сократить время написания и отладки программы, т.к. различные подпрограммы могут быть написаны различными людьми параллельно.

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

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

Структура подпрограмм

Структура подпрограмм почти в точности повторяет структуру всей Pascal-программы.

При описании подпрограммы в общем случае необходимо задать три основные компоненты:

  • интерфейс подпрограммы, т.е. информацию, необходимую для ее вызова;
  • локальный контекст подпрограммы – совокупность описаний рабочих объектов, с которыми осуществляются действия;
  • сами действия (операторы), составляющие смысл подпрограммы.

Интерфейс подпрограммы содержится в заголовке и говорит о том, что именно делает подпрограмма.

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

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

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

Процедуры служат для задания последовательности действий и определения новых значений переменных в программе. Вызов процедуры играет роль оператора.

Описание процедур и функций. Формальные параметры

Описание процедур и функций в общем виде:

123

Тело подпрограммы – это блок, состоящий из двух частей: описание объектов и группа операторов. Более полный общий вид процедуры (общий вид функции отличается только заголовком):

Здесь — имя процедуры.

Раздел описаний, как и в основной программе, может включать разделы Label, Const, Type, Var и раздел процедур и функций.

Если в качестве параметров используется массив, то предварительно нужно описать имя типа массива в разделе Type, а затем использовать это имя при описании массива в качестве формального параметра.

Параметры процедур бывают двух типов:

  • параметры-значения (входныепараметры или параметры, передаваемые по значению);
  • параметры-переменные (выходныепараметры). Эти параметры используются для передачи некоторых значений, вычисленных в подпрограмме, обратно в программу.

Описание входных параметров процедуры в списке формальных параметров имеет также вид:

Список переменных1: тип1; список переменных2: тип2;

Соответственно описание выходных параметров выглядит следующим образом:

Var Список переменных1: тип1; Var список переменных2: тип2;

Вызов процедуры в основной программе имеет следующий вид:

(список фактических параметров);

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

  • количество фактических и формальных параметров должно быть одинаковым:
  • соответствующие фактические и формальные параметры должны совпадать по порядку следования и по типу.

Имена соответствующих фактических и формальных параметров могут быть одинаковыми или разными.

Другой вид подпрограммы в языке Турбо-Паскаль – функция – оформляется аналогично процедуре и отличается от нее по структуре только заголовком, общий вид которого выглядит следующим образом:

Function (список формальных параметров): тип;

Функции имеют несколько отличительных особенностей:

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

Область действия имен

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

Переменные, описанные в подпрограмме, действуют только в теле данной подпрограммы и в любой, объявляемой внутри нее, подпрограмме. Такие переменные называются локальными. Они недоступны для операторов основной программы и др. подпрограмм.

Наглядно схему программы, имеющей некоторые вложенные подпрограммы, можно представить следующим образом:

123

При написании программ, имеющих вложенные подпрограммы, необходимо соблюдать следующие правила:

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

Подпрограмма – это группа операторов, оформленная как самостоятельная программная единица.

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

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

В языке Турбо Паскаль подпрограммы реализуются в виде процедур и функций

Процедуры

Для использования процедуры в программе необходимы:

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

Вызов процедуры приводит к выполнению операторов, составляющих тело процедуры.

Описание процедуры

Процедура в Турбо Паскале имеет структуру, подобную структуре программы.

Структура описания процедуры имеет следующий вид:

Таким образом, процедура состоит из:

  • заголовка;
  • раздела описаний;
  • раздела операторов.

Заголовок процедуры в отличие от заголовка программы не может быть опущен.

Формат заголовка

где 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.

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

Внимание: выражение вызова функции можно использовать в описании самой функции. В этом случае она будет выполняться рекурсивно.

Читайте также: