Процедуры и функции пользователя
.pdfактивизации процедуры. Такие параметры называются параметрамипеременными
Отличительные особенности параметров-переменных:
•любое изменение формального параметра влечет за собой изменение соответствующего фактического параметра;
•при описании в списке формальных параметров перед ними ставится зарезервированное слово Var;
Приведем пример типичной записи параметров-переменных в описании процедур пользователя:
Procedure Копc (Var A, В, С : Integer; Var D : Real);
Procedure Vonc (Var: Real); |
|
|
В данном случае параметры А, В, С, D |
X, У, Z описаны как |
|
параметры-переменные. |
|
|
Пример программы с использованием процедуры пользователя: |
||
Program Example4; |
|
|
Var A,В : Integer; |
|
|
Procedure Change (Var X, Y: Integer); |
|
|
Var H : Integer; Begin |
|
|
H:=X;X:=Y; Y=H; End; |
|
|
Begin |
|
|
A:=10; B:=-10; Writeln('A =', A:3, 'B=', B:3); |
|
|
Change(A,B); |
Writeln('A=', A:3, 'B=', B:3); |
|
Change(A,B); |
Writeln('A=', A:3, 'B=', B:3); |
|
End
В процедуре Change формальные параметры X, Y описаны как параметры-переменные. Результат работы приведенной программы имеет следующий вид:
А= 10 В=-10 A= -10 B= 10
11
А= 10 В=-10
Замечания:
1.Параметры-переменные обычно используются в процедурах пользователя. Использование их в функциях не желательно, так как если функция изменяет значения формальных параметров, это нарушает структурированность программы.
2.Допускается сочетание параметров-переменных и параметровзначений в одной секции формальных параметров, например.
Procedure Mix (А, В, С: Real; VarX, Y, Z: Real);
3.Если формальные параметры имеют структурированный тип, например массив, то этот тип должен быть предварительно описан в разделе описания типов, например.
Type Massiv – Array(1..100] of Real; Procedure Inp(k: Integer; Var H: Massiv);
4.Если результаты выполнения процедуры необходимо возвратить
вточку вызова, они должны быть описаны как параметры-переменные. В противном случае результаты работы процедуры не будут возвращены.
Пример программы с использованием различий между параметрамизначениями и параметрами-переменными:
Program Ехатрle5; Var А, В: Integer;
Procedure Add(X: Integer; Var Y: Integer); Begin X:=X+10; Y:= Y-10; Writeln('X=', X:3, ' Y=', Y:3); End; Begin
A:=0; B:=0; Writeln('A=', A:3, 'B=', B:3);
Add(A,B); Writeln('A =', A:3, ' B=', B:3); End.
В процедуре Add формальный параметр X описан как параметрзначение, поэтому изменение формального параметра X не влечет за собой изменение соответствующего фактического параметра A. Параметр Y описан
12
как параметр-переменная, поэтому изменение формального параметра Y влечет за собой изменение фактического параметра В. Результат работы приведенной программы имеет следующий вид:
А= 0 В= 0 Х=10 Y= -10 А= 0 В=-10
4. Область действия идентификаторов
Программа на языке Паскаль имеет модульную структуру и может состоять из ряда вложенных друг в друга блоков.
Основная программа - это блок, который не входит ни в какой другой. Объекты, описанные в этом блоке, являются глобальными и могут использоваться во всех вложенных блоках.
Вложенные блоки - это процедуры и функции. Описанные в них объекты локальны и недоступны во внешних блоках. Для правильного использования и определения области действия идентификаторов необходимо придерживаться следующих правил:
1.Каждый идентификатор должен быть описан перед тем, как он будет использован.
2.Областью действия идентификатора является блок, в котором он описан.
3.Все идентификаторы в блоке должны быть уникальными, т.е. не должны повторяться.
4.Один и тот же идентификатор может быть по-разному определен в каждом отдельном блоке.
5.Если идентификатор программы пользователя совпадает с именем стандартной процедуры или функции, то последние недоступны в пределах области действия подпрограммы, объявленной пользователем, т.е. стандартная процедура или функция игнорируется, а выполняется процедура или функция пользователя.
13
5. Пример выполнения задания Задача
Даны два произвольных массива F, G размера n, m соответственно. Найти сумму элементов массива F, и сумму элементов массива G. Исходные данные взять самостоятельно.
Программа
Program Example 6;
Type Massiv = Array[1..100] of Real; Var F, G : Massiv; n, m, i: Integer;
SF, SG: Real;
{Процедура ввода произвольного массива Н размера k} Procedure Inp(k : Integer; Var H : Massiv);
Begin
For i:=1 Tо k Do Read(H[i]); Readln; End;
{Процедура вывода произвольного массива Н размера k} Procedure Out(k: Integer; H: Massiv);
Begin
For i:=1 То k Do Write(H[i]:5:1,''); Writeln;
End;
{Функция вычисления суммы элементов массива Н размера k} Function Summa(k: Integer; H : Massiv) : Real;
Var SH : Real; Begin
SH=0;
For i:=1 To k Do SH:=SH+H[i]; Summa:=SH;
End;
{Основная программа} Begin {Ввод массивов F, G}
14
Write ('Введите размер массива F, n='); Readln(n) Write ('Введите размер массива G, т='); Readln(m);
Writeln('Введите значения элементов массива F:'); Inp(n, F); Writein('Введите значения элементов массива G:'); Inp(m, G);
{Вывод массивов F, G} Writelп('Иcxoдный массив F:'); Out(n, F); Wnteln('Исходный массив G:'); Out(n, G);
[Вычисление суммы элементов массивов F, G} SF: Summa(n, F); SG:= Summa(m, G);
{Вывод результатов}
Writeln('Сумма элементов SF=', SF:5:1); Writeln('Cyммa элементов SG=', SG:5:1); End.
Результаты выполнения программы:
Введите размерность массива F, п=5
Введите размерность массива G, т=8 Введите значения массива F;
2.5 2-5.5 3 8
Введите значения массива G: 5.5-3-9.5 8 3 8.5 0.5-1
Исходный массив F: 2.5 2.0-5.5 3.0 8.0
Исходный массив G: 5.5-3.0 -9.5 8.0 3.0 8.5 0.5-10
Сумма элементов SF= 10.0 Сумма элементов SG= 12.0
6. Порядок выполнения лабораторной работы
1.Получить вариант задачи у преподавателя.
2.Выбрать задачу в соответствии с указанным вариантом.
3.Разработать алгоритм решения задачи.
4.Составить программу с использованием следующих процедур и
15
функций:
•процедуры ввода произвольного массива;
•процедуры вывода произвольного массива;
•функции, которая производит обработку произвольного массива согласно условию задачи.
5.При разработке программы следует обеспечить вывод полученных результатов с развернутым пояснительным текстом и предусмотреть, при необходимости, вывод промежуточных результатов.
6.Ввести текст программы и сохранить ее в каталог своей группы в файл с произвольным именем.
7.Выполнить компиляцию программы и запустить ее на выполнение.
8.Выполнить отладку программы.
9.Составить систему тестов для проверки правильности работы программы, учитывая возможные варианты исходных данных, граничные условия и различные вырожденные случаи.
10.Выполнить просчеты по разработанным тестам.
11.Результаты показать преподавателю.
16
7. Варианты заданий Задача №1
Дано три произвольных массива X, Y, Z размера k, n, m соответственно. Найти сумму модулей элементов массива X, сумму модулей элементов массива Y и сумму модулей элементов массива Z. Исходные данные взять самостоятельно.
Задача №2
Дан интервал (c,d) и два произвольных массива X, Z размера k, n соответственно. Найти сумму элементов массива X, не попадающих в интервал (c,d), сумму элементов массива Z, не попадающих в интервал (c,d). Исходные данные взять самостоятельно.
Задача №3
Дано произвольное значение b и два произвольных массива G, V размера n, m соответственно. Найти сумму элементов массива G, меньших заданного b, а. также сумму элементов массива V, меньших заданного b. Исходные данные взять самостоятельно.
Задача №4
Дано два произвольных массива F, G размера k, n соответственно. Найти среднее арифметическое отрицательных элементов массива F и среднее арифметическое отрицательных элементов массива G. Исходные данные взять самостоятельно.
Задача №5
Дан произвольный массив D размера k. Найти сумму элементов массива D, а также суммы квадратов и кубов элементов массива D. Исходные данные взять самостоятельно.
Задача №6
Дан произвольный массив R размера n. Найти сумму элементов массива R, а также сумму квадратных корней элементов массива R. Исходные данные взять самостоятельно.
Указание:
17
Учесть, что возможны отрицательные элементы в массиве R.
Задача №7
Дан интервал (а,b) и два произвольных массива V, W размера k, n соответственно. Найти количество положительных элементов массива V, попадающих в интервал (а,b) и количество положительных элементов массива W, попадающих в интервал (а,b). Исходные данные взять самостоятельно.
Задача №8
Дано два произвольных массива A, В размера n. Создать новый массив С следующим образом:
Ci = Ai*Bi, i= l,2,3,...n.
Найти сумму элементов массива А, сумму элементов массива В, и сумму элементов массива С. Исходные данные взять самостоятельно.
Задача №9
Дано три произвольных массива X, Y, Z размера k, n, m соответственно. Найти минимальный элемент массива X, минимальный элемент массива Y и минимальный элемент массива Z. Исходные данные взять самостоятельно.
Задача №10
Дано два произвольных массива R, L размера k, n соответственно. Найти среднее арифметическое положительных элементов массива R и среднее арифметическое положительных элементов массива L. Исходные данные взять самостоятельно.
Задача №11
Дано два произвольных массива S, W размера n, m соответственно. Найти количество отрицательных элементов массива S и количество отрицательных элементов массива W. Исходные данные взять самостоятельно
Задача №12
Дано два произвольных массива Р, G размера n, m соответственно.
18
Найти сумму квадратов элементов массива Р и сумму квадратов элементов массива G. Исходные данные взять самостоятельно.
Задача №13
Дано два произвольных массива F, G размера n, m соответственно. Найти количество ненулевых элементов массива Р и количество ненулевых элементов массива G. Исходные данные взять самостоятельно.
Задача №14
Дано два произвольных массива X, Y размера m. Создать новый массив Z следующим образом:
Zi=Xi*Yi, i=1,2,3,…n.
Найти сумму положительных элементов массива X, сумму положительных элементов массива Y, и сумму положительных элементов массива Z. Исходные данные взять самостоятельно.
Задача №15
Даны три произвольных массива А, В, С размера n, m, k соответственно. Найти максимальный элемент массива А, максимальный элемент массива В и максимальный элемент массива С. Исходные данные взять самостоятельно.
Задача №16
Дано три произвольных массива X, Y, Z размера k, n, m соответственно. Найти среднее арифметическое элементов массива X, среднее арифметическое элементов массива Y и среднее арифметическое элементов массива Z. Исходные данные взять самостоятельно.
Задача №17
Дано произвольное значение d и два произвольных массива Т, Y размера n, k соответственно. Найти количество элементов массива Т, больших заданного d, а также количество элементов массива Y, больших заданного d. Исходные данные взять самостоятельно.
Задача №18
Дан интервал (c,d) и два произвольных массива R, Т размера n, k
19
соответственно. Найти сумму отрицательных элементов массива R, попадающих в интервал (c,d) и сумму отрицательных элементов массива Т, попадающих в интервал (c,d). Исходные данные взять самостоятельно.
Задача №19
Дан произвольный массив Т размера п. Найти сумму элементов массива Т, имеющих четные порядковые номера, а также сумму элементов массива Т, имеющих нечетные порядковые номера. Исходные данные взять самостоятельно.
Задача №20
Дано два произвольных массива F, G размера n, m соответственно. Найти количество положительных элементов массива F и количество положительных элементов массива G. Исходные данные взять самостоятельно.
Задача №21
Дано три произвольных массива Е, S, С размера n, m, k соответственно. Найти среднее геометрическое положительных элементов массива Е, среднее геометрическое положительных элементов массива S и среднее геометрическое положительных элементов массива С. Исходные данные взять самостоятельно.
Задача №22
Дано два произвольных массива F, R размера т. Создать новый массив Z следующим образом:
Zi = Fi – Ri, I = l,2,3,...m.
Найти сумму огрицательных элементов массива F, сумму отрицательных элементов массива R и сумму отрицательных элементов массива Z. Исходные данные взять самостоятельно.
Задача №23
Дан интервал (а,b) и три произвольных массива F, L, Т размера n, m, k соответственно. Найти сумму и количество элементов массива F, попадающих в интервал (a,b), сумму и количество элементов массива L,
20