Использование параметров с атрибутом 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.
1. Поменять местами первый элемент и максимальный. 2. Поменять местами второй и минимальный. 3. Поменять местами первый и последний отрицательный. 4. Дан одномерный массив А, состоящий из 2п элементов. Поменять его половины следующим образом: первый элемент поменять с последним, второй с предпоследним и так далее. 5. Дан одномерный массив. Переставить в обратном порядке элементы массива, расположенные между минимальным и максимальным элементами.
Цель работы — овладение навыками алгоритмизации и программирования задач с использованием подпрограмм пользователя различных видов, овладение навыками написания подпрограмм и обращения к ним, выбора параметров подпрограмм.
Задания для самостоятельной подготовки. 1. Изучить: · правила записи подпрограмм различных видов и способов обращений к ним; · правила записи программ, использующих подпрограммы различных видов; · способы передачи параметров в подпрограмму; · порядок выполнения программ, использующих подпрограммы. 2. Разработать алгоритм решения в соответствии с заданием. 3. Составить программу решения задачи. 4. Подготовить тестовый вариант программы и вариант в соответствии с исходными данными.
Задания к работе. Составить программу, использующую подпрограмму-функцию, в соответствии с номером варианта лабораторной работы 4 «Обработка одномерных массивов», приняв в качестве выходного параметра значения величин, указанных в табл. 7.1.
Таблица 7.1. Варианты заданий к лабораторной работе
Пример выполнения задания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.
1. Что такое подпрограмма? 2. При каких условиях целесообразно использование подпрограмм, какие возможности они предоставляют пользователю? 3. Назовите различные виды подпрограмм. В чем их отличие? 4. Как организуется процедура-функция? 5. Особенности формирования заголовка процедуры-функции. 6. Расскажите о структуре процедуры. 7. Перечислить, как согласуются формальные и фактические параметры? 8. Указать способы обращения к подпрограммам пользователя. 9. Назовите способы передачи параметров в подпрограмму. 10. Указать, как организовывать подпрограмму без параметров. 11. Поясните, как и куда осуществляется выход из подпрограммы.
|