Что такое Паскаль
Запись числовых констант, переменных и выражений.
Типы данных. Операции и функции над данными разных типов.
Структура программы
Операторы присваивания, ввода и вывода
Простейшие программы
Условный оператор
Операторы цикла.
Массивы
Процедуры и функции.
Строки.
Множества
Записи
Файлы |
Процедуры и функции.
Процедуры и функции в
Паскале (как и во многих других языках программирования) являются
удобным средством для однократного автономного описания тех фрагментов
алгоритма, которые повторяются в разных его частях. Такие описания
образуют раздел, который должен быть последним из числа разделов
описаний программы. Для выполнения описанных в этом разделе фрагментов
алгоритма в разделе операторов программы должны содержаться обращения к
соответствующим процедурам и функциям.
В некоторых языках программирования (например, Бейсик, Фортран) такие
автономные описания частей алгоритма называют подпрограммами.
Здесь этот термин будет использоваться для общего обозначения процедур и
функций.
Описание подпрограммы состоит из заголовка и блока. Заголовок процедуры
имеет вид:
Procedure <
имя > (<
список формальных параметров >);
Заголовок функции:
Function <
имя >(<
список формальных параметров >): < тип >;
Список формальных
параметров необязателен и может отсутствовать. Если же он есть, то в нем
должны быть перечислены имена формальных параметров и их тип. Несколько
однотипных параметров можно объединять в подсписки, например:
Procedure SB( a : Real; b,d : Integer; c : Char);
Операторы подпрограммы рассматривают список формальных параметров как
своеобразное расширение раздела описаний: все переменные из этого списка
могут использоваться внутри подпрограммы.
Обращение к подпрограммам осуществляется указанием имени подпрограммы и
списка фактических параметров, в качестве которых могут
выступать константы, переменные и выражения, отделяемые друг от друга
запятой. Количество и типы фактических параметров при обращении к
подпрограмме должны точно соответствовать количеству и типам ее
формальных параметров. В момент обращения к подпрограмме происходит
замена формальных параметров на фактические. Таким образом
осуществляется настройка алгоритма подпрограммы на конкретную задачу.
Само обращение к процедурам и функциям происходит по разному. Для
обращения к процедуре используется специальный оператор, состоящий из
имени процедуры и списка фактических параметров. Для обращения к функции
ее имя со списком фактических параметров должно войти как операнд в
некоторое выражение. Отсюда вытекает несколько отличий описания функции
от описания процедуры:
- в виде функции описывается алгоритм, результатом выполнения
которого является скалярная величина;
- в блоке функции должен быть хотя бы один оператор присваивания с
именем функции в левой части;
- в заголовке функции должен быть указан тип функции (тип
возвращаемого через имя функции результата).
Любой из формальных параметров подпрограммы может быть либо
параметром-значением, либо параметром-переменной.
В предыдущем примере параметры были определены как параметры-значения.
Если параметры определяются как параметры-переменные, перед ними
необходимо ставить зарезервированное слово
Var,
например:
Procedure FF( Var a : Real);
Если формальный параметр объявлен как параметр-переменная, то при
обращении к подпрограмме ему должен соответствовать фактический параметр
в виде переменной нужного типа; если формальный параметр объявлен как
параметр-значение, то при обращении ему может соответствовать выражение.
Для того, чтобы понять, в каких случаях использовать параметры-значения,
а в каких - параметры переменные, рассмотрим, как осуществляется замена
формальных параметров на фактические в момент обращения к подпрограмме.
Если параметр определен как параметр-значение, то перед вызовом
подпрограммы это значение вычисляется, полученный результат копируется
во временную память и передается подпрограмме. Если же параметр
определен как параметр-переменная, то при вызове подпрограммы передается
сама переменная, а не ее копия. Любые возможные изменения в подпрограмме
параметра-значения никак не воспринимаются вызывающей программой, так
как в этом случае изменяется копия фактического параметра, в то время
как изменения параметра-переменной приводит к изменению самого
фактического параметра в вызывающей программе.
Поэтому параметры-переменные могут использоваться как "средство связи"
алгоритма, реализованного в подпрограмме, с “внешним миром”, в
частности, с помощью этих параметров процедура передает результаты своей
работы вызывающей программе.
Однако, злоупотребление этими возможностями делает программу, как
правило, трудной в понимании и сложной в отладке. В соответствии с
требованиями хорошего стиля программирования рекомендуется использовать
передачу результатов через фактические параметры для процедур и через
имя для функций.
Переменные, описанные в разделе описаний переменных подпрограммы,
называются локальными переменными этой подпрограммы и
доступны только в ней.
Концепция глобальных и локальных имен относится не только к переменным
но и к другим описываемым объектам Паскаля: константам, типам,
процедурам и функциям.
Пример.
В программе задается два целых числа 5 и 7, эти числа передаются
процедуре Inc2, в которой они удваиваются. Один из параметров
передается как параметр-переменная, другой - как параметр-значение.
Значения параметров до и после вызова процедуры, а так же результат их
удвоения выводятся на экран.
Program Exampl;
Var a,b: Integer;
Procedure Inc2(Var c: Integer; b: Integer);
Begin
c := c + c;
b := b + b;
Writeln(‘Удвоенные
:’, c:5, b:5)
End; {Inc2}
Begin {Main}
a:=5; b:=7;
Writeln(‘Исходные
:’, a:5, b:5); Inc2(a, b);
Writeln(‘Результат
:’, a:5, b:5)
End.
{Main}
В результате прогона программы будет
выведено:
Исходные : 5 7
Удвоенные : 10 14
Результат : 10 7
Пример.
Описать функцию, вычисляющую
факториал и использовать ее для вычисления
Program Calc;
Var n,m: Integer; f: Real;
Function fact(n: Integer): Integer;
Var i,p : Integer;
Begin p:=1;
For i:=2 To n do p := p* i;
fact:= p
End;
Begin
Read(m,n);
f:= fact(n) * fact(m) / fact(n+m);
Writeln(f)
End. |