Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...
Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
Топ:
Комплексной системы оценки состояния охраны труда на производственном объекте (КСОТ-П): Цели и задачи Комплексной системы оценки состояния охраны труда и определению факторов рисков по охране труда...
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного...
Процедура выполнения команд. Рабочий цикл процессора: Функционирование процессора в основном состоит из повторяющихся рабочих циклов, каждый из которых соответствует...
Интересное:
Финансовый рынок и его значение в управлении денежными потоками на современном этапе: любому предприятию для расширения производства и увеличения прибыли нужны...
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Искусственное повышение поверхности территории: Варианты искусственного повышения поверхности территории необходимо выбирать на основе анализа следующих характеристик защищаемой территории...
Дисциплины:
|
из
5.00
|
Заказать работу |
Содержание книги
Поиск на нашем сайте
|
|
|
|
Если результатом подпрограммы является только одно значение, то такую подпрограмму можно оформить в виде функции. Функция пользователя аналогична процедуре с той лишь разницей, что:
Функция передает в программу результат своей работы – единственное значение, носителем которого является имя самой функции;
Имя функции может входить в выражение как операнд. Функция возвращает результат в точку своего вызова.
Функция, определенная пользователем, имеет заголовок и тело. Заголовок содержит зарезервированное слово function, имя функции,заключенный в круглые скобки необязательный список формальных параметров и – в отличие от процедуры, тип возвращаемого функцией значения:
Function ИмяФункции[(ФормальныеПараметры)]: ТипРезультата;
Например:
Function func1(n: integer): integer;
Function func2(a,b: real): real;
Function func3: integer;
Имя функции уникально в пределах одной программы.
Тело функции аналогично по своей структуре обычной программе.
В разделе операторов функции должен находиться хотя бы один оператор, который присваивает ее имени значение, возвращаемое как результат работы функции. Если таких присваиваний несколько, то результатом выполнения функции будет значение последнего оператора присваивания. Если же такого оператора нет, то значение, возвращаемое функцией, не определено.
В отличие от процедуры, вызов функции не оформляется в виде отдельного оператора. Обращение к функции осуществляется путем использования указателя функции в качестве операнда в некотором выражении. Указатель функции – это ее имя со списком аргументов, т.е. фактических параметров.
Например: writeln(func1(i));
c:= func2(2,5);
writeln(func3);
Таким образом, общий вид описания функции следующий:
Function Имя[(Список формальных параметров)]: Тип результата;
{Описательная часть}
Begin
Тело функции, в котором обязательно
долен быть оператор присваивания
Имя функции:= значение;
End;
Пример 1
Составить программу, подсчитывающую число сочетаний без повторения из n элементов по k.
Число сочетаний без повторения вычисляется по формуле: 
Решение
Обозначим через n и k переменные для хранения введенных чисел; c − переменную для хранения результата.
Чтобы подсчитать количество сочетаний без повторения, необходимо вычислить n!, (n-k)!, k!
Опишем функцию для вычисления факториала числа
n(n!= 1•2•...•n).
{заголовок функции}
Function factorial(n:Integer):Longint;
{описательная часть}
Var i: Integer;
rez: Longint;
{тело функции}
Begin
rez:=1;
For i:=1 To n Do rez:=rez*i;
factorial:=rez; {присваивание значения имени функции}
End;
Первая строчка в описании функции − это ее заголовок. Служебное слово Function (функция) указывает на то, что именем factorial названа функция. В скобках записан список формальных параметров функции, состоящий из одной переменной целого типа. Далее в заголовке указан тип значения функции. В данном примере результат функции factorial − длинное целое число.
За заголовком функции следует описательная часть функции, которая, как и у программы, может состоять из разделов описания переменных, констант, типов. В данном примере имеется только раздел описания переменных. В нем описаны переменные i (счетчик цикла) и rez (для накопления значения факториала).
Далее идет раздел операторов (тело функции). Результат присваивается имени функции, таким образом функция получает свое значение.
В тексте программы описания функций всегда следуют за разделом описания переменных и до начала основной части, как и описания процедур. После того как функция описана, ее можно использовать в программе.
Листинг основной программы.
Var n, k: Integer;
a1, a2, a3, c: Longint;
Function factorial (n:Integer): Longint;
Var i: Integer;
rez: Longint;
Begin
rez:=1;
For i:=1 To n Do rez:=rez*i;
factorial:=rez;
End;
Begin
Writeln('Ввод n и k:');
Readln(n,k);
a1:= factorial(n); {вычисление n!}
a2:= factorial(k); {вычисление k!}
a3:= factorial(n-k);{ вычисление(n-k)!}
c:= a1 div (a2*a3); {результат}
Writeln(c);
Readln;
End.
Пусть n=5, k=3. Когда в программе встречается оператор a1:= factorial(n), выполняются следующие действия:
- выделяется память для переменных, описанных в функции factorial;
- формальному параметру присваивается значение фактического: n:=n (n=5);
- выполняется функция, вычисляется факториал числа 5;
- значение функции передается в место обращения к этой функции, то есть присваивается переменной а1.
В операторах a2:= factorial(k) и a3:= factorial(n-k) еще дважды вызывается функция factorial с параметрами k=3 и n-k=2. Всего в программе имеется 3 обращения к функции factorial, столько же раз выполняются и описанные выше действия.
Еще раз подчеркнем, что функция − это самостоятельная часть программы, имеющая собственные переменные, которым отводится отдельное место в памяти ЭВМ. Этим объясняется тот факт, что переменные с одинаковыми именами, используемые в функции и в основной программе, являются разными (в рассмотренном примере - переменная n основной программы и параметр n функции). При выполнении программы машина "не путает" имена этих переменных, так как области их действия не совпадают.
Это особенно важно при написании больших программ.
Пример 2
Написать функцию, подсчитывающую количество цифр натурального числа. Используя ее, определить, в каком из двух данных чисел больше цифр.
Решение
Надо выделять последнюю цифру числа до тех пор, пока число не станет равным нулю. При этом каждый раз счетчик увеличивается на 1 (начальное значение счетчика − 0).
Function Quantity(x: Longint): Byte;
Var k: Byte;
Begin
k:=0;
While x <> 0 Do
Begin
Inc(k);
x:=x div 10;
End;
Quantity:= k;
End;
В заголовке функции указано ее имя − Quantity. Функции передается только один параметр − целое число, количество цифр которого надо найти. Результат − тоже целое число. В разделе переменных описана переменная k − счетчик цифр. В теле функции с помощью цикла While выполняются указанные выше действия (увеличивается значение счетчика и удаляется последняя цифра).
Еще раз заметим, что память для переменной k, которая является локальной, выделяется только тогда, когда начинает свою работу функция. После завершения работы функции эта часть памяти освобождается и значение k будет не определено.
Листинг основной программы.
Var n1, n2: Longint;
k1, k2: Byte;
Function Quantity(x: Longint): Byte;
Var k: Byte;
Begin
k:=0;
While x <> 0 Do
Begin
Inc(k);
x:= x div 10;
End ;
Quantity:= k;
End;
Begin
Writeln('Введите два числа');
Readln(n1, n2);
k1:= Quantity(n1);
{количество цифр первого числа}
k2:= Quantity(n2);
{количество цифр второго числа}
If k1 = k2 Then
Writeln('Одинаковое количество цифр')
Else
If k1 > k2 Then
Writeln('В первом числе цифр больше')
Else
Writeln('Во втором числе цифр больше');
Readln;
End.
|
|
|
Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...
Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...
Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...
© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!