Содержание данной главы
Модуль 5. Процедуры и функции
5.1. Процедуры и функции.
Процедуры и функции используются в тех случаях, когда:
- Алгоритм или программа содержат одинаковые действия, различающиеся, возможно исходными данными;
- Решаемая задача состоит из нескольких задач, меньших по объему и сложности;
- Решением задачи занимается коллектив программистов.
5.2. Функции пользователя.
Работа с функцией в Паскаль-программе состоит из двух частей: объявление функции и обращение к функции. Объявление функции производится в специальном разделе декларационной части Паскаль-программы непосредственно перед разделом операторов. Начинается объявление с заголовка функции. В общем виде заголовок имеет следующие разделы:
function <имя функции> (<список параметров>): <тип возвращаемого результата>, где function - зарезервированное слово.
В качестве имени функции может использоваться любой допустимый идентификатор.
Список параметров содержит перечисление всех формальных аргументов с указанием их типа. Однотипные аргумент можно перечислить списком.
Тип возвращаемого результата - один из стандартных типов языка Паскаль.
Пример:
function factorial (n:integer):real;
function mm (a, b:real; c:byte; d:char):integer;
При обращении к функции из раздела операторов Паскаль-программы указывается имя функции и список фактических параметров.
Обращение к функциям возможно из оператора вывода.
В качестве фактических параметров могут использоваться как значения, так и ссылки на другие переменные. В любом случае количество фактических и формальных параметров одинаково и передача значений происходит в порядке записи.
Пример:
F:=factorial(5);
T:=factorial(2)-7;
M:=factorial(n);
P:=mm(d,c,b,a);
Задача 1: вычислить факториалы первых 10 натуральных чисел:
var i: byte;
f: real;
function factorial (n: byte): real;
var i: byte;
f: real;
begin
f:=1;
for i:=1 to n do
f:=f * i;
factorial:=f;
end;
begin
for i:=1 to 10 do
begin
f:=factorial(i);
writeln(f);
end;
end.
Задача 2: вычислить 10 натуральных степеней для каждого из первых 10 натуральных чисел:
var i, j : byte;
p: real;
function stepen (b: integer; n: byte): real;
var i: byte;
a: real;
begin
a:=1;
for i:=1 to n do
a:=a * b;
stepen:=a;
end;
begin
for i:=1 to 10 do
for j:=1 to 10 do
begin
p:=stepen (i, j);
write (p);
end;
end.
5.3. Процедуры пользователя.
Функции являются частным случаем, т.е. подвидом процедур. Следовательно, все свойства функций справедливы для процедур.
Объявляются процедуры в описательной части программы, в одном разделе с функциями. Порядок объявления независимых друг от друга процедур и функций не важен, если процедура использует в себе обращение к функции или другой процедуре, то последнии обязательно объявляются раньше.
Объявление процедур начинается с заголовка:
procedure <имя процедуры> (<список параметров>);, где procedure - зарезервированное слово.
Список параметров процедур содержит формальные параметры двух видов. Те, значения которых не возвращаются в программу, и параметры с возвращаемыми значениями.
Последние в списке отмечаются зарезервированным словом var.
Пример:
procedure xxx(a: byte; var b: byte; c,d: real; var j: char);
Для обращения к процедуре в тексте программы указывается имя процедуры и, в скобках, список фактических параметров. В этом списке параметрам с возвращаемыми значениями обязательно соответствуют переменные.
Пример:
xxx (5, b, c, 8, i);
Задача 1: вычислить факториалы первых 10 натуральных чисел:
var i: byte;
f: real;
procedure factorial (n: byte; var f: real);
var i: byte;
begin
f:=1;
for i:=1 to n do
f:=f * i;
end;
begin
for i:=1 to 10 do
begin
factorial(i, f);
writeln(f);
end;
end.
Задача 2: вычислить 10 натуральных степеней для каждого из первых 10 натуральных чисел:
var i, j : byte;
p: real;
procedure stepen (b: integer; n: byte; var f: real);
var i: byte;
begin
f:=1;
for i:=1 to n do
f:=f * b;
stepen:=a;
end;
begin
for i:=1 to 10 do
for j:=1 to 10 do
begin
stepen (i, j, p);
write (p);
end;
end.
5.4. Использование функций в приближенных вычислениях.
Числовым рядом называется выражение вида U1+U2+…+Un+…, где U1, U2,…, Un - элементы ряда. Этот ряд можно записать в виде
Сумма Sn=U1+U2+…+Un называется n-ой частной суммой ряда.
Сумма U1(x)+U2(x)+…+Un(x)+…, в которой каждый элемент Un(x) является функцией аргумента x, называется функциональной.
Степенным называется функциональный ряд вида a0+a1x+a2x2+…+anxn+…, где a0, a1, a2,…,an,… - постоянные числа, называемые коэффициентами ряда.
Степенной ряд называется рядом Тейлора.
5.5. Использование процедур в приближенных вычислениях.
Пусть требуется вычислить
Значение равно площади криволинейной трапеции ACDB, сторона CD которой является частью графика функции f (x).
1 способ: преобразуем криволинейную трапецию в обычную, заменив сторону CD отрезком.
2 способ: заменим сторону CD криволинейной трапеции на отрезок, параллельный стороне AB и проходящий через одну из вершин C или D.
3 способ: восстановим в середине отрезка AB перпендикуляр до пересечения с графиком функции f(x). Проведем через найденную точку отрезок, параллельный AB.
Для нахождения приближенного значения определенного интеграла разобъем отрезок AB на две равные части (величину 2 обозначим через n). В середине каждого отрезка восстановим перпендикуляры и построим соответствующие прямоугольники. Вычислим площадь S1.
Т.к. выполнив вычисления один раз не возможно оценить их точность, то продолжим разбиение отрезка AB (n=4).
После проведенных вычислений можно оценить полученную точность, которая равна |S1-S2|. Если точность оказывается достаточной, то последнее вычисленное значение S2 будет считаться значением определенного интеграла. Если точность не достаточна, то последнее разбиение считается начальным, т.е. S1=S2 и количество разбиений увеличивается вдвое, т.е. n=2*n.
5.6. Использование библиотек стандартных процедур в программах. Модуль Crt. Текстовые режимы использования экрана.
Язык программирования Паскаль содержит ряд предопределенных процедур, разделенных по темам на несколько библиотек (модулей). Файлы с библиотеками процедур имеют расширение tpu и хранятся в папке units основной директории tp.
Подключение библиотек к программе производится сразу за заголовком программы. Для этого используется служебное слово uses. За ним перечисляются через запятую имена файлов библиотек.
Модуль Crt содержит процедуры и функции, испльзующиеся для работы на текстовом экране. Примером процедуры этого модуля может служить очистка экрана clrscr. Процедуры этого модуля всегда работают в активном окне. Окном считается прямоугольная область, определяемая координатами верхнего левого и нижнего правого угла. По умолчанию активным окном является экран. Размеры экрана, по умолчанию, - 80x25 знакомест.
Заданный по умолчанию режим экрана можно изменить, используюя процедуру textmode (<константа режима>). Константа 0 задает черно/белый режим с размером экрана 40x25.
1 - цветной режим 40x25
2 - черно/белый режим 80x25
3 - цветной режим 80x25
7 - черно/белый режим и монохромный дисплей
256 - загружаемый шрифт - 43 строки в EGA и 50 строк в VGA.
Процедуры этого модуля могут обеспечивать работу со звуком. Частоту звука определяет процедура sound (<число герц>). Длительность звука регулируется процедурой delay (<длительность звука в мс.>) и процедурой nosound - отключение звука.
Короткий звуковой сигнал можно обеспечить, используя символ #7 в списке вывода оператора write. В списке вывода также можно использовать еще 4 специальных символа:
#8 - смещение курсора влево на одну позицию
#10 - сдвиг курсора на одну строку вниз
#13 - перемещение курсора на левую границу окна
Комбинация #13#10 соответствует нажатию клавиши Enter.
Для активирования нового окна следует определить его границы. Для этого используется процедура window (x1, y1, x2, y2). Координаты x1, y1, x2, y2 - абсолютные, все остальные координаты в окне - относительные, а точкой отсчета считается верхний левый угол окна. В пределах окна курсор можно переместить на овую позицию, используя процедуру gotoxy (x, y). Если x, y выходят за пределы окна, то процедура игнорируется. Для изменения цветовой гаммы окна используются следующие процедуры:
textbackground (<…>) - изменяет цвет фона; в качестве аргументов выступают числа 0..7
textcolor (<…>) - изменяет цвет текста; в качестве аргументов выступают числа 0..15.
Для организации мерцающих цветов текста к константе цвета необходимо прибавить 128.
назад содержание вперед на
главную
|