Тема: "Работа с процедурами и функциями".
Цель работы:
Получение практических навыков по разработке алгоритмов на процедуры и функции.
Количество часов на выполнение работы
Продолжительность выполнения данной практической работы составляет 2 академических часа.
Оборудование
Аппаратное обеспечение: персональный компьютер следующей конфигурации:
процессор не ниже Intel i3;
жесткий диском со свободным объемом не менее 1 Гб;
Программное обеспечение:
операционная система Windows 7 / 8 / 8.1 / 10.
установленная среда программирования PascalABC.
Краткие теоретические сведения
При решении сложных задач разумно разбить алгоритм на несколько более простых составляющих. В языке Pascal существуют специальные средства для этого – подпрограммы. Есть два вида подпрограмм: процедуры и функции. Функция получает информацию от вызывающей программы через свои параметры. Параметры, описанные в заголовке функции, называются формальными параметрами. Параметры, указанные при вызове функции называют фактическими. Типы и число фактических параметров должны соответствовать типу и числу формальных параметров. Следующий пример иллюстрирует работу функций.
Program Table;
Uses CRT; // Подключение модулей
// Описания функций, требующихся в программе
function cube(x:real):real; // возведение в куб
begin
cube:=x*x*x; // имени функции присваивается значение
end;
function sign(x:real):integer; // вычисление знака числа
begin
if x0 then sign:=1
else if x=0 then sign:=0
else sign:=-1;
end;
// ==== Начало главной программы ==========
var a : real; // блок описания переменных
const a1 = -5.0; // блок описания констант (постоянных)
a2 = +5.0;
st = 0.5;
begin
a:=a1;
while (ado
begin
writeln(a:4:1,cube (a):10:3,sign(a):3); // вызов функций
a:=a+st;
end;
end.
Обратите внимание, что внутри тела функции (заключенного в операторные скобки begin … end) вы обязаны хотя бы один раз имени функции присвоить значение. В этой программе также используется новый материал, не связанный с функциями, – это константы. Значение констант задается через знак равенства (а не присваивания). Тип константы определяется из типа присваиваемого значения. Константы, в отличие от переменных, не могут менять свое значение.
Рассмотрим еще один пример, в котором функция имеет два параметра разного типа.
Program Power2;
Uses CRT;
function power(x : real; n : integer) : real; // возведение в степень
var i : integer; // локальные переменные r : real;
begin
r:=1.0;
for i:=1 to n do r:=r*x; // накопление произведения
power:=r; // результат присвоить имени функции
end;
// ==== Начало главной программы ================
var i : integer; // блок описания переменных
begin
for i:=1 to 10 do
writeln(i:2,power (2.0,i):6:0);
end.
В данном примере функция имеет два формальных параметра (типа real и типа integer), а также две локальных переменных. Имена локальных переменных действуют только внутри тела функции. Переменная i в главной программе, и переменная i внутри функции – это две разных переменных. При вызове функции первый фактический параметр соответствует первому формальному параметру. Второй параметр – второму.
Для выполнения каких-либо действий (а не вычислений значений) существуют подпрограммы-процедуры. Они также могут принимать параметры, как и подпрограммы функции. Давайте сразу проиллюстрируем работу процедуры на примере графической программы.
В стандартной графической библиотеке нет процедуры, рисующей треугольники. Давайте создадим такую процедуру и проверим ее работу.
Program UseProc;
Uses GraphABC;
Procedure Triangle(x1,y1,x2,y2,x3,y3:integer);
// Процедура рисует треугольник
begin
line(x1,y1,x2,y2);
line(x2,y2,x3,y3);
line(x3,y3,x1,y1);
end;
// Главная программа
begin
SetWindowSize(500,500);
Triangle(100,200,400,300,250,150);
Triangle(10,20,30,40,50,10);
end.
Как мы видим, процедура Trianlge имеет шесть целочисленных параметров и вызывает функции трижды функции Line для соединения точек. Создав такую процедуру, мы можем использовать ее столько раз, сколько нам надо в главной программе.
Задания по практической работе
Описать процедуру PowerA3(A, B), вычисляющую третью степень числа A и возвращающую ее в переменной B (A — входной, B — выходной параметр; оба параметра являются вещественными). С помощью этой процедуры найти третьи степени пяти данных чисел.
Описать процедуру PowerA234(A, B, C, D), вычисляющую вторую, третью и четвертую степень числа A и возвращающую эти степени соответственно в переменных B, C и D (A — входной, B, C, D — выходные параметры; все параметры являются вещественными). С помощью этой процедуры найти вторую, третью и четвертую степень пяти данных чисел.
Описать процедуру Mean(X, Y, AMean, GMean), вычисляющую среднее арифметическое AMean = (X+Y)/2 и среднее геометрическое GMean = √X·Y двух положительных чисел X и Y (X и Y — входные, AMeanиGMean—выходные параметры вещественного типа). С помощью этой процедуры найти среднее арифметическое и среднее геометрическое для пар (A, B), (A, C), (A, D), если даны A, B, C, D.
Описать процедуру TrianglePS(a, P, S), вычисляющую по стороне a равностороннего треугольника его периметр P=3·a и площадь S=a2·√3/4 (a — входной, P и S — выходные параметры; все параметры являются вещественными). С помощью этой процедуры найти периметры и площади трех равносторонних треугольников с данными сторонами.
Описать процедуру RectPS(x1,y1,x2,y2,P,S), вычисляющую периметр P и площадь S прямоугольника со сторонами, параллельными осям координат, по координатам (x1,y1), (x2,y2) его противоположных вершин (x1,y1,x2,y2 — входные, P и S — выходные параметры вещественного типа). С помощью этой процедуры найти периметры и площади трех прямоугольников с данными противоположными вершинами.
Описать функцию Power1(A,B) вещественного типа, находящую величину AB по формуле AB = exp(B·ln(A)) (параметры A и B — вещественные). В случае нулевого или отрицательного параметра A функция возвращает 0. С помощью этой функции найти степени AP, BP, CP, если даны числа P, A, B, C.
Описать функцию Power2(A, N) вещественного типа, находящую величину AN (A — вещественный, N — целый параметр) по следующим формулам: A0 = 1; AN = A·A·...·A (N сомножителей), если N 0; AN = 1/(A·A·...·A) (|N| сомножителей), если N K, AL, AM, если даны числа A, K, L, M.
Используя функции Power1 и Power2 (задания 6 и 7), описать функцию Power3(A, B) вещественного типа с вещественными параметрами, находящую AB следующим образом: если B имеет нулевую дробную часть, то вызывается функция Power2(A, Round(B)); в противном случае вызывается функция Power1(A, B). С помощью этой функции найти AP, BP, CP, если даны числа P, A, B, C.
Описать функцию Exp1(x, ε) вещественного типа (параметры x, ε — вещественные, ε 0), находящую приближенное значение функции exp(x): exp(x) = 1 + x + x2/(2!) + x3/(3!) + ... + xn/(n!) + ... (n! = 1·2·...·n). В сумме учитывать все слагаемые, большие ε. С помощью Exp1 найти приближенное значение экспоненты для данного x при шести данных ε.
Описать функцию Sin1(x, ε) вещественного типа (параметры x, ε — вещественные, ε 0), находящую приближенное значение функции sin(x): sin(x) = x−x3/(3!) + x5/(5!)−... + (−1)n·x2·n+1/((2·n+1)!) + ... . В сумме учитывать все слагаемые, модуль которых больше ε. С помощью Sin1 найти приближенное значение синуса для данного x при шести данных ε.