
- •Переменные
- •Типы переменных и констант
- •Целые типы данных языка Turbo Pascal
- •Стандартные математические функции, используемые
- •Арифметические выражения
- •Операторы
- •Оператор присваивания
- •Ввод и вывод результатов вычислений
- •Общая структура программы на Turbo Pascal
- •Пример выполнения задания 1
- •Тема 2 Логические выражения Условный оператор
- •Условный оператор
- •Пример выполнения задания 2
- •Тема 3 Использование циклических структур. Операторы цикла с предусловием и с постусловием
- •Оператор цикла с предусловием
- •Оператор цикла с постусловием
- •Пример выполнения задания 3
- •Тема 4 Использование циклических структур. Оператор цикла с параметром
- •Пример выполнения задания 4
- •Тема 5 Использование и обработка одномерного массива
- •Описание одномерного массива
- •Часто встречающиеся задачи на одномерный массив
- •Пример выполнения задания 5
- •Тема 6 Использование и обработка двумерного массива
- •Задачи с использованием главной или побочной диагонали матрицы
- •Пример выполнения задания 6
- •Тема 7 Организация программ с использованием функций
- •Пример выполнения задания 7
- •Тема 8 Организация программ с использованием процедур
- •Параметры
- •Пример выполнения задания 8
- •Тема 9 Текстовые файлы
- •Символьный тип данных
- •Операции над строками
- •Особенности работы со строками
- •Редактирование строк
- •Сору (s:string; start, len:integer):string;
- •Преобразование строк
- •Процедуры и функции для работы с текстовыми файлами
- •Примеры выполнения задания 9
- •Тема 10
- •Работа с комбинированными типами данных
- •(Записями)
- •Общие сведения
- •Особенности работы с записями
- •Пример выполнения задания 10
- •Тема 11 Типизированные файлы
- •Процедуры и функции для работы с типизированными файлами
- •Прямой доступ к элементам файла
- •Примеры выполнения задания 11
Тема 7 Организация программ с использованием функций
В алгоритмических языках, в отличии от математического понятия функции, рассматриваются только такие функции, для которых можно задать алгоритм определения их значений. Самостоятельный алгоритм можно оформить как функцию в том случае, если в результате получается одно единственное значение простого типа. Функция, как и процедура, может содержать несколько операторов, несколько входных параметров, но результат ее выполнения только один. Этот единственный результат обозначается именем функции и передается в основную программу.
Описание функции содержится в главной программе после раздела описания переменных (var) и перед началом (begin) программы.
В общем виде функция записывается следующим образом:
function имя(формальные параметры) :тип результата;
Раздел описаний
begin
Раздел операторов
end;
Формальные параметры – это наименования переменных (аргументы описываемой функции), через которые передаются входные данные из программы в функцию. Формальными параметрами функции, как правило, являются параметры – значения.
Само имя функции представляет собой идентификаторпараметр, значение которого после окончания работы функции равно результату вычисления. Тип результата (функции) указывается следом за списком параметров – после закрывающей скобки этого списка и двоеточия.
В разделе операторов функции обязательно должен присутствовать хотя бы один оператор присваивания, в котором переменной с именем, совпадающим с именем функции, присваивается определенное значение, тип которого совпадает с типом результата (функции). Если такого присваивание в разделе операторов функции не выполнено, то функция не возвращает никакого результата (точнее, возвратит произвольный результат).
Например, описания вычисления функции тангенса угла:
function tg(x:real): real;
begin
tg := sin(x)/cos(x)
end;
Вызов и выполнение функции производится при вычислении указателя функции:
имя функции(фактические параметры ).
При этом вызов функции необходимо делать непосредственно внутри выражения, подобно тому, как используются стандартные встроенные функции, например синус sin(x). Фактические и формальные параметры должны согласовываться
по порядку следования,
количеству,
типам.
Например, вызов ранее описанной функции tg можно произвести так:
a := tg(y);
После выполнения функции выработанный ею результат используется в качестве значения указателя функции в том выражении, в котороe входит этот указатель. При вызове функции передача фактических параметров производится так же, как и при вызове процедуры.
Пример. Заданы стороны двух треугольников MNK (стороны m, n, k) и PLF (стороны p, l, f ). Переменной s присвоить значение –1, если площадь треугольника MNK меньше или равнa площади треугольника PLF, и значение 1 в противном случае.
Вычисление площади треугольников по формуле Герона оформить в виде функции pl.
Примечание. Формула Герона для вычисления площади треугольника со сторонами a, b, c:
,
где
,
где p
– полупериметр треугольника.
program pr1;
uses crt;
var m, n, k, l, p, f, h, q: real;
s : integer;
function pl(a, b, c: real): real;
var r : real;
begin
r:= ( a + b + c ) / 2;
pl:= sqrt (r*(r – a)*(r – b)*(r – c));
end;
begin clrscr;
writeln(‘Введите стороны m, n, k, p, l, f’);
readln(m, n, k, p, l, f );
h := pl(m, n, k);
q := pl(p, l, f );
if h > q then s := 1 else s := –1;
writeln('s=' , s :3);
readkey;
end.
При передаче в функцию массива фактическим параметром является имя массива. Обратим внимание на то, что в заголовке функции для указания типов формальных параметров могут использоваться только имена типов, но не их описания.
Нельзя записать так:
function sum(a: array[1..5] of real; var : real):real;
Пример. Пусть заданы два вектора а(8) и b(12). Вычислить для каждого вектора произведение его элементов.
program pr2;
type vect = array [ 1 .. 12 ] of real;
var a, b: vect;
ta, tb : real;
. . . . . . . . . . . . . .
function prl(var x: vect; n: integer): real;
var i: integer;
p: real;
begin p := 1;
for i:= 1 to n do
p := p * x[ i ];
pr := p
end;
begin
. . . . . . . . . . . . . . .
ta:= pr(a, 8);
tb:= pr(b, 12);
. . . . . . . . . . . . . . . . .
end.