Тема 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.
Поиск по сайту:
|