- •14)Оператор выбора case of
- •11) Структурный тип строка, как специальная форма массива
- •10)Структурный тип строка, основы обработки строк
- •7)Функции: описания и вызовы функций.
- •8)Процедуры: описание и вызовы процедур.
- •6)Особенности использования параметров в процедурах и функциях.
- •25)Общая конструкция языка Паскаль.
- •24)Алфавит языка, ключевые слова, идентификаторы.
- •23)Структура программы.
- •22)Стандартные типы данных, операции, выражения.
- •21)Оператор присваивания.
- •18)Композиция условий и операторов.
- •17) Операторы итерационных циклов.
- •4)Области действия имён в программах.
- •2)Понятие о типе Множество в Турбо Паскале.
- •1)Запись как объединение неоднородных данных.
- •Обработка записей.
- •27)Понятие о языках программирования.
- •26)Система программирования turbo pascal 7.0.
- •28)Аппаратное и программное обеспечение компьютера.
- •30)Принцип программного управления.
- •29)Программы, управляемые событиями.
7)Функции: описания и вызовы функций.
В отличие от процедур, функции не являются отдельными операторами. Функции возвращают значения и предназначены для использования в составе выражений или в качестве выражений. Это накладывает определенный отпечаток на синтаксическую структуру описания функций, которая имеет вид:
function < имя функции >[(<список формальных параметров>)]:<тип функции >;
< описание локальных имён >
begin
< тело функции - последовательность операторов >
end;
В заголовке описания функции обязательно указывается тип вырабатываемого функцией результата, которым может быть любой простой тип Турбо Паскаля, а также строковый тип и тип указатель.
Другое отличие описания функции состоит в необходимости присутствия в теле функции хотя бы одного оператора присваивания, левой частью которого является имя функции. Смысл этого оператора - в присваивании функции некоторого результата как итога выполнения функции .Имя функции не должно присутствовать в правой части операторов присваивания.
Список формальных параметров в описании функции обычно является списком аргументов функции, т.е. входных параметров-констант.
Суть классического понятия функции состоит в том, чтобы однозначно отображать значение аргумента на значение функции (результата). Именно такой смысл имеет функция в математике.
В языках программирования понятие функции приобретает, вообще говоря, более широкий смысл. Дело в том, что функция - некоторая подпрограмма, которая в процессе своего выполнения может не только вычислять результат функции от значений аргументов, но и производить некоторое дополнительное воздействие на окружающую среду (например, изменять значение некоторых глобальных переменных, выводить информацию в файлы и др.). Такое воздействие называют побочным эффектом вычисления функций.
Побочный эффект - весьма опасное явление, которое может приводить к трудно обнаруживаемым ошибкам. Поэтому хорошим стилем считается использование только функций без побочного эффекта (так называемых чистых функций). Если функция использует только параметры-значения и не использует глобальные имена, а также операторы вывода, вызова других подпрограмм, то это гарантирует отсутствие побочного эффекта. Впрочем, в некоторых случаях имеет смысл применять функции с побочным эффектом (например, для реакций на ошибки при вычислении значения функции).
Синтаксическая форма вызова функции аналогична вызову процедуры, т.е. включает имя функции и список фактических параметров, заключенный в круглые скобки. Различие лишь в том, что вызов функции есть выражение, а не отдельный оператор.
Замечание
|
Используя так называемый расширенный синтаксис, можно вызывать функцию как процедуру (т.е. как оператор). Для включения расширенного синтаксиса имеется директива компилятора {$X+}. Это находит применение при инициализации динамических объектов. |
Приведем пример программы triangle2, отличающейся от triangle1 тем, что вместо процедуры d использована функция dist:
program triangle2; {Программа, вычисляющая длины сторон треугольника АВС}
uses CRT;
type point = array [1..2] of real; {тип- точка на плоскости}
var A,B,C:point; {вводимые точки}
ch:char;
function dist(X,Y:point):real;{ расстояние между точками X и Y }
begin dist:= sqrt(sqr(X[1]-Y[1])+sqr(X[2]-Y[2]))
end { dist};
BEGIN TextBackground(cyan);TextColor(white);ClrScr;
window(10,5,60,10);TextBackground(green); ClrScr;
repeat
writeln(' Введите координаты вершин A,B,C:');
writeln('A[1] A[2] B[1] B[2] C[1] C[2] ');
readln(A[1],A[2],B[1],B[2],C[1],C[2]);
writeln(' Длины сторон треугольника АВС:');
writeln(' AB=',dist(A,B):2:2,' AC=',dist(A,C):2:2,' BC =',dist(B,C):2:2);readln(ch)
until ch=' ';
END {triangle}.