- •Лабораторная работа № 6 Реализация программ, использующих процедуры и функции пользователя
- •Цель работы
- •2. Краткие сведения из теории
- •2.1 Общие сведения о подпрограммах
- •2.2 Глобальные, локальные блоки и объекты
- •2.3 Подпрограмма-процедура
- •2.4 Подпрограмма-функция
- •2.5 Рекурсивная подпрограмма
- •3 Содержание работы
- •4 Требования к отчету
- •5 Контрольные вопросы
- •Приложение а
- •Приложение в
- •Приложение в Задания для самостоятельного выполнения на процедуры и функции
2.3 Подпрограмма-процедура
Любая процедура начинается с заголовка. В отличие от основной программы заголовок в процедуре обязателен. Общий вид заголовка:
procedure <имя процедуры>(<формальные параметры> : <тип>);
За заголовком могут идти такие же разделы, что и в основной программе. В отличие от основной программы процедура завершается точкой с запятой.
В качестве результата процедура может возвращать в вызывающую программу множество простых или структурированных величин. Параметры, передающие результаты работы процедуры, должны быть обязательно параметрами–переменными.
Разрешается описывать процедуры без формальных параметров, тогда организация передачи информации из программы в процедуру и обратно проводится с помощью глобальных переменных, а заголовок процедуры будет иметь более простой вид: procedure <имя процедуры>;
Для вызова процедуры из основной программы или другой подпрограммы следует записать имя процедуры и список фактических параметров. Например:
Streug(a,b,c,s);
Streug(a/b,c+5,7,s1); .
Вызов процедуры без формальных параметров осуществляется по имени.
Пример 1. Даны два массива из N целых элементов из интервала [-20,20]. В каждом массиве найти максимальный элемент и затем сравнить их.
Program SravMas; {сравнение максимальных и минимальных элементов}
Const n=15;
Type massiv=Array[1..n] оf Integer;
Var m1, m2 : massiv;
max1, max2 : Integer;
{ процедура заполнения матрицы случайными числами }
Procedure RandomMas(Var x:massiv);
Var i:Integer;
Begin
Randomize;
For i:=1 To n Do x[i] := -20+Random(41);
End;
{ процедура вывода матрицы }
Procedure VivodMas(Var x:massiv);
Var i:Integer;
Begin
For i:=1 To n Do write(x[i]:5);
End;
{ процедура нахождения максимального элемента матрицы }
Procedure MaxMas(Var x:massiv; Var MX:Integer);
Var i:integer;
Begin
MX:=x[1];
For i:=2 to n do
if x[i]>MX then MX:=x[i];
End;
{ основная программа }
Begin
RandomMas(m1);
Writeln('Первый массив:');
VivodMas(m1);
RandomMas(m2);
Writeln('Второй массив:');
VivodMas(m2);
{вызов процедуры нахождения максимального элемента}
MaxMas(m1,max1);
MaxMas(m2, max2);
if max1>max2 then writeln('В 1-м массиве максимальный элемент больше и =',max1) else
if max1<max2 then writeln('Во 2-м массиве максимальный элемент больше и=',max2)
else writeln('В обоих массивах максимальные равны ',max1);
End.
2.4 Подпрограмма-функция
Подпрограмма-функция вычисляет одно единственное значение, которое передается через ее имя. Блок функции может содержать все разделы, которые могут быть в процедурах.
Основные отличия функции от процедуры:
1. Заголовок функции состоит из слова function, за которым следует имя функции, далее в круглых скобках - список формальных параметров, затем через двоеточие записывается тип функции - тип возвращаемого параметра. Функция может возвращать параметры следующих типов: любого порядкового, любого вещественного, стандартного строкового типа string, любого указателя.
2. В теле функции хотя бы раз имени функции должно быть присвоено значение:
<имя функции> := <результат>; .
3. Функция вызывается в каком-нибудь выражении.
Пример 2. Составить программу табулирования функции на отрезке с шагом h.
Program pr_2;
Var a,b,h,x : real;
Function f(t : real) : real;
Begin
f:=t*cos(t);
End;
Begin
Write('Введите начало и конец отрезка: ');
Readln(a,b);
Writeln('Введите шаг табуляции: ');
Readln(h);
Writeln('Аргумент Функция f(x)=x cos(x) ');
x:=a;
Repeat
writeln(x:6:3, f(x):20:3);
x:=x+h;
Until x>b;
End.