Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа №3

.pdf
Скачиваний:
24
Добавлен:
27.05.2015
Размер:
332.43 Кб
Скачать

Лабораторная работа № 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