Использование параметров с атрибутом 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.
|
Контрольные вопросы по теме «Подпрограммы пользователя» |
Что такое подпрограмма?
При каких условиях целесообразно использование подпрограмм, какие возможности они предоставляют пользователю?
Назовите различные виды подпрограмм. В чем их отличие?
Как организуется процедура-функция?
Особенности формирования заголовка процедуры-функции.
Расскажите о структуре процедуры.
Перечислить, как согласуются формальные и фактические параметры?
Указать способы обращения к подпрограммам пользователя.
Назовите способы передачи параметров в подпрограмму.
Указать, как организовывать подпрограмму без параметров.
Поясните, как и куда осуществляется выход из подпрограммы.