- •Лабораторная работа № Реализация программ, использующих процедуры и функции пользователя
- •Цель работы
- •2. Краткие сведения из теории
- •2.1 Глобальные, локальные блоки и объекты
- •2.2 Понятие процедур и функций
- •2.3 Описание процедур и функций
- •2.4 Вызов процедур и функций
- •2.5 Формальные параметры процедур и функций
- •3 Примеры Pascal-программ использующих процедуры и функции
- •3.1 Постановка задачи 1
- •3.1.2 Программы
- •3.2 Постановка задачи 2
- •3.2.1 Программа
- •3.3 Постановка задачи 3
- •Укрупненная блок схема
- •Программа
- •Результат
- •3.3.4 Варианты заданий
- •4 Контрольные вопросы
2.5 Формальные параметры процедур и функций
Формальные параметры могут быть заданы как:
- параметры-значения (передача параметров по значению);
- параметры-переменные (передача параметров по ссылке);
Передача параметров по значению обеспечивает сохранность величины передаваемого параметра. Изменение их в процедуре никак не отразится на фактических параметрах.
Передача параметров по ссылке при изменении формального параметра обеспечивает изменение фактического параметра. Параметры переменные записываются в списке формальных параметров после зарезервированного слова Var.
3 Примеры Pascal-программ использующих процедуры и функции
3.1 Постановка задачи 1
При известных значениях a, b, c и натуральных n, m вычислить значения функции
![]()
Для вычисления y необходимо три раза определить функцию заданной степени при заданном основании, причем основания и степени разные. Чтобы не выполнять один и тот же алгоритм, оформим его процедурой или функцией.
3.1.2 Программы
а) программа с процедурой “Procedure”
program prog1;
var a, b, c, y, y1, y2, y3:real;
n, m: byte; {глобальное описание данных}
procedure
step (x:real; n:byte; var y:real); {процедура
вычисления
;
x, n – параметры значения; y – параметр переменная}
var i:byte; {локальное описание данных}
begin {начало локального блока}
y:=1;
for i:=1 to n do;
y:=y*x;
end; {конец локального блока}
begin {начало глобального блока}
writeln (‘введите исходные данные a, b, c, n, m’);
readln (a, b, c, n, m);
step (a, n, y1); {1-е обращение к процедуре Step}
step (b, m+1, y2); {2-е обращение к процедуре Step}
step (c, 10, y3); {3-е обращение к процедуре Step}
y:= (y1+y2)/y3;
writeln (‘y=’, y);
end. {конец глобального блока}
б) программа с процедурой Function
program prog2;
var a, b, c, y, y1, y2, y3:real;
n, m: byte; {глобальное описание данных}
function
step (x:real; n:byte; var y:real); {процедура
вычисления
;
x, n – параметры значения; y – параметр переменная}
var p:real, i:byte; {локальное описание данных}
begin
p:=1;
for i:=1 to n do;
p:=p*x;
step:=p; {имени функции присваивается значение результата}
end; {конец локального блока}
begin {начало глобального блока}
writeln (‘введите исходные данные a, b, c, n, m’);
readln (a, b, c, n, m);
y:=(step(a,n)+step(b,m+1))/step(c, 10);
writeln (‘y=’, y);
end.
3.2 Постановка задачи 2
При известных значениях a, b, t, r вычислить значение функции:
![]()
3.2.1 Программа
program prog3;
var a, b, t, r, y:real;
n, m: byte;
function kv (c, d:real):real;
begin
kv:=sqr(c)+sqr(d); {kv:=c*c+d*d:}
end;
begin {начало глобального блока}
writeln (‘введите исходные данные a, b, t, r’);
readln (a, b, t, r);
y:=sqr(kv(a, b))*kv(2, r/5)/kv(1, 1-t);
writeln (‘y=’, y:12:5);
end.
3.3 Постановка задачи 3
Сформировать и вывести на экран две матрицы путем ввода элементов с клавиатуры и по заданному правилу, используя процедуры пользователя. Фактическое число строк и столбцов вводить с клавиатуры и передавать в процедуры фактическими параметрами. Предусмотреть процедуру вывода результирующей матрицы на экран. Произвести вычисления в функции процедуре над матрицами согласно заданному требованию. Например, найти среднее арифметическое двух исходных матриц, а также сформировать две результирующие матрицы путем деления элементов исходных матриц на их максимальный элемент. Вывести результирующие матрицы на экран.
