Лабораторная работа №3
.pdfЛабораторная работа № 3
Подпрограмма.
Цель работы: Научится создавать и реализовывать процедуры и функции.
Теоритическая часть:
Подпрограмма – это поименованный набор описаний и операторов, выполняющих определенную задачу. Информация, передаваемая в подпрограмму для обработки, называется параметрами, а результат вычислений – значениями. Обращение к подпрограмме называют вызовом. Перед вызовом подпрограмма должны быть обязательно описана в разделе описаний. Описание подпрограммы состоит из заголовка и тела. В заголовке объявляется имя подпрограммы и в круглых скобках ее параметры, если они есть (для функции необходимо сообщить тип возвращаемого ею результата). Тело подпрограммы следует за заголовком и состоит из описаний и исполняемых операторов.
Любая подпрограмма может содержать описание других подпрограмм. Константы, переменные, типы данных могут быть объявлены как в основной программе, так и в подпрограммах различной степени вложенности. Переменные, константы и типы, объявленные в основной программе до определения подпрограмм, называются глобальными, они доступны всем функциям и процедурам. Переменные, константы и типы, описанные в какой-либо подпрограмме, доступны только в ней и называются локальными.
Для правильного определения области действия идентификаторов (переменных) необходимо придерживаться следующих правил:
•каждая переменная, константа или тип должны быть описаны перед использованием;
•областью действия переменной, константы или типа является та подпрограмма, в которой они описаны;
1
•все имена в пределах подпрограммы, в которой они объявлены, должны быть уникальными и не должны совпадать с именем самой подпрограммы;
•одноименные локальные и глобальные переменные – это разные переменные, обращение к таким переменным в подпрограмме трактуется как обращение к локальным переменным (глобальные переменные недоступны);
•при обращении к подпрограмме доступны объекты, которые объявлены в ней и до ее описания.
Обмен информацией между вызываемой и вызывающей функциями осуществляется с помощью механизма передачи параметров. Переменные, указанные в заголовке подпрограммы называются формальными параметрами или просто параметрами подпрограммы. Эти переменные могут использоваться внутри подпрограммы. Список переменных в операторе вызова подпрограммы – это фактические параметры, или аргументы.
Механизм передачи параметров обеспечивает обмен данных между формальными и фактическими параметрами, что позволяет выполнять подпрограмму с различными данными. Между фактическими параметрами в операторе вызова и формальными параметрами в заголовке подпрограммы устанавливается взаимно однозначное соответствие. Количество, типы и порядок следования формальных и фактических параметров должны совпадать.
Передача параметров выполняется следующим образом. Вычисляются выражения, стоящие на месте фактических параметров. В памяти выделяется место под формальные параметры в соответствии с их типами. Выполняется проверка типов и при их несоответствии выдается диагностическое сообщение. Если количество и типы формальных и фактических параметров совпадают, то начинает работать механизм передачи данных между фактическими и формальными параметрами.
Формальные параметры процедуры можно разделить на два класса: параметры-значения и параметры-переменные.
2
При передаче данных через параметры – значения в подпрограмму передаются значения фактических параметров, и доступа к самим фактическим параметрам из подпрограммы нет.
При передаче данных параметры-переменные заменяют формальные параметры, и, следовательно, в подпрограмме есть доступ к значениям фактических параметров. Любое изменение параметров-переменных в подпрограмме приводит к изменению соответствующих им формальных параметров. Следовательно, входные данные следует передавать через параметры-значения, для передачи изменяемых в результате работы подпрограммы данных следует использовать параметры-переменные.
Процедура.
Описание процедуры имеет вид:
procedure имя_процедуры(формальные_параметры); label
описание_меток; const
описание_констант;
type
описание_типов;
var
описание_переменных; begin
//Тело процедуры.
end;
Начинается описание с заголовка процедуры, где procedure– ключевое слово языка, имя_процедуры– любой допустимый в языке Free Pasacal идентификатор, формальные_параметры– имена формальных параметров и их типы, разделенные точкой с запятой.
Рассмотрим примеры заголовков процедур с параметрами-значениями: procedure name_1(r:real; i:integer; c:char);
Однотипные параметры могут быть перечислены через запятую: procedure name_2(a,b:real; i,j,k:integer);
3
Список формальных параметров не обязателен и может отсутствовать: procedure name_3;
Если в заголовке процедуры будут применяться параметры-пере- менные, то перед ними необходимо указывать служебное слово var, перед параметрами-значениями слово var отсутствует:
procedure name_4(x,y:real; var z:real); //x, y – параметры-значения,
//z – параметр-переменная.
После заголовка идет тело процедуры, которое состоит из раздела описаний (константы, типы, переменные, процедуры и функции, используемые в процедуре) и операторов языка, реализующих алгоритм процедуры.
Для обращения к процедуре необходимо использовать оператор вызова:
имя_процедуры(список_фактических_параметров); Фактические параметры в списке оператора вызова отделяются друг от
друга запятой: a:=5.3; k:=2; s:=’a’; name_1(a, k, s);
Если в описании процедуры формальные параметры отсутствовали, то и при вызове их быть не должно:
name_3;
Пример: Создать подпрограмму (процедуру), которая переводит градусную меру угла в радианы.
Листинг программы:
4
procedure gradus_radian(gradus,minuta,secunda:double;var radian:double);
begin
radian:=gradus*pi/180+minuta*pi /180/60+secunda * pi /180/60/60;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
grad, min, sec, rad: double;
begin
grad:=strtofloat(Edit1.text);
min:=strtofloat(Edit2.Text);
sec:=strtofloat(Edit3.Text);
gradus_radian(grad,min,sec,rad);
Edit4.text:=floattostr(rad);
end;
Рис.1
5
Функция
Описание функции также состоит из заголовка и тела:
function имя_функции(формальные_параметры):тип; label
описание_меток;
const
описание_констант;
type
описание_типов;
var
описание_переменных;
begin
//Тело функции.
end;
Заголовок функции содержит: служебное слово function, любой допустимый в языке Free Pascal идентификатор - имя_функции; имена формальных параметров и их типы, разделенные точкой с запятой - формальные_параметры, тип возвращаемого функцией значения – тип (функции могут возвращать скалярные значения целого, вещественного, логического, символьного или ссылочного типа).
Примеры описания функций: function fun_1 (x:real):real; function fun_2(a, b:integer):real;
Тело функции состоит из раздела описаний (константы, типы, переменные, процедуры и функции, используемые в процедуре) и операторов языка, реализующих ее алгоритм. В теле функции всегда должен быть хотя бы один оператор, присваивающий значение имени функции.
Например:
function fun_2(a, b:integer):real; begin
fun_2:=(a+b)/2;
6
end;
Обращение к функции осуществляется по имени с указанием списка фактических параметров, разделенных запятой:
имя_функции (список_фактических_параметров); Пример 2: Создать подпрограмму (функцию), которая переводит
градусную меру угла в радианы. Листинг программы:
procedure TForm1.BitBtn1Click(Sender: TObject);
function gradus_radian(gradus , minuta , secunda : double):real;
begin
gradus_radian:=gradus*pi/180+minuta*pi/180/60+secun da*pi/180/60/60;
end;
var
grad, min, sec: double; begin
grad:=strtofloat(Edit1.text);
min:=strtofloat(Edit2.Text);
sec:=strtofloat(Edit3.Text); Edit4.text:=floattostr(gradus_radian(grad,min,sec));
end;
Рис.2
7
Задания для самостоятельной работы:
1.Описать процедуру и функцию PowerA3(A, B), вычисляющую третью степень числа A и возвращающую ее в переменной B (A — входной, B — выходной параметр; оба параметра являются вещественными). С помощью этой процедуры и функции найти третьи степени пяти данных чисел.
2.Описать процедуру и функцию PowerA234(A, B, C, D), вычисляющую вторую, третью и четвертую степень числа A и возвращающую эти степени соответственно в переменных B, C и D (A — входной, B, C, D — выходные параметры; все параметры являются вещественными). С помощью этой процедуры и функции найти вторую, третью и четвертую степень пяти данных чисел.
3.Описать процедуру и функцию Mean(X, Y, AMean, GMean),
вычисляющую среднее |
арифметическое AMean = (X+Y)/2 |
и среднее |
||
геометрическое GMean = (X·Y)1/2 двух положительных чисел |
X и Y |
|||
(X и Y — |
входные, AMean и GMean — |
выходные |
параметры |
вещественного типа). С помощью этой процедуры и функции найти среднее арифметическое и среднее геометрическое для пар (A, B), (A, C), (A, D), если даны A, B, C, D.
4. Описать процедуру и функцию TrianglePS(a, P, S), вычисляющую по
стороне a равностороннего |
треугольника |
его |
периметр P = 3·a и |
площадь S = a2·(3)1/2/4 (a — |
входной, P и S — |
выходные параметры; все |
параметры являются вещественными). С помощью этой процедуры и функции найти периметры и площади трех равносторонних треугольников
с данными сторонами.
5.Описать процедуру и функцию RectPS(x1, y1, x2, y2, P, S), вычисляющую периметр P и площадь S прямоугольника со сторонами, параллельными осям координат, по координатам (x1, y1), (x2, y2) его противоположных
вершин (x1, y1, x2, y2 — входные, P и S — выходные параметры вещественного типа). С помощью этой процедуры и функции найти
8
периметры и площади трех прямоугольников с данными противоположными вершинами.
6.Описать процедуру и функцию Minmax(X, Y), записывающую в переменную X минимальное из значений X и Y, а в переменную Y — максимальное из этих значений (X и Y — вещественные параметры, являющиеся одновременно входными и выходными). Используя четыре вызова этой процедуры и функции, найти минимальное и максимальное из данных чисел A, B, C, D.
7.Описать процедуру и функцию Sign(X) целого типа, возвращающую для вещественного числа X следующие значения:
−1, если X<0; 0, если X = 0; 1, если X > 0.
С помощью этой процедуры функции найти значение выражения Sign(A) + Sign(B) для данных вещественных чисел A и B.
8.Описать процедуру и функцию RootCount(A, B, C) целого типа,
определяющую |
количество |
корней |
квадратного |
уравнения |
Ax2 + Bx + C = 0 |
(A, B, C — |
вещественные |
параметры, A ≠ 0). С их |
помощью найти количество корней для каждого из трех квадратных уравнений с данными коэффициентами. Количество корней определять по значению дискриминанта: D = B2 − 4·A·C.
9. Описать процедуру и функцию CircleS(R) вещественного типа, находящую
площадь |
круга |
радиуса R (R — вещественное). С помощью их найти |
|||
площади |
трех |
кругов |
с данными радиусами. Площадь круга |
||
радиуса R вычисляется |
по |
формуле S = π·R2. В |
качестве значения π |
||
использовать 3.14. |
|
|
|
||
10. Описать процедуру |
и |
функцию RingS(R1, R2) |
вещественного типа, |
находящую площадь кольца, заключенного между двумя окружностями с общим центром и радиусами R1 и R2 (R1 и R2 — вещественные, R1 > R2).
9
С их помощью найти площади трех колец, для которых даны внешние и внутренние радиусы. Воспользоваться формулой площади круга радиуса R: S = π·R2. В качестве значения π использовать 3.14.
11.Описать процедуру и функцию TriangleP(a, h), находящую периметр
равнобедренного треугольника по его основанию a и высоте h, проведенной к основанию (a и h — вещественные). С помощью их найти периметры трех треугольников, для которых даны основания и высоты. Для нахождения боковой стороны b треугольника использовать теорему Пифагора:
b2 = (a/2)2 + h2.
12.Описать процедуру и функцию Calc(A, B, Op) вещественного типа, выполняющую над ненулевыми вещественными числами A и B одну из арифметических операций и возвращающую ее результат. Вид операции определяется целым параметром Op: 1 — вычитание, 2 — умножение, 3 — деление, остальные значения — сложение. С помощью Calc выполнить для данных A и B операции, определяемые данными целыми N1, N2, N3.
13.Описать процедуру и функцию Fact(N) вещественного типа,
вычисляющую значение факториала N! = 1·2·…·N (N > 0 — параметр целого типа; вещественное возвращаемое значение используется для того, чтобы избежать целочисленного переполнения при больших значениях N).
С помощью этой функции найти факториалы пяти данных целых чисел.
14.Описать процедуру и функцию Fact2(N) вещественного типа, вычисляющую двойной факториал:
N!! = 1·3·5·…·N, если N — нечетное;
N!! = 2·4·6·…·N, если N — четное.
(N > 0 — параметр целого типа; вещественное возвращаемое значение используется для того, чтобы избежать целочисленного переполнения при больших значениях N). С помощью этой функции найти двойные факториалы пяти данных целых чисел.
10