Пример 3 оформить в виде процедуры подпрограммы

Обновлено: 05.05.2024

В различных примерах программ мы обращали ваше внимание на повторяющийся код, который значительно увеличивал объем этих программ. Для оптимизации программного кода, чтобы сделать его более понятным и удобным для восприятия, используются подпрограммы. Подпрограмма (англ. subroutine) позволяет вынести часть реализации (некоторую вполне самостоятельную подзадачу или алгоритм) за пределы основной программы и обращаться к ней, по мере необходимости, по имени, из любой части программы. Таким образом, можно не только сократить программный код, но и сделать его более структурированным.
Существует две разновидности подпрограмм: процедуры и функции. Но это деление чисто условное. В C++ между функциями и процедурами нет больших синтаксических различий, поэтому они имеют общее наименование – функции. Функция может принимать аргументы (не обязательно) и возвращать некоторое значение, возможно пустое ( void ). Если функция не возвращает никакого значения, то такая функция называется процедурой. В отличие от процедур, функции всегда возвращают результат в точку вызова.
Для того, чтобы использовать функцию в программе её нужно объявить, определить и вызвать по имени.

Объявление функции. Прототип

Определение функции

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

Если функция не имеет параметров (т. е. данные в функцию не принимаются из-вне), то круглые скобки остаются пустыми.
Тело функции содержит реализацию алгоритма подпрограммы, которая подчиняется общим синтаксическим правилам языка. Например, можно определять переменные фундаментальных и абстрактных типов, осуществлять вызовы библиотечных функций, обращаться к глобальным объектам, которые определены или объявлены вне данной функции, создавать локальные функции и использовать при составлении алгоритма любые операции и инструкции языка. Локальные объекты, которые определены в блоке функции, вне её – не видны.
Составим определение функции line() . Параметры этой функции – x и y , целочисленные переменные, с помощью которых устанавливаются длина линий и их количество. Чтобы в программе не было путаницы с именами, принято (но не запрещено!) чтобы имена параметров и других переменных функции не совпадали с именами переменных в основной программе или именами глобальных объектов.
Определение нашей функции может быть составлено следующим образом:

Вызов функции

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

Процедуры

Тип функции описанной в программе 9.2.1 – это процедура. Процедура производит определенные действия в программе, но не возвращает никакого значения. Вызов процедуры можно включать в программу отдельной инструкцией в основной программе, в ветвях условной инструкции, в теле цикла, а также в других функциях.
В программе 9.1.11, которую мы написали на предыдущем уроке, содержался многократно повторяющийся код рисования треугольника:

Создадим на основе данного кода процедуру рисования равностороннего треугольника и заливку его определенным цветом. Тогда программу 9.1.11 можно переписать следующим образом:

Наша программа сократилась на 14 строк! Обратите внимание, что аргументами функции могут быть не только переменные, но и константы. Так, в этой программе, значение цвета передается строковым литералом.

Инструкция return

Подпрограмма называется функцией, если она возвращает определенное значение в точку вызова. Из этого следует, что функция должна быть операндом выражения, в которое она возвращает своё значение. Например, выражение с присваиванием возвращаемого значения функции переменной:

или возвращение значения функции при вызове другой функции (т. е. использование функции в качестве аргумента):

Чтобы функция смогла возвращать какое-либо значение, полученное в процессе её работы, используется инструкция return . Эта инструкция завершает работу функции и возвращает её значение выражением, которое следует за ключевым словом return . В теле функции должна быть только одна такая инструкция. Допускается использование нескольких инструкций return , но только в том случае, если они находятся в ветвях условной инструкции.
Помимо наличия инструкции return , функцию от процедуры отличает ещё и то, что перед именем в прототипе и в заголовке функции вместо void указан спецификатор типа возвращаемого значения. Тип возвращаемого значения может быть любым, в том числе абстрактным.
Задача 2. Составить программу вычисляющую среднее арифметическое и среднее геометрическое двух введенных чисел a и b . Вычисление среднего арифметического и среднего геометрического оформить в виде функций.

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

Локальные и глобальные переменные. Передача аргументов

Ранее мы упоминали, что блок функции определяет область видимости данных. Что это значит? Приведем пример:

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

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

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

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

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

Процедуры

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

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

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

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

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

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

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

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

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

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

где Procedure – зарезервированное слово;

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

Здесь SUMMA имя процедуры, a,b,i,n формальные параметры процедуры.

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

Вызов процедуры

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

где – имя процедуры, к которой происходит обращение;

– перечень конкретных значений (выражений) и имен, подставляемых на место формальных параметров процедуры при ее выполнении.

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

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

Формальные параметры – это параметры, определяющие тип и место подстановки реальных объектов при вызове процедуры.

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

ЗАДАЧА 1. Ввести с клавиатуры 15 вещественных чисел в массив и найти сумму этих чисел с помощью процедуры.

ЗАДАЧА 2. Найти наибольший элемент массива и определить его номер. Количество элементов массива и их значения ввести с клавиатуры. Оформить ввод данных, поиск наибольшего элемент массива и определение его номера с помощью процедур.

Функции

Подпрограмма-функция предназначена для вычисления одного параметра. У функции два основных отличия от процедуры:

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

Второе отличие в том, что процедура может иметь несколько выходных параметров-результатов, а функция только одно значение, передаваемое через ее имя. Именно этим объясняется то, что в теле функции хотя бы один раз имени функции должно присваиваться вычисленное значение.

Структура функции такая же, как и структура процедуры.

Заголовок функции имеет вид:

Function – служебное слово;

– имя функции, определяемое в соответствии с общими правилами построения идентификаторов;

– перечень имен для обозначения исходных данных и результатов работы процедуры с указанием их типов.

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

ЗАДАЧА 3. Ввести с клавиатуры 15 вещественных чисел в массив и найти сумму этих чисел с помощью функции.

Выдать задание на листочках ( Приложение 1 ). Найти повторы.

Иногда в разных местах программы приходится выполнять практически одни и те же последовательности действий с разными исходными данными. Такие последовательности действий можно оформить в виде так называемых подпрограмм (от англ, subroutine) – сгруппировать операторы в блок, к которому можно обратиться по имени, причем неоднократно.

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

Подпрограммы делятся на процедуры и функции.

Встроенные (стандартные) процедуры и функции являются частью языка и могут вызываться по имени без предварительного описания. Например, abs, sqrt, ln, sin…- функции (возвращают результат), readln, write… – процедуры (не возвращают результат). Их наличие существенно облегчает разработку прикладных программ. Однако в большинстве случаев некоторые специфичные для данной программы действия не находят прямых аналогов в библиотеках Turbo Pascal, и тогда программисту приходится разрабатывать свои нестандартные процедуры и функции.

III. Объяснение нового материала

Процедуры пользователя пишутся самим программистом в соответствии с синтаксисом языка в разделе описания подпрограмм.

Структура процедуры повторяет структуру программы, это "программа в миниатюре" — она также представлена заголовком и телом.

Заголовок состоит из зарезервированного слова procedure, идентификатора (имени) процедуры.

VAR … // раздел описания переменных главной программы

//тело главной программы

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

Пример 1. Программа вычисления площади и периметра.

Открыть в Паскале файл ( Приложение 2 ). Оформим повторяющуюся часть программы в виде процедуры (программа внутри главной программы).

write('Введите стороны a, b: ');

Вызов в нужном месте:

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

Т.е. мы “научили” ПК новой команде tx. Ею можно пользоваться только в этой программе и, причем, много раз. ( Приложение 3 )

Достоинства подпрограмм:

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

Пример 2. Пользователь вводит две стороны трех прямоугольников. Вывести их площади.

Можно решить задачу так:

writeln(‘Введите a и b:’);

Хорошим стилем программирования считается использование процедур. Необходима процедура, которая будет вычислять площадь прямоугольника. Вот как схематично будет выглядеть главная программа:


текст

Процедура текста уже есть (см пример1). Создадим вторую процедуру, которая вычисляет площадь. Но для того чтобы вычислить S, надо знать 2 стороны, поэтому процедуре надо показать какие стороны она должна перемножать.


procedure pl (c,d: integer);

writeln(‘площадь прямоугольника со сторонами ’,c, ‘ ‘ ,d, ‘=‘,S);

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

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


pl(4,5);

Фактические параметры должны совпадать по типу и количеству с формальными.

Итак, главная программа:

Замечание. При решении этой задачи необходимо проверять введенные пользователем числа (они не должны быть отрицательными, иначе работа программы прервется).

Составим процедуру проверки:

procedure error (f,g:integer);

Итак формат процедуры:

Procedure (формальные параметры);

Пример 3. Составить программу обмена местами двух чисел с=5 и d=7.

procedure obmen ( a,b:integer);

writeln ('Введите 2 числа: ');

После запуска программы видно, что поменялись местами формальные параметры (в процедуре), а фактические (которые используются в лавной программе) – не поменялись. Рассмотрим рисунок, на котором приведена часть оперативной памяти:

1) при вызове процедуры obmen с двумя параметрами 5 и 7, в переменные a и b помещаются тоже числа 5 и 7 соответственно:


2) далее в процедуре осуществляется перестановка значений ячеек памяти a и b:


3) но в переменных c и d данные не поменялись, т.к. они находятся в других ячейках памяти.

Для того чтобы переменные c и d, a и b ссылались на одни и те же ячейки памяти (если изменятся значения a и b, то изменятся значения и c, d) необходимо при описании формальных параметров, перед нужными переменными добавить слово VAR:

procedure obmen (var a,b:integer);


Измените программу obmenDan:

ошибка из-за var. Числа – константы, которые нельзя изменять в процедуре.

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

procedure circle (r:real);

Процедура должна возвращать результат:

procedure circle (r:real; var S:real);


readln(a, e);

Замечание: Переменная в процедуре S используется для возвращения результатов работы процедуры в основную программу. При ее изменении, изменяется и фактический параметр в вызывающей программе, т.е. переменная e.

Чаще для этого в Паскале вместо процедур используют функции (подпрограммы, которые что-то возвращают).

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

Например, sqr(x) – возведет в квадрат значение х и возвратит в точку вызова вычисленное значение квадрата числа х: y:=sqr(x);

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

Function (формальные параметры) : ;


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

Пример 5. Переделаем задачу о площади круга.

function circle (r:real): real;

a:=circle(5); (ОБЯЗАТЕЛЬНО присваиваем)

Пример 6. Найти 1!+2!+…+n!

Используем функцию нахождения факториала, т.к подаем на вход и получаем результат.

function fact (a:integer): integer;

В строке fact:=fact*I;

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

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

Вся программа условно может быть разделена на две части: основную и вспомогательную. В основной части производится простейшая обработка информации, организуется обращение к разным вспомогательным модулям (подпрограммам) .

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

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

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

Подпрограмма с параметрами используется для записи многократно повторяющихся действий при разных исходных данных. Подпрограммы с параметрами можно разделить на два типа: подпрограммы-функции и просто подпрограммы с параметрами (их называют процедурами).

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

1) каждая подпрограмма имеет свое имя и список формальных параметров;

2) процедура из основной программы вызывается командой вызова, которая по форме ничем не отличается от вызова команды исполнителя. Результат присваивается одной или нескольким переменным, которые находятся в списке формальных параметров. Но результатом могут быть, конечно, не только значения переменных, но какое либо действие, выполненное ЭВМ.

Пример 1. Используем алгоритм нахождения наибольшего общего делителя двух натуральных чисел в качестве вспомогательного при решении задачи: составить программу вычитания дробей ( a , b , c , d — натуральные числа). Результат представить в виде обыкновенной несократимой дроби.

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

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

По способу передачи фактических значений в подпрограмму в Turbo Pascal 7.0 выделяют параметры-переменные , параметры-значения , параметры-константы и массивы открытого типа , строки открытого типа , параметры-процедуры , параметры-функции (подробности — в литературе).

Функция (в отличие от процедуры) всегда возвращает единственное значение.

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

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

Вызов функции будет следующим:

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

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

Пример 2. Дано натуральное число n . Переставить местами первую и последнюю цифры этого числа.

Можно заметить, что необходимо детализировать логическую функцию Impossible, которая диагностирует, возможна ли перестановка, и процедуру Change, которая эту перестановку (в случае, если она возможна) выполняет.

Здесь необходимо детализировать функцию Number, возвращающую количество цифр в записи натурального числа (т.к. функция Impossible содержит ее вызов, то в разделе описаний функция Number должна ей предшествовать).

Наконец, последняя процедура.

Возможны также подпрограммы, которые вызывают сами себя. Они называются рекурсивными . Создание таких подпрограмм является красивым приемом программирования, но не всегда целесообразно из-за чрезмерного расхода памяти ЭВМ.

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

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

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

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

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

Заголовок процедуры представляет собой:

PROCEDURE ( );

Где PROCEDURE – служебное слово,

ИМЯ – имя процедуры,

СПИСОК ПАРАМЕТРОВ - перечень имен для обозначения исходных данных и результатов работы процедуры с указанием их типов. Параметры, перечисленные в списке, называются формальными . Допускается описание процедуры, несодержащей формальных параметров:

PROCEDURE ;

Содержательная часть процедуры представляет собой блок и состоит, следовательно, из раздела описаний (меток, констант, типов, переменных, процедур, и функций) и раздела операторов, представляющего собой составной оператор BEGIN END . Заканчивается блок процедуры точкой с запятой.

Оформить в виде процедуры алгоритм вычисления степени y=x n c натуральным показателем n .

PROCEDURE STEP1 (N:INTEGER;X:REAL;VAR Y:REAL;)

VAR I:INTEGER;

FOR I:=1 TO N DO

В заголовке процедуры с именем STEP 1 перечислены параметры X , N , определяющие исходные данные процедуры, и параметр Y , обозначающий значение исходной степени – результат выполнения процедуры. Указан также тип всех формальных параметров.

Если в заголовке процедуры параметры указаны без слова VAR , то это параметры-значения. Параметры-значения могут изменяться внутри процедуры, но для внешней программы это изменение окажется незамеченным.

Для получения результатов в основной программе используются параметры-переменные. Эти параметры перечисляются после служебного слова VAR с обязательным указанием типа.

Тело процедуры состоит:

1) Из описательной части, где определена переменная I , необходимая и имеющая смысл только внутри данной процедуры и называемая локальной переменной (значение локальной переменной недоступно в основной программе);

2) Из составного оператора BEGIN-END, реализующего алгоритм вычисления степени действительного числа с натуральным показателем.

Это то же вычисление оформим в виде процедуры без параметров:

PROCEDURE STEP2;

VAR I:INTEGER;

FOR I:=1 TON DO Y:=Y*X;

В этом случае процедура STEP 2 не содержит списка формальных параметров и работает с локальной переменной I , описанной в блоке процедуры, и переменными X , N , Y называются глобальными по отношению к процедуре STEP 2 . Значение глобальных переменных доступны и могут быть использованы в любой точке основной программы (в частности, внутри данной процедуры).

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

Описание функции аналогично описанию процедуры и состоит из заголовка и блока. Заголовок функции имеет вид:

FUNCTION ( ): ;

Где FUNCTION – служебное слово,

ИМЯ – имя функции,

СПИСОК ПАРАМЕТРОВ – перечень формальных параметров (исходных

данных) с указанием их типов,

ТИП – тип результата: значение, которое должно приобретать имя функции.

Допускается описание функции без параметров:

FUNCTION : ;

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

Оформить в виде функции алгоритм вычисления степени Y=X n :

FUNCTION STEP3 (N:INTEGER; X:REAL) : REAL;

VAR I:INTEGER;

FOR I:=1 TO N DO

Y := Y * X ;

STEP 3:= Y

В заголовке функции с именем STEP 3 перечислены параметры N , X , определяющие ее исходные данные. Результат выполнения функции (значение локальной переменной Y ) присваивается ее имени STEP 3 . Тип результата (тип функции) – REAL , который указывается в заголовке функции при ее описании. Введение локальной переменной Y не обязательно, но придает описанию функции более наглядный вид.

1.3 Обращение к подпрограммам.

Описание процедуры (или функции), расположенное в разделе описаний, само по себе никакого действия не вызывает. Чтобы исполнить процедуру (или функцию), необходимо в нужном месте программы поместить обращение к ней. Обращение к процедуре производится с помощью оператора процедуры, имеющего вид:

Где ИМЯ – имя процедуры, к которой происходит обращение,

СПИСОК АРГУМЕНТОВ – перечень конкретных значений (выражений) и имен, подставляемых на место формальных параметров процедуры при ее выполнении.

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

Cоставить программу вычисления степени Z=A n , где n – целое число и A<>0. Степень с целым показателем определяется следующим образом:

Учитывая, что 1/A n = (1/A) n и используя процедуру STEP 1, описанную в пункте 1.1, составим алгоритм рис.1 а), б) и программу.

PROGRAM STEP4;

VAR M:INTEGER;

A , Z : REAL ;

PROCEDURE STEP1 (N:INTEGER;X:REAL;VAR Y:REAL);

VAR I:INTEGER;

IF M=0 THEN Z:=1

WRITELN(A:8:3,’ В степени ’,M:3,’ равно ’,Z)

В программе оператор процедуры использован дважды, и каждый раз он вызывает из описательной части программы процедуру STEP 1 . В теле процедуры произойдет замена формальных параметров N , X , Y на фактические M , A , Z первый раз и на M ,1/ A , Z второй раз. Затем выполняется совокупность действий, предусмотренных операторами процедуры, и в программу будет возвращен результат Z . Возврат осуществляется к оператору программы STEP 4 , следующему за оператором вызова процедуры. Очень важно понимать суть и механизм замены формальных параметров фактическими.

Формальные параметры – это переменные, фиктивно (формально) присутствующие в процедуре и определяющие тип и место подстановки фактических параметров.

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

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

Обращение к функции осуществляется аналогично обращению к стандартным функциям (sin , cos , tan и т.д.) и является разновидностью операнда в выражениях в отличие от вызова процедуры, являющегося разновидностью оператора. В этом месте выражения, где это необходимо, записывается имя функции, вслед за которым в скобках перечисляются фактические параметры. Если вызывается функция без параметров, то указывается только ее имя.

Составить программу вычисления

используя функцию STEP 3, описанную в п. 1.2., (A действительное, n - целое).

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