Pascaler
О проекте Теоретический материал Тестирование Архив задач
Войти в личный кабинет



О проекте


Преподавателям


Тема: Функции.

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

Функция оформляется в следующем виде:

Function <имя функции>(формальные параметры: тип): тип значения функции;
Var
  . . .
Begin
  . . .
End ;

Вызывается функция по её имени с указанием фактических параметров.

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

Пример. Пусть требуется найти (x!-y!)*d!.

Напомним, что х! представляет собой произведение n чисел натурального ряда : х! = 1*2*3*......*х

Function fac(n:integer): integer;
Var
  p,i: integer;
Begin
  p:=1;
  for i:=2 to n do
    p:=p*i;
  fac:=p;
End;

Вызвать можно так: f:=(fac(x)-fac(y))*fac(d).

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

Различие между процедурами и функциями.

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

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

Program ProcedureAndFunction;
Uses
  Crt;
Var
  a, b, SumNumbers : integer;
Procedure Summa1(Var Sum: integer; a, b : integer);
Begin
  Sum:= a+b;
End;

Function Sum(a, b : integer) : integer;
Begin
  Sum:= a+b;
End;

Begin
  ClrScr;
  a := 12;
  b := 15;
  Summa1(SumNumbers, a, b);
  writeln ('С помощью процедуры сумма чисел равна ',SumNumbers);
  writeln ('С помощью функции сумма чисел равна ',Sum(a, b));
End.

Вызов процедуры производится по ее имени. Наряду с параметрами-значениями a и b, которые подлежат сложению, в списке параметров присутствует параметр-переменная Sum, который содержит возвращаемое процедурой значение - сумму.

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

Объявление функции

Function Sum(a, b : integer) : integer;

внешне похоже на объявление переменной Sum типа integer. Тип функции объявляется следом за списком параметров - после закрывающейся скобки этого списка и двоеточия.

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

SumNumbers:= Sum(a,b);

Если не обращать внимания на наличие списка параметров, то этот оператор выглядит как присвоение переменной SumNumbers значения переменной Sum. Компилятор, кончно же, знает, что Sum - это имя функции (т.к. определение предшествует использованию) и организует вычисления соответствующим образом. Точно так же, как константа или переменная, вызов функций может использоваться в списках параметров оператора write (см. программу), что для процедур невозможно.

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

Итак, из вышесказанного возьмите на заметку следующее.

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

Задачи для самостоятельного решения:

  1. Найти сумму цифр числа.


  2. Найти первую цифру числа.


  3. Найти количество делителей числа.


  4. Найти числа из промежутка от А до В, у которых больше всего делителей.


  5. Найти сумму всех делителей числа.


  6. Определить, является ли число совершенным, то есть равно ли оно сумме своих делителей, кроме самого себя.


  7. Определить, является ли число простым.


  8. Среди чисел из интервала от А до В найти все простые.


  9. Составьте программу, проверяющую, является ли число палиндромом (например, число 12421 - палиндром).


  10. Определить, является ли число автоморфным, то есть квадрат этого числа заканчивается этим же числом, например, числа 6 и 25, т.к. их квадратами являются числа 36 и 625.
Вернуться назад
2003—2012 © Группа «Vimedia»
Проект «Pascaler» — лучший на ХI Всероссийской конференции молодых исследователей с международным участием «Шаг в будущее», Россия, Москва, 12 – 16 апреля 2004г.