 
        
        Использование параметров с атрибутом Var
Если требуется, чтобы процедура кроме выполнения последовательности определенных действий возвращала некоторое значение через некоторый параметр, то необходимо при объявлении процедуры указать этот параметр с атрибутом Var. В этом случае значение, присвоенное такому параметру при выполнении процедуры, можно будет использовать в программе после вызова данной процедуры. (пример: процедура MyProc позволяет вернуть через Var-параметр Flag значение True, если a>=b, и False в противном случае).
Примечание: в функциях также возможно использование Var-параметров, например, если требуется вернуть более одного значения.
Задача. При помощи функции и процедуры пользователя найти сумму двух чисел.
{****** 1. РАЗДЕЛ ОБЪЯВЛЕНИЙ И СОГЛАШЕНИЙ**************}
Program Summa;
Uses Crt;
Var a,b,s: Real;
{****** 2. РАЗДЕЛ ПРОЦЕДУР И ФУНКЦИЙ*******************}
Function Sum(x,y:Real): Real;
begin
Sum:=x+y;
end;
Procedure Summ(x,y:Real; var z:Real);
begin
z:=x+y;
end;
{***********3. РАЗДЕЛ ОСНОВНОЙ ПРОГРАММЫ***************}
begin
ClrScr;
Write(‘Введите два числа: ’);
ReadLn(a,b);
Writeln(Sum(a,b));
Writeln;
Summ(a,b,s);
Writeln(s);
end.
Задача. Найти min и max элементы массива и поменять их местами
{****** 1. РАЗДЕЛ ОБЪЯВЛЕНИЙ И СОГЛАШЕНИЙ**************}
const n=10;
type massiv=array[1..n] of integer;
var a,b:massiv;
i, j, min, max, imin,imax,tmp :integer;
{****** 2. РАЗДЕЛ ПРОЦЕДУР И ФУНКЦИЙ*******************}
{*************ПРОЦЕДУРА ВВОДА**************************}
procedure vvod(a_:massiv);
var i:integer;
begin
Randomize;
for i:=1 to n do
begin
a[i]:=-5+random(10);
write(a[i]:4);
end;
end;
{***********ПРОЦЕДУРА ОБМЕНА***************************}
procedure obmen(a_:massiv);
var i:integer;
begin
{**************поиск min*****************}
min:=a_[1];
imin:=1;
for i:=2 to n do
if a_[i]<min then
begin
min:=a_[i];
imin:=i;
end;
writeln;
writeln('min=a[',imin,']=', min);
{**************поиск max******************}
max:=a_[1];
imax:=1;
for i:=2 to n do
if a_[i]>max then
begin
max:=a_[i];
imax:=i;
end;
writeln;
writeln('max=a[',imax,']=', max);
{**************обмен местами *************}
tmp:=a_[imin];
a_[imin]:=a_[imax];
a_[imax]:=tmp;
end;
{***********ПРОЦЕДУРА ВЫВОДА*******************}
procedure vivod(a_:massiv);
var i:integer;
begin
writeln;
for i:=1 to n do
writeln('mas[',i,']=',a_[i]:3);
end;
{************3. РАЗДЕЛ ОСНОВНОЙ ПРОГРАММЫ*************}
BEGIN
vvod(a);
obmen(a);
vivod(a);
END.
| 
				 | Задачи для самостоятельного решения по теме «Подпрограммы пользователя» | 
- Поменять местами первый элемент и максимальный. 
- Поменять местами второй и минимальный. 
- Поменять местами первый и последний отрицательный. 
- Дан одномерный массив А, состоящий из 2п элементов. Поменять его половины следующим образом: первый элемент поменять с последним, второй с предпоследним и так далее. 
- Дан одномерный массив. Переставить в обратном порядке элементы массива, расположенные между минимальным и максимальным элементами. 
| 
			 | Лабораторная работа №4 «Создание подпрограмм пользователя» | 
Цель работы — овладение навыками алгоритмизации и программирования задач с использованием подпрограмм пользователя различных видов, овладение навыками написания подпрограмм и обращения к ним, выбора параметров подпрограмм.
Задания для самостоятельной подготовки.
- Изучить: - правила записи подпрограмм различных видов и способов обращений к ним; 
- правила записи программ, использующих подпрограммы различных видов; 
- способы передачи параметров в подпрограмму; 
- порядок выполнения программ, использующих подпрограммы. 
 
- Разработать алгоритм решения в соответствии с заданием. 
- Составить программу решения задачи. 
- Подготовить тестовый вариант программы и вариант в соответствии с исходными данными. 
Задания к работе.
Составить программу, использующую подпрограмму-функцию, в соответствии с номером варианта лабораторной работы 4 «Обработка одномерных массивов», приняв в качестве выходного параметра значения величин, указанных в табл. 7.1.
Таблица 7.1.
Варианты заданий к лабораторной работе «Создание подпрограмм пользователя»
| № варианта | Значение выходного параметра | 
| 1 | Сумма положительных элементов массива X. | 
| 2 | Среднее арифметическое значение положительных элементов массива A. | 
| 3 | Количество положительных элементов массива Y. | 
| 4 | Среднее взвешенное элементов массива X и B. | 
| 5 | Минимальный элемент массива C. | 
| 6 | Среднее арифметическое элементов массива X, кратных 7. | 
| 7 | Среднее геометрическое элементов массива Y. | 
| 8 | Номер минимального элемента массива С. | 
| 9 | Сумму элементов отрицательных элементов массива N, кратных 3. | 
| 10 | Максимальный элемент массива. | 
| 11 | Среднее гармоническое элементов массива A. | 
| 12 | Количество положительных элементов в массиве Y.-0,8<Y<10.7 | 
| 13 | Количество отрицательных элементов массива Z -12<Z<10. | 
| 14 | Номер максимального элемента массива B. | 
| 15 | Среднее квадратичное элементов массива C. | 
| 16 | Сумма положительных элементов массива X, кратных 5. | 
| 17 | Количество отрицательных элементов массива X. | 
| 18 | Сумма элементов массива X. | 
| 19 | Среднее гармоническое четных элементов массива A. | 
| 20 | Среднее геометрическое элементов массива Z, 1<z<6 n=4. | 
Пример выполнения задания1.
Берем за основу программу, составленную в лабораторной работе 4, и переделываем ее, создавая подпрограмму-функцию по правилам организации процедур-функций.
Задание. Найти максимальный элемент одномерного массива.
Program lab6a; {Лабораторная работа 6, задание a}
{Студент группы УК–11 Иванов А.И.}
{Применение функции для поиска максимального элемента массива}
Uses Crt;
Const n=10;
Type mas=array[1..n] of integer;
Var i:integer;
x:mas;
function max_element(a:mas):integer;
var max:integer;
begin
max:=a[1];
for i:=1 to n do
if (a[i]>max) then max:=a[i];
max_element:=max;
end;
begin
clrscr;
Writeln('Massiv X');
randomize;
For i:=1 to n do
begin
x[i]:=1+random(10);
writeln(x[i]);
end;
writeln('max=',max_element(x));
end.
| 
 | Контрольные вопросы по теме «Подпрограммы пользователя» | 
- Что такое подпрограмма? 
- При каких условиях целесообразно использование подпрограмм, какие возможности они предоставляют пользователю? 
- Назовите различные виды подпрограмм. В чем их отличие? 
- Как организуется процедура-функция? 
- Особенности формирования заголовка процедуры-функции. 
- Расскажите о структуре процедуры. 
- Перечислить, как согласуются формальные и фактические параметры? 
- Указать способы обращения к подпрограммам пользователя. 
- Назовите способы передачи параметров в подпрограмму. 
- Указать, как организовывать подпрограмму без параметров. 
- Поясните, как и куда осуществляется выход из подпрограммы. 

 
